我们正在将我们的(巨大的)项目转移到git,我们正在考虑使用子模块。我们的计划是在超级项目中有三个不同的头:发布,稳定,最新。项目负责人将处理释放和稳定的分支机构。他们将根据需要移动子模块。
问题是“最新”头。我们希望超级项目“最新”头部跟踪所有子模块的主分支(自动)。如果能够显示子模块的所有提交历史,那也很棒。
我看过gitslave,但这不是我们想要的。有什么建议吗?
答案 0 :(得分:203)
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
如果你的子模块已经存在,你现在希望跟踪一个分支,请参阅“ how to make an existing submodule track a branch ”。
有关子模块的一般信息,请参阅Vogella's tutorial on submodules。
注意:
git submodule add -b . [URL to Git repo];
^^^
特殊值
.
用于表示子模块中分支的名称应与当前存储库中当前分支的名称相同。
请参阅commit b928922727d6691a3bdc28160f93f25712c565f6:
submodule add
:如果给出了--branch
,请将其记录在.gitmodules
这使您可以在添加新子模块时在
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 ...
将从您用于初始化子模块的同一分支获取更新,这通常是您想要的。
签名:W。Trevor King
原始答案(2012年2月):
子模块是父仓库引用的单个提交
由于它本身就是一个Git仓库,因此可以通过该子模块中的git log
访问“所有提交的历史记录”。
因此,如果父级自动跟踪子模块的给定分支的最新提交,则需要:
gitslave(您已经查看过)似乎最合适,including for the commit operation。
由于需要签出正确的子模块分支,进行更改,提交,然后进入超级项目并提交提交(或者至少记录新的),对子模块进行更改有点烦人子模块的位置。)
其他替代方案是detailed here。