Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何设置git项目以使用外部回购子模块?_Git_Github_External_Git Submodules - Fatal编程技术网

如何设置git项目以使用外部回购子模块?

如何设置git项目以使用外部回购子模块?,git,github,external,git-submodules,Git,Github,External,Git Submodules,我想创建一个远程回购协议 例如,假设jQuery是一个子模块: git://github.com/jquery/jquery.git 将jQuery作为子模块创建一个repo,并将我自己的外部repo添加为远程repo的过程是什么 同样,一旦设置完毕,如果我按/拉我自己的遥控器,外部会保持完整吗?最后我发现它似乎符合我期望的子模块和遥控器的工作方式 你有一个项目,称之为MyWebApp,它已经有了github回购协议 您希望在项目中使用jquery存储库 您希望将jquery repo作为子模

我想创建一个远程回购协议

例如,假设jQuery是一个子模块:

git://github.com/jquery/jquery.git
将jQuery作为子模块创建一个repo,并将我自己的外部repo添加为远程repo的过程是什么

同样,一旦设置完毕,如果我按/拉我自己的遥控器,外部会保持完整吗?

最后我发现它似乎符合我期望的子模块和遥控器的工作方式

  • 你有一个项目,称之为MyWebApp,它已经有了github回购协议
  • 您希望在项目中使用jquery存储库
  • 您希望将jquery repo作为子模块拉入项目中
  • 子模块非常非常容易参考和使用。假设您已经将MyWebApp设置为回购,则从终端发出以下命令:

    cd MyWebApp
    git submodule add git://github.com/jquery/jquery.git externals/jquery
    
    这将创建一个名为
    externals/jquery
    *的目录,并将其链接到github jquery存储库。现在我们只需要初始化子模块并将代码克隆到其中:

    git submodule update --init --recursive
    
    您现在应该将所有最新的代码克隆到子模块中。如果jquery repo发生了变化,并且您想要下载最新的代码,只需再次发出
    子模块update
    命令。请注意:我的项目中通常有许多外部存储库,因此我总是将repo分组在“externals”目录下

    网上有一些关于子模块(以及一般的git)的好信息,这些信息以易于阅读的方式呈现。或者,
    git help子模块
    也会提供良好的信息。或者看看GitWiki上的

    我注意到这篇博客文章谈到了子模块,并将它们与Subversion的svn:externals机制进行了比较:


    *作为最佳实践,您应该始终将子模块放在它们自己的目录中,例如Externals。如果不这样做,您的根项目目录可能会很快变得非常混乱。

    您需要知道的大部分内容都已经得到了回答,因此我不想费心解决这个问题,但是,我发现了一小部分通常会丢失的信息

    正如您所知,“git pull”不会更新子模块,“git submodules update”也不会下载这些子模块的最新头

    要将所有子模块更新为其最新的上游版本,可以使用

    git submodule foreach git pull
    

    若你们经常修改你们的子模块,并且有很多,那个么“git foreach”将变得非常宝贵。

    我认为@Hugo答案可能是你们所需要的,并且工作得很好。所以我找到了一个更简单的方法

    git submodule update --remote
    
    就这些

    因此,完整的工作流程可以是:

    git clone project-with-submodules
    git submodule init
    git config -l
    git submodule update --remote
    

    当你说“拉入”时,你是想让jQuery回购成为你自己回购的子模块吗?是的,没错,如果不清楚的话,很抱歉。我想知道我是如何将其设置为外部的,同时在git wiki上推拉对我自己的Remote的更改的。很好的解释!:)此外,“git help submodules”还可以帮助您了解更多细节、内部结构等。谢谢,这正是我所需要的。@Chevi这取决于您的需求。一般来说,将git项目作为子模块添加到项目中是一个很好的解决方案,适用于经常更改或仍在开发中的项目。这使您可以轻松确保项目中的所有第三方代码都是最新的。对于本质上是静态的第三方代码——稳定的、成熟的代码,在不同版本之间可能不会有太大的变化——使用子模块并没有提供太多的价值。对不起,与svn externals相比,它并不是这样easy@Keil这是两个命令,
    git子模块添加
    git子模块更新
    …我不确定它能变得多么容易。