为什么GIT无法为给定的提交以及如何修复特定的有效supodule



i有一个git回购,其另一个作为submodule依赖关系。在我的项目的根( .git.gitsubmodules等)中,我叫

git submodule update

这失败了以下消息:

在子模块路径" SRC/Framework"中提取,但不包含CC8C38E9D853491C672452D8DBCED466666FC73EC8。该提交的直接获取失败。

src/framework是我项目(PROJECT_ROOT/src/framework)的子目录,应该是第三方回购陆地的位置。给定的提交哈希是有效的,就像我可以用来通过Web界面访问该提交。

我也尝试过git clone --recursive <my-repo>,但也失败了。

我的.gitmodules的内容是

[submodule "src/framework"]
        path = src/framework
        url = git@gitlab-blah-internal.de:gh/framework.git

除此之外,我还必须注意以下重要事实:由于framework回购中的最新更新,我的代码中断了我的代码断裂,因此我确实需要检索它工作正常的特定版本。

在克隆(和接收错误)后运行此命令解决了我的问题:

git submodule update --force --recursive --init --remote

当然,这不是一个好的解决方案。最好找到并解决潜在的问题,但是如果有人急忙,这对我有用。

是的,我可以按照网络浏览器(使用gitlab)中的链接进行

您可以克隆该回购,其中包括该提交吗?
GitLab具有限制访问权限的权限级别,因此请确保您的git克隆命令与正确的用户执行,并在上述user home directory/.ssh中使用SSH键执行。

如果您自己无法克隆子模块存储库(在本地硬盘上的任何位置),那将解释错误消息。

这个问题来自一个在与我合作的存储库中链接为子模块之前的提交之前,已经重置了头脑。这使参考无效。我不知道如何解决此问题

您可以确保子模块遵循分支(例如,master):

cd /path/to/parent/repo
git config -f .gitmodules submodule.bar1.branch master

然后在最后获取的提交master

上更新子模块
git submodule update --remote

--remote选项可确保它将使用SuperProject的SHA-1更新子模块,但将使用SuperProject的SHA-1更新,但将使用Subpodule的远程跟踪分支的状态。

将避免"did not contain cc8c38e9d853491c672452d8dbced4666fc73ec8错误消息。


drlolly在评论中添加:

--remote开关是我的关键。
这对我有用:

git submodule  update --init --recursive --remote

我的情况是子模块的URL已更改,并且与父仓库进行了同步。我们注意到我们可以克隆父母,孩子会不会失败,但是存储库的这个特定实例失败了。

修复了它:

  1. 检查URL是否是.gitmodules文件中的正确的URL
  2. 致电git submodule sync
  3. 调用git -C path/to/submodule fetch(如果已经初始化了子模块)
  4. 呼叫git submodule update --init [--recursive] path/to/submodule(如果子模块已降低)

我不知道确切的问题是什么,但下面对我有用:(第四步是我认为的关键)

  1. git suppodule更新 - init -recursive
  2. git拉动 - rebase - recurse-submodules
  3. git suppodule Update -force -recursive - init -remote
  4. git subpodule同步
  5. git suppodule更新 - init -recursive

对我的问题是,子模块指向托管在github上的个人(a)个人(克隆的克隆)。

我有多个主机存储库,其中包含对同一子模块的引用。我已经在其中一个存储库中更改了子模块的头,并提交了存储库。不幸的是,我忽略了将新的子模块推到GitHub,因此,即使在git submodule update等之后,存储库的其他实例也没有最新的头部记录。

自2022年2月以来,我开始在(github托管的)仓库中间歇性地体验了这一点。可能是由于在同一本地GIT存储库中在多个工作室工作。我从不配置或编辑子模型,URL或凭据。submodule sync/--init解决方案都没有帮助。

最终我发现这总是修复子模块x:

  1. 删除结帐目录X本身(假设您没有任何更改!)。

  2. 修复相应的管道目录,即

    • .git/模块/X (通常)或
    • .git/worktrees/ worktree-name /模块/x (如果您在创建的其他工作室中):

    通过完全删除它(下一步将再次下载大部分),或者仅通过删除:

    • refs/远程/原点(或仅此目录中的文件)
  3. git submodule update X

    还原所有内容

我最终只是去:

  1. 进入子模型repo
  2. git pull最新
  3. 进入顶部回购根目录
  4. git commmit -m "updated submodule"因此使主要存储库知道。
  5. git push

之后,我的问题都消失了。这也解决了我的Netlify问题。

在我的情况下,子模型的git配置已更新为SSH。我将父级项目的git配置及其子模型更新为http。

除此之外,我还使用Window的Web凭据更新了GIT凭据,您可以在Windows设置中搜索。

管理Windows中的Web凭据

当我遇到此错误时,它是由指向仅在本地存在的提交的子模块引用引起的。<<<<<<<<<<<<<<<</p>

命令解决了问题

  • git subpodule同步

最新更新