上下文: 我有一个包含嵌套子模块的存储库。
/superProject
├── moduleA
│ └── moduleB
我需要将两个子模块的远程 URL 更新为两个原始存储库的分叉版本。我已经在 moduleA 中进行了相关更改以引用 moduleB 的新远程 URL,并在超级项目中进行了更新以引用 moduleA 的新 URL 和新提交。
现在我的问题是: 假设其他开发人员之一在子模块更新之前进行了较旧的提交。
现在如果他们拉最新的,他们会收到错误并且他们的分支没有更新:
fatal: remote error: upload-pack: not our ref $hash
Git 无法在不知道 moduleA 需要从新远程更新的情况下更新 moduleA 的提交。目前还做不到。让开发者干净利落地更新的正确做法是什么?
我尝试过使用以下组合:
git submodule deinit --all -f
git submodule sync --recursive
git submodule update --init --recursive
但我似乎无法找到一种方法来执行此更新而不删除模块文件夹,然后运行:
git pull
git submodule sync --recursive
git submodule update --init --recursive
有什么办法可以彻底解决这个问题吗?理想情况下,可以将其放入某种类型的配方甚至 git 别名中?
我发现在这种情况下有效的唯一方法是:
git submodule update --init --recursive
仍然对替代方案持开放态度,因为如果这种情况再次发生,这不是一个很好的解决方案。