我们正在将(巨大的)项目移至git,并且正在考虑使用子模块。我们的计划是在超级项目中拥有三个不同的负责人:release,stable,latest。项目负责人将负责发布和稳定分支。他们将根据需要移动子模块。
问题是“最新的”头。我们希望超级项目的“最新”头(自动)跟踪所有子模块的主分支。而且,如果它将显示对子模块的所有提交的历史记录,那也很好。
我看过gitslave,但这并不是我们想要的。有什么建议?
我们正在将(巨大的)项目移至git,并且正在考虑使用子模块。我们的计划是在超级项目中拥有三个不同的负责人:release,stable,latest。项目负责人将负责发布和稳定分支。他们将根据需要移动子模块。
问题是“最新的”头。我们希望超级项目的“最新”头(自动)跟踪所有子模块的主分支。而且,如果它将显示对子模块的所有提交的历史记录,那也很好。
我看过gitslave,但这并不是我们想要的。有什么建议?
Answers:
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];
^^^
特殊值
.
用来指示子模块中分支的名称应与当前存储库中的当前分支的名称相同。
参见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(您已经看过)似乎是最合适的,包括commit操作。
由于需要签出到正确的子模块分支,进行更改,提交,然后进入超级项目并提交提交(或至少记录新的位置),因此对子模块进行更改有点烦人。子模块)。
其他替代方法在此处详细说明。
git config -f .gitmodules submodule.<path>.branch <branch>
。添加所有内容,提交并推送。
--remote
如果您不希望在更新时变得头昏眼花,请使用该标签,这很重要,想知道为什么似乎您刚提取的代码在master后面!
git submodule update
通过告诉命令哪个子提交(即主节点上的最新提交)来更新子模块,从而影响命令的行为,而不会自动地导致父仓库更新哪个子模块。克隆时子模块指向了commit?