我想创建一个回购拉在远程回购。

例如,让我们把jQuery作为一个子模块:

git://github.com/jquery/jquery.git

用jQuery作为子模块创建一个repo并添加自己的外部作为远程repo的过程是什么?

此外,一旦设置好了,如果我推/拉我自己的遥控器,外部会保持完好吗?


当前回答

最后,我发现http://github.com/evilchelu/braid似乎符合我期望的子模块和遥控器的工作方式

其他回答

最后,我发现http://github.com/evilchelu/braid似乎符合我期望的子模块和遥控器的工作方式

我认为@Hugo的答案可能是你需要的,而且效果很好。所以我找到了一个更简单的方法。

git submodule update --remote

这是所有。

所以一个完整的工作流程可以是:

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

你需要知道的大部分内容都已经有了答案,所以我就不赘述了,但是,我发现了通常缺失的一小部分信息。

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

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

git submodule foreach git pull

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

你有一个项目——叫它MyWebApp,它已经有一个github回购 你想在你的项目中使用jquery存储库 你想把jquery repo作为子模块拉到你的项目中。

子模块非常非常容易引用和使用。假设你已经将MyWebApp设置为repo,从终端发出这些命令:

cd MyWebApp
git submodule add git://github.com/jquery/jquery.git externals/jquery

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

git submodule update --init --recursive

现在您应该已经将所有最新的代码克隆到子模块中。如果jquery的repo发生了变化,而你想把最新的代码拉下来,只需再次发出子模块更新命令。请注意:在我的项目中,我通常有一些外部存储库,所以我总是将回购归类在“externals”目录下。

在线Pro Git Book以易于阅读的方式提供了一些关于子模块(以及Git总体)的好信息。另外,git的帮助子模块也会提供好的信息。或者看看Git wiki上的Git子模块教程。

我注意到这篇博客文章讨论了子模块,并将它们与Subversion的svn:externals机制进行了比较:http://speirs.org/blog/2009/5/11/understanding-git-submodules.html

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