我们正在将我们的(巨大的)项目转移到 git 并且我们正在考虑使用子模块。我们的计划是在超级项目中有三个不同的负责人:
发布,稳定,最新
项目负责人将处理发布和稳定分支。他们将根据需要移动子模块。
问题是“最新”的头。我们希望超级项目“最新”头跟踪所有子模块的主分支(自动)。如果它能够显示对子模块的所有提交的历史记录,那就太好了。
我看过 gitslave,但这不是我们想要的。有什么建议么?
我们正在将我们的(巨大的)项目转移到 git 并且我们正在考虑使用子模块。我们的计划是在超级项目中有三个不同的负责人:
发布,稳定,最新
项目负责人将处理发布和稳定分支。他们将根据需要移动子模块。
问题是“最新”的头。我们希望超级项目“最新”头跟踪所有子模块的主分支(自动)。如果它能够显示对子模块的所有提交的历史记录,那就太好了。
我看过 gitslave,但这不是我们想要的。有什么建议么?
编辑(2020.12.28):自 2020 年 10 月以来,GitHub 将默认主分支更改为主分支。请参阅https://github.com/github/renaming
下面的这个答案仍然反映旧的命名约定。
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:
submodule add
: 如果--branch
给出,记录在.gitmodules
签字人:W. Trevor King
这使您可以在添加新子模块时轻松记录
submodule.<name>.branch
选项。.gitmodules
有了这个补丁,$ 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 月):
子模块是父 repo 引用的单个提交。
由于它本身就是一个 Git 存储库,因此可以通过git log
该子模块中的 a 访问“所有提交的历史记录”。
因此,要让父级自动跟踪子模块给定分支的最新提交,它需要:
gitslave(您已经看过)似乎是最合适的,包括提交操作。
由于需要签出正确的子模块分支,进行更改,提交,然后进入超级项目并提交提交,因此对子模块进行更改有点烦人(或至少记录子模块)。
此处详细介绍了其他替代方案。