如何用另一个回购替换git子模块?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (56)

如何用不同的gitrepo替换git子模块?

具体来说,我有一个子模块:

  • 位于./ExternalFrameworks/TestFramework指的是一个git回购git@github.com:userA/TestFramework.git
  • 我希望它现在指向git@github.com:userB/TestFramework.git

问题是当我用描述的方法删除子模块时,然后使用命令重新添加它。

git submodule add git@github.com:userB/TestFramework.git

我知道这个错误:

A git directory for 'ExternalFrameworks/TestFramework' is found locally with remote(s):
  origin    git@github.com:userA/TestFramework.git
If you want to reuse this local git directory instead of cloning again from
  git@github.com:userB/TestFramework.git
use the '--force' option. If the local git directory is not the correct repo
or you are unsure what this means choose another name with the '--name' option.
提问于
用户回答回答于

如果子模块的位置(URL)发生了变化,那么可以简单地:

  1. 修改你的.gitmodule文件以使用新的URL
  2. git submodule sync
用户回答回答于

首先,使用前面提到的方法删除当前子模块。

  • .gitmodules档案
  • .git/config
  • git rm --cached path_to_submodule(无尾随斜杠)
  • 提交并删除现在未跟踪的子模块文件

现在,使用--name旗子。这将为git提供一个可供参考的备选名称。.git/config对于子模块,要与历史上存在的子模块解除冲突,你仍然希望在以前的历史记录中使用该子模块。

所以类型:

git submodule add --name UpdatedTestFramework git@github.com:userB/TestFramework.git

然后在你所期望的路径上加载子模块。

扫码关注云+社区