如何在所有提交中更新子模块URL

max*_*bin 5 git git-submodules

用例是我必须将某些存储库移动到新服务器.所以这些存储库得到了一个新的URL.
引用这些子模块的父项目需要使用子模块的新URL进行更新.
我想做以下事情.

  1. 更新.gitmodules文件
  2. git子模块同步
  3. git子模块更新
  4. 提交和推送

但是,由于先前的提交具有.gitmodule的早期版本,如果我签出父项目的先前提交 - 它不会查找旧服务器吗?


为了确保可重复性,我们需要让所有旧提交都能正常工作.有没有想过绕过这个?

Mar*_*air 10

进入的URL .gitmodules通常仅在初始化子模块时使用git submodule sync.在initialization(git submodule init)中,URL被放入存储库中.git/config,当子模块克隆到位(on git submodule update)时,要使用的URL来自配置.使用URL的唯一另一个时间.gitmodules是运行时git submodule sync,它将类似地更新配置中的URL,但也将origin子模块中的远程设置为相同的URL.

这意味着您在检出早期提交和运行时不会遇到任何问题git submodule update- origin当您在父存储库中签出新提交时,子模块中的远程不会更改.