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

我想创build一个回购,其中拉远程回购。

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

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

用jQuery作为子模块创build一个仓库并将我自己的外部添加为远程仓库的过程是什么?

另外,一旦这个设置,如果我推/拉到我自己的遥控器,外部将保持完好?

  1. 你有一个项目 – 称之为已经有github回购的MyWebApp
  2. 你想在你的项目中使用jQuery仓库
  3. 你想把jQuery的回购作为一个子模块到你的项目中。

子模块真的很容易引用和使用。 假设您已经将MyWebApp设置为repo,从terminal发出以下命令:

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

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

 git submodule update --init --recursive 

你现在应该把所有最新的代码克隆到子模块中。 如果jQuery的回购变化,你想拉最新的代码,只需再次发出submodule update命令。 请注意:在我的项目中,我通常有许多外部存储库,所以我总是将回购组合在“外部”目录下。

在线Pro Git书籍以易于阅读的方式呈现了一些有关子模块(和一般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 pull”不会更新子模块,“git submodules update”也不会下载这些子模块的最新HEAD。

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

 git submodule foreach git pull 

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

我认为@Hugo的答案可能是你所需要的,并且工作正常。 所以我find了一个更简单的方法。

 git submodule update --remote 

就这样。

所以完整的工作stream程可能是:

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