我想要创建一个回收远程仓库的仓库。如何设置一个使用外部回购子模块的git项目?
例如,假设jQuery的一个子模块:
git://github.com/jquery/jquery.git
什么是创建与jQuery回购作为一个子模块,并加入我自己的外部作为远程回购的过程。
此外,一旦这个设置,如果我推/拉到我自己的远程,外部将保持完好?
我想要创建一个回收远程仓库的仓库。如何设置一个使用外部回购子模块的git项目?
例如,假设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 repo发生变化,并且想要拉取最新的代码,只需再次发出submodule update
命令。请注意:在我的项目中,我通常有许多外部存储库,所以我总是将repos归入“外部”目录下。
在线Pro Git Book有一些关于子模块(和一般git)的一些很好的信息,以易于阅读的方式呈现。或者,git help submodule
也将提供良好的信息。或者看看git wiki上的Git Submodule Tutorial。
我注意到这个博客条目其中谈到子模块,并比较他们颠覆的SVN:外部对象机制:http://speirs.org/blog/2009/5/11/understanding-git-submodules.html
*作为最佳实践,你应该始终把你的子模块在自己的目录,如外部材料。如果你不这样做,你的根项目目录会非常快速地变得非常混乱。
很好的解释! :)另外,“git help submodules”可以帮助你更多的细节,内部等等。 – WhyNotHugo 2012-02-29 05:35:45
@Hugo好点。我将这些信息添加到答案中。 – memmons 2012-03-27 16:04:24
只是为了澄清,如果我需要在Github上的项目上使用jQuery,将jQuery作为子模块添加会更好吗? – aurbano 2013-01-19 12:35:36
在我发现http://github.com/evilchelu/braid最终它似乎适合与我没有料到子模块和遥控器的工作
您需要知道的大部分内容已经得到解答,所以我不打算解决这个问题,但是,我发现了一小部分通常缺失的信息。如你所知,“git pull”不会更新子模块,“git submodules update”也不会下载这些子模块的最新HEAD。
要更新所有子模块对他们的上游最新版本,你可以使用
git submodule foreach git pull
如果你经常改变你的子模块,并有大量的,那么“混帐的foreach”将成为非常宝贵的。
我认为@Hugo的答案可能是你需要的,并且工作正常。所以我找到了一个更简单的方法。
git submodule update --remote
就是这样。
因此,一个完整的工作流程可能是:
git clone project-with-submodules
git submodule init
git config -l
git submodule update --remote
当你说你说你想要的jQuery的回购协议是你自己回购的子模块“上拉”? – ezod 2010-01-26 17:02:27
是的,对不起,如果不明确。我想知道我是如何将它设置为外部的,同时将更改推送到我自己的远程 – Tom 2010-01-26 19:43:54
请参见[Git子模块教程](https://git.wiki.kernel.org/index.php/GitSubmoduleTutorial)在git wiki上。 – 2015-08-04 13:49:51