为 git 历史中的所有提交更改 git 子模块的远程存储库
Changing the remote repository of git submodule for all commits in git history
如何在不破坏提交历史的情况下更改 git 子模块的远程 url?
目前,如果我检查旧的提交,我的子模块似乎有旧的远程 url 不再存在。
我的工作流程:
- 使用提交 A、B 克隆 repo
- git 子模块更新 --init
- 更改子模块url
将 .git 模块推送到远程(提交 C)
使用提交 A、B、C 克隆 repo
- S 提交 A
- git 子模块更新 --init -> 失败
-> 还想要新的子模块远程 URL,但仍然是 .gitmodules
中的旧 url
似乎 git submodule update --init
仍在尝试使用旧遥控器 url
如果也尝试使用 git submodule update
,按照建议,但我也得到了错误:
The Git repository with name or identifier OLD_REPO_NAME does not exist or you do not have permissions for the operation you are attempting.
提交与远程无关。更改遥控器后,更改将对所有新旧提交生效。
要更改子模块的 URL,您需要:
- 更改超级项目根目录中文件
.gitmodules
中的URL;
- 运行
git submodule sync
将更改复制到 .git/config
cd
进入子模块,运行git remote set-url
改变子模块中的URL。
当您在超级项目中检出旧提交时,您会变老 .gitmodules
但这没关系 — git
不使用 .gitmodules
中的 URLs — 它使用 .git/config
中的 URLs。 git sync
将 URL 从 .gitmodules
复制到 .git/config
。因此,在检查旧的 .gitmodules
旧提交后,不要 运行 git sync
并且 git
将继续使用 .git/config
中的新 URLs。
让我们尝试另一种方法。不要替换配置文件中的 URL,而是即时替换 URL:
git config --global url.<NEW-URL>.insteadOf <OLD-URL>
参见 git help config
关于 url.<base>.insteadOf
。
如何在不破坏提交历史的情况下更改 git 子模块的远程 url? 目前,如果我检查旧的提交,我的子模块似乎有旧的远程 url 不再存在。
我的工作流程:
- 使用提交 A、B 克隆 repo
- git 子模块更新 --init
- 更改子模块url
将 .git 模块推送到远程(提交 C)
使用提交 A、B、C 克隆 repo
- S 提交 A
- git 子模块更新 --init -> 失败
-> 还想要新的子模块远程 URL,但仍然是 .gitmodules
中的旧 url似乎 git submodule update --init
仍在尝试使用旧遥控器 url
如果也尝试使用 git submodule update
,按照建议,但我也得到了错误:
The Git repository with name or identifier OLD_REPO_NAME does not exist or you do not have permissions for the operation you are attempting.
提交与远程无关。更改遥控器后,更改将对所有新旧提交生效。
要更改子模块的 URL,您需要:
- 更改超级项目根目录中文件
.gitmodules
中的URL; - 运行
git submodule sync
将更改复制到.git/config
cd
进入子模块,运行git remote set-url
改变子模块中的URL。
当您在超级项目中检出旧提交时,您会变老 .gitmodules
但这没关系 — git
不使用 .gitmodules
中的 URLs — 它使用 .git/config
中的 URLs。 git sync
将 URL 从 .gitmodules
复制到 .git/config
。因此,在检查旧的 .gitmodules
旧提交后,不要 运行 git sync
并且 git
将继续使用 .git/config
中的新 URLs。
让我们尝试另一种方法。不要替换配置文件中的 URL,而是即时替换 URL:
git config --global url.<NEW-URL>.insteadOf <OLD-URL>
参见 git help config
关于 url.<base>.insteadOf
。