git子模块:在子模块中跟踪相应的分支?

时间:2015-05-14 23:04:05

标签: git

假设您有一个项目分为超级项目和子模块。它们都有稳定的(主)分支和dev分支。有没有办法设置子模块,以便超级项目从其dev分支和子模块的稳定分支跟踪子模块的dev分支?

我想象的是.gitmodules中的这种情况:

[submodule "subproject"] path = subproject url = http://www.github.com/nfirvine/subproject branch = $current_branch_name

(我正在专注于Ansible project,他们的stable-1.9分支跟踪其子模块的devel分支。这似乎是在寻找麻烦。)

您可以使用git属性来指定.gitmodules不会自动合并,但我想知道是否有更聪明的东西。

2 个答案:

答案 0 :(得分:0)

超级项目中的每个提交都将与子模块中的特定提交相关联。子模块不会自动更新或跟随分支:每次要同步时,都需要cd到子模块目录,签出您选择的分支,运行git pull,然后将结果提交给超级项目。您可以让超级项目中的每个分支指向一个提交,而该提交又指向适当的子模块提交; git不会为你做那件事。当您合并分支时,您需要手动对该部分进行排序。

这就是假设你没有写一些很棒的剧本来驯服疯狂,当然。

答案 1 :(得分:0)

您可以让主项目跟踪子模块的提交,但您必须提交任何更改。

例如,您有一个主项目和一个子模块,它们都有一个master和develop分支。如果您在主项目中提交子模块目录,则下次您或其他仓库运行git fetch && git submodule update时,您将获得子模块的最新提交。

你必须更新你的子模块,然后提交更改,跟踪不是自动的,因为只需更新git repos并拉动它们就可以没有子模块。