我想从 android 分支中提取提交“3a2ceef391af73994dfeb0d8ef57ed6a52ef4238”。我使用命令:
$ git fetch origin 3a2ceef391af73994dfeb0d8ef57ed6a52ef4238
并且显示此错误,
error: Server does not allow request for unadvertised object 3a2ceef391af73994dfeb0d8ef57ed6a52ef4238
如何解决这个问题?
git submodule sync
如https://github.com/AppImage/AppImageKit/issues/511中所指出的对我有用。
我遇到了同样的错误,但这些都没有解决它。事实证明,我没有从另一台计算机推送子模块更改(当您单击 GitHub 上的子模块文件夹时,这会出现 404 错误)。因此推送子模块,提交父模块并推送它也解决了错误。
其他解决方案是
git submodule update --recursive
和 this。
我在使用
git submodule update --init
时遇到同样的错误,使用git submodule update --force --recursive --init --remote
快速修复它
当您指向已通过历史记录重写或压缩删除的子模块提交时,可能会发生这种情况。你能做的最好的事情是:
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"
一旦您感到高兴,它是正确的,并且您的团队同意您可以将其推高,错误就会消失。
使用获取选项--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 版本也可以用作临时解决方法。
当我跑步时:
git submodule update
或
git submodule update --init --recursive
我收到错误:
错误:服务器不允许请求未通告的对象 xxxxxxxxx
在子模块路径'xxx'中获取,但它不包含 xxxxxxxxx.直接获取该提交失败。
并且我通过解决了这个问题:
git submodule update --remote
我在执行 git pull 时遇到了这样的错误。以下操作帮助我解决了这个问题。
git remote prune origin
git pull
我遇到了同样的问题,但尝试了上述一些解决方案但没有成功。 对我有用的是:
git fetch --unshallow && git fetch origin && git reset --hard origin/master
事实上,有这么多不同的答案,其中一些有效,而大多数则无效,这确实表明 Git 不稳定,并且对于如此简单的任务来说过于复杂。 我想知道 Git 架构师是否能够毫无尴尬地阅读此内容。
话虽如此,以下内容对我有用:
git clone --recurse-submodules [email protected]:company/mytoprepo.git .
上面确实给出了错误“服务器不允许请求未通告的对象”,但忽略它即可。
然后执行以下操作:
cd submoduleDirectory
git fetch origin
git reset --hard origin/master
最后一条命令终于获取了子模块的所有文件。
如果这对您不起作用,请告诉我。增加 Git 架构师的尴尬可能是件好事。也许他们开始让 Git 实用程序变得更加简单。 (这是当今 IT 领域中不常见的概念:让事情变得更简单...):-)
如果您在合并拉取请求时squash提交,也可能会发生这种情况。父级引用的提交 ID 可以在 squash 期间删除。如果需要保留提交 ID,请务必定期合并拉取请求。
如果您尝试签出的提交哈希/ID 存储库中不存在,则可能会发生这种情况。例如,如果您在将哈希值粘贴为
git checkout
命令的一部分时不小心进入了错误的文件夹 (git repo)。
您可以按照以下步骤解决上述错误。
> 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#更多
就我而言,我忘记了
git push
子模块提交。