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

How to change git submodule tracking remote branch?

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

git submodule add -b br1 [repo]

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

我该怎么做?

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

相反 git 在您更改子模块时更新子模块版本的提交号。如果你看看你的上层模块

git diff

你会看到类似

的内容
-Subproject commit 829b869657418fdac7964c3671ed9a378f09c032
+Subproject commit 829b869657418fdac7964c3671ed9a378f09c032-dirty

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

基本上它对特定子模块版本的工作方式类似于 link。

查看此处了解详情:https://git-scm.com/book/en/v2/Git-Tools-Submodules#Starting-with-Submodules

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

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

相反,编辑 .gitmodules 文件。 有一行

branch = br1

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

branch = br2

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

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