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

如何用一个不同的git仓库替换一个仓库子模块?

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

  • 位于./ExternalFrameworks/TestFramework ,指向一个git repo 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)已更改,则可以简单地:

  • 修改.gitmodule文件以使用新的URL
  • 运行git submodule sync
  • 更完整的信息可以在其他地方找到:

  • 更改git子模块的远程存储库
  • 如何更改git子模块URL

  • 首先,用这里已经提到的方法删除当前的子模块,为了方便,我将其包括在内:

  • .gitmodules文件中删除相关部分
  • .git/config删除相关部分
  • 运行git rm --cached path_to_submodule (没有结尾斜杠)
  • 提交并删除现在未跟踪的子模块文件
  • 现在,添加带有--name标志的新子模块。 这会让git在子模块的.git/config引用一个替代名称,以便与历史上存在的子模块冲突,您仍然希望在之前的历史记录中使用该子模块。

    所以输入:

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

    你会得到你想要的路径加载的子模块。


    这些命令将在不改变本地存储库上的任何文件的情况下执行命令提示符下的工作。

    git config --file=.gitmodules submodule.Submod.url https://github.com/username/ABC.git
    git config --file=.gitmodules submodule.Submod.branch Dev
    git submodule sync
    git submodule update --init --recursive --remote
    
    链接地址: http://www.djcxy.com/p/2695.html

    上一篇: How do I replace a git submodule with another repo?

    下一篇: rf equivalent for Windows?