git submodule sync无法工作

7
我正在尝试根据这些说明更改子模块上的远程。在修改并保存.gitmodules后,执行git submodule sync,我的子模块没有发生变化,但是我的.git/config文件已更新以匹配.gitmodules中新的远程url。
我还尝试了git submodule sync --recursive,并按照此提示执行rm -rf .git/modules/<mySubmodule>,但没有任何变化。实际上,运行后者命令然后再次运行git submodule sync会出现fatal: Not a git repository: ../.git/modules/<mySubmodule>。有什么建议吗?
我最初通过git submodule add git://<mySubmodule-url>将子模块添加到项目中,如git文档所述。 编辑 我甚至通过homebrew升级到v2.1.1,仍然没有任何变化。我还尝试完全从头开始,并在两个完全不同的子模块之间切换,但仍然得到相同的结果。总结:

$> mkdir myRepo
$> cd myRepo
myRepo$> git init .
myRepo$> git submodule add https://<path/to/my/repo>.git
myRepo$> vim .gitmodules 
# change submodule url to https://<path/to/another/repo>.git
myRepo$> git submodule sync # updates my .git/config file with the new submodule url, but all my files in the submodule are still from the old url
myRepo$> git submodule sync --recursive # doesn't do anything
myRepo$> git submodule update --init --recursive # doesn't do anything either
myRepo$> rm -rf .git/modules/<mySubmodule> # tip from SO comment linked above
myRepo$> git submodule sync
fatal: Not a git repository: ../.git/modules/<mySubmodule>

仅仅执行 git submodule update --init --recursive 是不行的(在执行了 git submodule sync --recursive 之后)? - VonC
不行——我仍然看到原始子模块。 - acannon828
请参见 https://dev59.com/u3A75IYBdhLWcg3wW3u8 - That Brazilian Guy
1个回答

9

看起来确实很烦人。虽然不是理想的解决方案,但下面的方法对我有效:

git submodule foreach git pull --rebase

好的,成功了!虽然不是最理想的解决方案,但我会接受它。在我接受之前,你能否详细解释一下你的答案?另外,你能否复制我的问题吗? - acannon828
1
我在Git 2.1.1中看到了相同的行为。我真的不确定这是否是“预期”的结果还是一个错误。子模块一直有点棘手。至于为什么它能工作 - 它会导致git进入子模块并执行fetch操作(在我的情况下,这意味着再次强制分支 - 再次不确定原因)。 - Andrew C
@IgorGanapolsky- 你可能想要开一个新问题,并提供更多细节。谢谢。 - Andrew C

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