git - 如何在所有提交中更新子模块 url

标签 git git-submodules

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

  1. update the .gitmodules file
  2. git submodule sync
  3. git submodule update
  4. commit and push

但是,由于之前的提交有较早版本的 .git 模块,如果我检查父项目的之前提交 - 它不会寻找旧服务器吗?


为了确保可重复性,我们需要让所有旧提交都正常工作。 有解决这个问题的想法吗?

最佳答案

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

这意味着您在 check out 较早的提交和运行 git submodule update 时不会有任何问题 - 当您的子模块中的远程 origin 未更改时您在父存储库中 check out 一个新提交。

关于git - 如何在所有提交中更新子模块 url,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11987037/

相关文章:

svn - 处理重命名 : svn vs. git 与 mercurial

Git pull 不会 pull 下最近的提交

git - 如何只更新特定的 git 子模块?

git - ssh 服务器如何知道哪个公钥与 ssh 私钥相匹配?

bash - 回答多个命令行提示到 GitHub 用户名/密码

macos - SSH key 在 Gitlab 上不断要求输入密码

github - 如何在 Travis CI 中添加 SSH key ?

git - 如何通过父项目中的 .gitattributes 强制子模块中的行结尾为 LF?

带有具有冗余依赖项的子模块的 CMake 项目

git - 如何在不使用分支的情况下在同一基目录中创建两个 Git 存储库?