用例是我必须将某些存储库移动到新服务器。所以这些存储库得到了一个新的URL 引用这些子模块的父项目需要使用子模块的新URL进行更新 我想要做到以下几点。
- 更新.gitmodules文件
- git submodule sync
- git submodule update
- 提交并推送
醇>
但是,由于之前的提交具有.gitmodule的早期版本,如果我签出父项目的先前提交 - 它是否会查找旧服务器?
为了确保可重复性,我们需要让所有旧提交都能正常工作。
有想法解决这个问题吗?
答案 0 :(得分:10)
.gitmodules
中的网址通常仅在初始化子模块或git submodule sync
时使用。在初始化(git submodule init
)时,URL被放入存储库的.git/config
,当子模块被克隆到位(在git submodule update
上)时,要使用的URL来自配置。唯一一次使用.gitmodules
中的URL的时候是运行git submodule sync
,它同样会更新配置中的URL,但也会将子模块中的origin
远程设置为相同URL。
这意味着在签出早期提交并运行git submodule update
时不会有任何问题 - 当您在父级中签出新提交时,子模块中的远程origin
不会更改库中。
答案 1 :(得分:0)
如果您需要这样做,唯一的方法是使用filter-branch。
但是要小心,因为在所有提交中更改FlowDirection
意味着您转换了提交。
如果您与很多开发人员分享了git repo,那么所有开发人员都需要强行拉动"基于旧提交的新提交和所有工作需要重新到新分支。
有很多关于重写git历史的讨论。