我想创建一个可以拉取远程仓库的存储库。
例如,让我们以 jQuery 作为子模块:
git://github.com/jquery/jquery.git
如何创建一个包含jQuery子模块,并将自己的外部存储库添加为远程存储库的过程是什么?
一旦设置完成后,如果我推送/拉取到自己的远程存储库,外部存储库是否会保持不变?
我想创建一个可以拉取远程仓库的存储库。
例如,让我们以 jQuery 作为子模块:
git://github.com/jquery/jquery.git
如何创建一个包含jQuery子模块,并将自己的外部存储库添加为远程存储库的过程是什么?
一旦设置完成后,如果我推送/拉取到自己的远程存储库,外部存储库是否会保持不变?
子模块非常容易引用和使用。假设您已经设置了MyWebApp作为仓库,请从终端发出以下命令:
cd MyWebApp
git submodule add git://github.com/jquery/jquery.git externals/jquery
这将创建一个名为externals/jquery
*的目录,并将其链接到github jquery存储库。现在我们只需要初始化子模块并将代码克隆到其中:
git submodule update --init --recursive
现在你应该已经将所有最新的代码克隆到子模块中了。如果jquery仓库发生更改,您想要拉取最新的代码,只需再次执行submodule update
命令即可。请注意:我通常在我的项目中有许多外部仓库,因此我总是将这些仓库分组放置在一个名为“externals”的目录下。
在线的Pro Git Book提供了一些关于子模块(以及git)的好信息,以易于阅读的方式呈现。另外,git help submodule
也会提供很好的信息。或者可以看一下git wiki上的Git Submodule Tutorial。
我注意到这篇博客文章谈到了子模块,并将它们与Subversion的svn:externals机制进行了比较:http://speirs.org/blog/2009/5/11/understanding-git-submodules.html
* 作为最佳实践,您应该始终将子模块放置在它们自己的目录中,例如Externals。如果不这样做,您的根项目目录可能会非常混乱。
git submodule add
和 git submodule update
... 我不确定会有多简单。 - memmons大部分你需要知道的内容已经得到回答,所以我不会去讨论那些问题。但是,我发现有个小问题通常被忽略了。
正如你所知,“git pull”不会更新子模块,“git submodules update”也不会下载这些子模块的最新HEAD。
要将所有子模块更新为其最新的上游修订版本,可以使用:
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