Git 当 repo 中的子模块切换到具有其他树结构的不同 repo 时出错
Git errors out when a submodule in the repo is switched to a different repo with other tree structure
我有一个使用子模块 A 的 git 存储库,出于技术原因,我需要将子模块切换到子模块 B,这是一个具有不同提交的不同存储库,它们只共享几个从项目一开始就提交,这对我来说没问题。
到目前为止我所做的是:
- 修改
.gitmodules
文件以使用新的URL
- 删除repo中的子模块文件夹
rm -rf .git/modules/<submodule>
- 删除工作目录下的子模块文件夹
rm -rf <submodule>
- 运行
git submodule sync
- 运行
git submodule update
之后我得到一个错误:
fatal: remote error: upload-pack: not our ref a5129baec669f7736552019baccd3da7e5129cfd
Fetched in submodule path 'Submodule/path', but it did not contain a5129baec669f7736552019baccd3da7e5129cfd. Direct fetching of that commit failed.
因此带有 SHA a5129b
的提交作为最近的提交存在于子模块 A 中,但不在子模块 B 中。
我不明白为什么要从上一个子模块中获取提交,我是不是遗漏了什么?
我设法重现了这个问题并用这些命令修复了它:
git submodule set-url <submodule> <old url>
git submodule update
git submodule set-url <submodule> <new url>
git submodule update
git -C <submodule> fetch
git -C <submodule> reset --hard origin/HEAD
警告: 这将清除 submodule
!
中任何未提交的更改
我有一个使用子模块 A 的 git 存储库,出于技术原因,我需要将子模块切换到子模块 B,这是一个具有不同提交的不同存储库,它们只共享几个从项目一开始就提交,这对我来说没问题。
到目前为止我所做的是:
- 修改
.gitmodules
文件以使用新的URL - 删除repo中的子模块文件夹
rm -rf .git/modules/<submodule>
- 删除工作目录下的子模块文件夹
rm -rf <submodule>
- 运行
git submodule sync
- 运行
git submodule update
之后我得到一个错误:
fatal: remote error: upload-pack: not our ref a5129baec669f7736552019baccd3da7e5129cfd
Fetched in submodule path 'Submodule/path', but it did not contain a5129baec669f7736552019baccd3da7e5129cfd. Direct fetching of that commit failed.
因此带有 SHA a5129b
的提交作为最近的提交存在于子模块 A 中,但不在子模块 B 中。
我不明白为什么要从上一个子模块中获取提交,我是不是遗漏了什么?
我设法重现了这个问题并用这些命令修复了它:
git submodule set-url <submodule> <old url>
git submodule update
git submodule set-url <submodule> <new url>
git submodule update
git -C <submodule> fetch
git -C <submodule> reset --hard origin/HEAD
警告: 这将清除 submodule
!