无法签出分支,因为子模块的提交不再位于其远程

问题描述 投票:0回答:1

这与子模块提交的分支不再可用类似,但由于其解决方案不适用的性质而显着不同。

我刚刚克隆了一个存储库,它有子模块,我也完成了子模块更新/初始化。

git clone ... foo && cd foo && git submodule update --init

我在

master
,我想结帐 我想结帐分行
bar
。当我尝试时,它失败了;我从错误和检查存储库中确定 git 无法正确检出子模块,因为子模块指向的提交不再位于该存储库中。

为了完整性,错误是:

致命:无法解压树对象
错误:无法更新子模块“x”。 错误:无法更新子模块: x

正在中止

我在这里明白了,git 无法做到这一点,因为无法找到子模块的提交哈希,并且 git 不想将工作存储库置于“混乱状态”,但这似乎让我没有本地修复的方法。

我该怎么做才能更新当前存储库中的子模块以指向有效的提交?

我们暂时假设

  • 我无权访问已经在其历史记录中签出该提交的子模块存储库或该子模块处于适当状态的当前存储库的框。
  • 我不想进入github来解决这个问题,因为我想要一个纯粹的解决方案
    git
git git-submodules git-checkout
1个回答
0
投票

通过阅读更多文档,听起来我最好的选择是取消初始化遥控器,签出,然后重新添加它。

git submodule deinit x
git checkout <BRANCH>
git rm x
git submodule add <URL for x> x
git add .gitmodules
git add x
git commit -m'resetting submodule x'

然后最终推动它。

但我希望可能有一个更好的答案,因为 deinit、rm 并重新克隆它似乎有点愚蠢。

© www.soinside.com 2019 - 2024. All rights reserved.