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

5

我使用以下命令添加了一个子模块:

git submodule add -b br1 [repo]

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

如何做到呢?


你为什么想要这样做?如果你考虑过一点,如果你更改了子模块跟踪的分支,那么会不会可能扰乱其他人的代码呢?子模块是Git中非常棘手的一个领域。对于你的问题可能会有一些解决方法。 - Tim Biegeleisen
2
我正在稳定分支br1上工作,想要在实验性分支br2上进行测试。如果我不更新.gitmodules文件,其他用户将无法看到它。 - Rohit
2个回答

3

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

我没有看到差异,因为我创建了一个分支,它除了指针什么也不做! - Rohit
1
但是,这仍然与提交有关。如果您想更新提交并更改分支,正确的工作流程是直接编辑.gitmodules文件吗? - Pxtl

0

我面临相同的问题。这是我的解决方法。

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

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

branch = br1

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

branch = br2

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接