最新的 git 子模块跟踪

我们正在将我们的(巨大的)项目移动到 git,我们正在考虑使用子模块。我们的计划是在这个超级项目里有三个不同的头:

释放,稳定,最新

项目负责人将处理发布和稳定分支。他们将根据需要移动子模块。

问题是“最新”的头。我们希望超级项目“最新的”头部跟踪所有子模块的主分支(自动)。如果它能显示所有提交到子模块的历史,那就太好了。

我已经看过 GitSlave 了,但不是我们想要的,有什么建议吗?

134692 次浏览

编辑(2020.12.28) : 自2020年10月以来,GitHub 将默认的 师父分支更改为 总台分支
下面的这个答案仍然反映了过去的变数命名原则。


2013年3月最新情况

Git 1.8.2 增加了追踪分支的可能性。

git submodule”开始学习到 与远处树枝的尖端结合在一起的一种新模式(而不是与超级项目的 gitlink 中记录的提交集成)。

# add submodule to track master branch
git submodule add -b master [URL to Git repo];


# update your submodule
git submodule update --remote

如果您有一个子模块 已经到了,您现在希望跟踪一个分支,请参见“ 如何让现有的子模块跟踪一个分支”。

有关子模块的一般信息,请参见 Vogella 关于子模块的教程

注:

git submodule add -b . [URL to Git repo];
^^^

git submodule手册页:

.的特殊值用于指示 子模块中的分支的名称应该与当前存储库中的当前分支的名称相同


提交 b928922727d6691a3bdc28160f93f25712c565f6:

如果给出了 --branch,请在 .gitmodules中记录它

签名: W · 特雷弗 · 金

这允许您在添加新子模块时轻松地在 .gitmodules中记录 submodule.<name>.branch选项。有了这个贴片,

$ git submodule add -b <branch> <repository> [<path>]
$ git config -f .gitmodules submodule.<path>.branch <branch>

减少到

$ git submodule add -b <branch> <repository> [<path>]

这意味着将来调用

$ git submodule update --remote ...

将从用于初始化子模块的同一个分支获取更新,这通常是您想要的。


原答案(2012年2月) :

子模块是由父回购引用的单个提交。
因为它本身就是一个 Git 回购,所以“所有提交的历史”可以通过该子模块中的 git log访问。

因此,为了让父模块自动跟踪子模块的给定分支的最新提交,它需要:

  • 子模块中的 cd
  • Git get/pull 确保它在正确的分支上有最新的提交
  • 把 CD 放回母公司
  • 添加和提交,以记录子模块的新提交。

GitSlave (您已经看过了)似乎是最合适的 包括提交操作

由于需要签出到正确的子模块分支,进行更改、提交,然后进入超级项目并提交(或者至少记录子模块的新位置) ,因此对子模块进行更改有点烦人。

其他选择是 详细资料在此