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

时间:2010-01-26 16:53:31

标签: git github external git-submodules

我想创建一个可以拉入远程仓库的仓库。

例如,假设jQuery为子模块:

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

使用jQuery作为子模块创建repo并将我自己的外部作为远程仓库添加的过程是什么。

一旦设置好,如果我推/拉到我自己的遥控器,外部是否会完好无损?

4 个答案:

答案 0 :(得分:331)

  1. 你有一个项目 - 称之为 MyWebApp 已经有一个github repo
  2. 您希望在项目中使用 jquery存储库
  3. 您想将jquery repo作为子模块拉入您的项目。
  4. 子模块真的很容易引用和使用。假设您已将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发生更改并且您想要删除最新代码,请再次发出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。如果不这样做,您的根项目目录可能会非常快速地混乱。

答案 1 :(得分:20)

你需要知道的大部分内容已经得到了解答,所以我不打算解决这个问题,但是,我发现了一小段通常缺失的信息。

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

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

git submodule foreach git pull

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

答案 2 :(得分:2)

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

答案 3 :(得分:0)

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

git submodule update --remote

就是这样。

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

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