git submodule sync命令 - 它的作用是什么?

42
我不理解从文档中看到的git submodule sync是什么意思。请解释一下。
1个回答

56

Git将子模块的信息存储在两个位置。第一个位置是在名为.gitmodules的文件中,该文件被检入到Git仓库中。该文件的更改会传播到其他仓库。

另一个位置是在.git/config中,大多数命令执行时Git实际上会查找这个位置。

假设你已经在项目上工作了一段时间,有一个名为foo的子模块。该子模块的文件从某个url检出,无论它在哪里都不重要。然而,在某个时刻,该url发生了变化。也许它发生了变化,以便从不同的服务器或不同的路径检出该子模块。当你更新你的仓库时,你的.gitmodules文件将被更新,但是你的.git/config文件不会被更新;你仍然从旧的url检出。当你想从新的url开始检出时,你需要运行git submodule sync命令,将.gitmodules中的新配置复制到.git/config中。Git不会自动执行此操作,因为你可能对自己的配置进行了修改,它不想覆盖它们。


我在想,如果我需要手动更改.gitmodules中的链接,为什么不在.git/config中也手动更改相同的内容呢?或者有没有一种命令可以在两个地方同时更改? - Narek
据我所知,除了git submodule add之外,没有任何命令可以同时更改两者,该命令可用于添加新的子模块,但无法更改现有的子模块。 - db48x
我觉得很奇怪,在一个地方需要手动更改,而在另一个地方却可以通过命令更改,你觉得呢? - Narek
3
我不确定是否有人认为子模块命令很美观。 - db48x
不错的回答 :) - Narek
显示剩余4条评论

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