如何更改git子模块跟踪远程分支?

时间:2015-09-07 09:15:29

标签: git git-submodules

我使用以下命令添加子模块

  

git submodule add -b br1 [repo]

.gitmodules文件有entry branch = br1。现在我想将分支切换到br2。我可以进入submodule文件夹并切换分支,但不会更新.gitmodules文件。

我怎么能这样做?

2 个答案:

答案 0 :(得分:2)

Git使用.gitmodules存储子模块项目的链接,但不存储特定版本的链接。因此,当您切换子模块的分支时,git .gitmodules文件不会更改。

当您更改子模块时,git会更新子模块版本的提交编号。如果你看一下你的上层模块

git diff

你会看到像

这样的东西
-Subproject commit 829b869657418fdac7964c3671ed9a378f09c032
+Subproject commit 829b869657418fdac7964c3671ed9a378f09c032-dirty

如果你希望每个人都使用新的子模块分支,你必须提交&将该更改(新的子模块提交编号)推送到您的上层模块仓库。

基本上它就像是指向特定子模块版本的链接。

在此查看详细信息:https://git-scm.com/book/en/v2/Git-Tools-Submodules#Starting-with-Submodules

答案 1 :(得分:0)

我遇到了同样的问题。我就是这样解决的。

因为主 repo 跟踪的是一个分支,而不是一个特定的提交,所以在子模块中拉取更改或切换分支不会在主 repo 中进行任何修改。

改为编辑 .gitmodules 文件。 有一条线

branch = br1

用新的分支替换它(至少在子模块中获取一次之后)

branch = br2

然后在新的提交中,您可以描述从现在开始跟踪的 br2。

然后,任何其他开发人员都可以使用 git submodule update --remote 更新他们的克隆以拉动您的更改,并跟踪 br2