Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
更改git历史记录中所有提交的git子模块的远程存储库_Git_Git Submodules_Git History - Fatal编程技术网

更改git历史记录中所有提交的git子模块的远程存储库

更改git历史记录中所有提交的git子模块的远程存储库,git,git-submodules,git-history,Git,Git Submodules,Git History,如何在不破坏提交历史记录的情况下更改git子模块的远程url? 当前,如果我签出旧的提交,我的子模块似乎有旧的远程url开关不再存在 我的工作流程: 使用提交A、B克隆repo git子模块更新--init 更改子模块url 将.gitmodules推送到远程(提交C) 使用提交A、B、C克隆repo 切换到提交 git子模块更新--初始化失败 ->还需要新的子模块远程URL,但仍然需要.gitmodules中的旧URL 看来,git子模块更新--init仍在尝试使用旧的远程url 如果您也尝试

如何在不破坏提交历史记录的情况下更改git子模块的远程url? 当前,如果我签出旧的提交,我的子模块似乎有旧的远程url开关不再存在

我的工作流程:

  • 使用提交A、B克隆repo
  • git子模块更新--init
  • 更改子模块url
  • 将.gitmodules推送到远程(提交C)

  • 使用提交A、B、C克隆repo

  • 切换到提交
  • git子模块更新--初始化失败
  • ->还需要新的子模块远程URL,但仍然需要.gitmodules中的旧URL

    看来,
    git子模块更新--init
    仍在尝试使用旧的远程url

    如果您也尝试使用建议的
    git子模块更新
    ,但我也遇到了错误:


    名称或标识符为OLD\u REPO\u name的Git存储库不存在,或者您对正在尝试的操作没有权限。

    提交未绑定到远程。更改远程服务器后,该更改将对所有提交生效,无论是旧提交还是新提交

    要更改子模块的URL,您需要:

    • 更改超级项目根目录下文件
      .gitmodules
      中的URL
    • 运行
      git submodule sync
      将更改复制到
      .git/config
    • cd
      插入子模块,然后运行
      git remote set url
      更改子模块中的url

    当您在超级项目中签出一个旧的提交时,您会得到旧的
    。gitmodules
    ,但这并不重要-
    git
    不使用
    。gitmodules
    -它使用
    .git/config
    中的URL
    git sync
    将URL从
    .gitmodules
    复制到
    .git/config
    。因此,在使用旧的
    签出旧的提交后,.gitmodules
    不运行
    git sync
    ,并且
    git
    将继续使用
    .git/config
    中的新URL,让我们尝试另一种方法。不替换配置文件中的URL,而是动态替换URL:

    git config --global url.<NEW-URL>.insteadOf <OLD-URL>
    
    git config--全局url..而不是
    

    请参阅about
    url..而不是

    这并不能解决我的问题。如果我将repo和swtich克隆到历史记录中的旧提交,.gitmodule文件仍然具有旧的不存在的子模块路径。仅在我更改了.gitmodules后才提交。您的问题到底是什么?问题是缺乏信息。你执行了什么命令?你犯了什么错误?添加了更多信息,希望helps@User_12399我在答案中添加了一段。好的,但是“git子模块更新--init”仍然试图使用旧的远程url和failesok,这是一个手动步骤,git repo的每个用户都知道,但至少是一种工作方法,谢谢