如何解决git错误:服务器不允许请求未通告的对象3a2ceef391af73994dfeb0d8ef57ed6a52ef4238?

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

我想从 android 分支中提取提交“3a2ceef391af73994dfeb0d8ef57ed6a52ef4238”。我使用命令:

$ git fetch origin 3a2ceef391af73994dfeb0d8ef57ed6a52ef4238

并且显示此错误,

error: Server does not allow request for unadvertised object 3a2ceef391af73994dfeb0d8ef57ed6a52ef4238

如何解决这个问题?

git bitbucket
14个回答
19
投票

git submodule sync
https://github.com/AppImage/AppImageKit/issues/511中所指出的对我有用。


12
投票

根据这个答案给定的来源,看起来BitBucket不允许您获取提交ID,只能获取引用。

我不能说你是否可以配置此行为,但我认为你可以:

  1. 拉树枝:
    git pull origin branchname
  2. 签出本地提交id
    git checkout <commitid>

6
投票

我遇到了同样的错误,但这些都没有解决它。事实证明,我没有从另一台计算机推送子模块更改(当您单击 GitHub 上的子模块文件夹时,这会出现 404 错误)。因此推送子模块,提交父模块并推送它也解决了错误。

其他解决方案是

git submodule update --recursive
this


6
投票

我在使用

git submodule update --init
时遇到同样的错误,使用
git submodule update --force --recursive --init --remote

快速修复它

3
投票

当您指向已通过历史记录重写或压缩删除的子模块提交时,可能会发生这种情况。你能做的最好的事情是:

  • 首先清楚地了解您的团队一直在做什么,这样您就知道它应该是什么样子。
  • 使用 git pull 更新本地,然后找到与您的分支最接近的提交(可能是最新的),然后将其添加到您的父存储库中。例如像这样的东西:
parent-repo$ git fetch
parent-repo$ cd submodule-a
submodule-a$ git pull
submodule-a$ git checkout best-commit-according-to-team-and-your-branch
submodule-a$ cd ../
parent-repo$ git status
...
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
  (commit or discard the untracked or modified content in submodules)
        modified:  submodule-a (modified content)
...
git add submodule-a
git commit -m "updated submodule-a reference"

一旦您感到高兴,它是正确的,并且您的团队同意您可以将其推高,错误就会消失。


3
投票

使用获取选项--no-recurse-submodules

示例:

    git fetch -q origin refs/tags/*:refs/tags/* --no-recurse-submodules
    git fetch --no-recurse-submodules --no-tags origin 
    git fetch --no-recurse-submodules origin $GERRIT_BRANCH 


虽然此示例没有明确说明提交,但在包含子模块的存储库上执行 git fetch 时,我偶尔会看到此错误,其中子模块包含未公布的提交。


错误:
“服务器不允许请求未通告的对象 5665ef0fb603a7d1e5a402763c0f2f049623012a”
可以追溯到git版本。
我第一次看到这个错误是在升级到 git 版本 2.22.0 时。当我将版本回滚到2.20.0时,没有错误。
如果您正在寻找快速解决方案,回滚 git 版本也可以用作临时解决方法。


2
投票

当我跑步时:

git submodule update

git submodule update --init --recursive

我收到错误:

错误:服务器不允许请求未通告的对象 xxxxxxxxx

在子模块路径'xxx'中获取,但它不包含 xxxxxxxxx.直接获取该提交失败。

并且我通过解决了这个问题:

git submodule update --remote

1
投票

我在执行 git pull 时遇到了这样的错误。以下操作帮助我解决了这个问题。

git remote prune origin
git pull

1
投票

我遇到了同样的问题,但尝试了上述一些解决方案但没有成功。 对我有用的是:

git fetch --unshallow && git fetch origin && git reset --hard origin/master

1
投票

事实上,有这么多不同的答案,其中一些有效,而大多数则无效,这确实表明 Git 不稳定,并且对于如此简单的任务来说过于复杂。 我想知道 Git 架构师是否能够毫无尴尬地阅读此内容。

话虽如此,以下内容对我有用:

git clone --recurse-submodules [email protected]:company/mytoprepo.git .

上面确实给出了错误“服务器不允许请求未通告的对象”,但忽略它即可。

然后执行以下操作:

cd submoduleDirectory
git fetch origin
git reset --hard origin/master

最后一条命令终于获取了子模块的所有文件。

如果这对您不起作用,请告诉我。增加 Git 架构师的尴尬可能是件好事。也许他们开始让 Git 实用程序变得更加简单。 (这是当今 IT 领域中不常见的概念:让事情变得更简单...):-)


1
投票

如果您在合并拉取请求时squash提交,也可能会发生这种情况。父级引用的提交 ID 可以在 squash 期间删除。如果需要保留提交 ID,请务必定期合并拉取请求。


1
投票

如果您尝试签出的提交哈希/ID 存储库中不存在,则可能会发生这种情况。例如,如果您在将哈希值粘贴为

git checkout
命令的一部分时不小心进入了错误的文件夹 (git repo)。


0
投票

您可以按照以下步骤解决上述错误。

> git init 
> git pull <reponame> branchname(optional) 
> git reset --hard <commit_id>

注意:确保您已经提交更改并将其从本地推送到远程,因为重置 --hard 会保留本地所有未保存的更改,并且它会完全移动并获取提交的文件和文件夹,这是不可逆的,任何更改都不可逆推。 您也可以看看这些。

https://www.pylabz.com/2019/08/using-python-to-pull-files-of-git-hub.html#更多

https://medium.com/@deepakr6242/using-python-to-extract-files-from-git-hub-repo-through-commits-id-2bdf76b2e0fd


0
投票

就我而言,我忘记了

git push
子模块提交。

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