Git:远程拒绝,无法将对象迁移到永久存储

标签 git

git -c diff.mnemonicprefix=false -c core.quotepath=false push -v origin 
feature/xxx:feature/xxx
POST git-receive-pack (3470 bytes)
Pushing to http://xxx@stash/xxx.git
To http://stash/xxx.git
! [remote rejected] feature/xxx -> feature/xxx (unable to migrate objects 
to permanent storage)
error: failed to push some refs to 
'http://xxx@stash/xxx.git'


Completed with errors, see above.

有人可以解释如何解决此错误吗?我已经看过其他一些类似的问题,但我找不到任何有助于解决此推送被拒绝的原因 - 我实际上是在半小时前更新了分支并想推送一个我忘记包含的新文件在最初的 push 下。我尝试更新 dev 然后切换回我正在处理的功能分支,因为一些评论表明 git 尝试更新其他本地分支和远程分支之间的差异,但这没有做任何事情 - 我得到完全相同的错误消息如前。

最佳答案

无法将对象迁移到永久存储 通常是服务器配置错误的结果。在任何情况下,很可能您自己做的任何事情都不会改善结果。

当服务器接收到 git push 时,接收方 Git 从发送方获取一系列 Git 对象——提交、树、blob 和/或标签,所有这些构成执行 git push 的人发送的内容。然后发送者发送一个请求:*我希望你,接收者,用一些特定的分支和/或标签名称​​命名这些对象,以便它们可以访问。*

在 2.11.0 之前的 Git 版本中,对象 会立即进入接收者的对象数据库。然后接收方将检查建议的名称创建或更新(例如,feature/xxx 应指向对象 1234567...),验证它是否正常,然后执行更新并回复OK,完成或拒绝带有特定错误的更新,例如“不快进”。

在 Git 版本 2.11.0 中,流程发生了变化:传入的对象被放置在“隔离区”中,直到名称更新被接受。一旦接收方验证更新 feature/xxx 正常,接收方必须将对象从隔离区移动到对象数据库中。移动成功并完成更新后,您会收到服务器的OK,完成回复。

正是这种从存储库内的隔离区到存储库对象数据库的移动失败了。换句话说,您的推送请求没有问题。相反,服务器会说:我会按照你的要求去做,但我摔倒了,无法修复自己。

要解决此问题,控制服务器的任何人都应登录机器并检查存储库区域,特别注意文件和目录的所有权和权限、磁盘配额以及可能影响此对象迁移过程的任何其他内容。

关于Git:远程拒绝,无法将对象迁移到永久存储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49627374/

相关文章:

git - 如何在 git 存储中 checkout 未跟踪的文件?

windows - 配置 git 以支持使用不同操作系统的程序员

Git 克隆 : remote end hung up unexpectedly, 尝试更改 postBuffer 但仍然失败

git - `git merge` 是否能够将每个更改(w.r. 到一个共同的祖先)显示为 merge 冲突?

git - 推送到github时突然得到 "No supported authentication methods available"

git - 克隆 git 仓库失败

git - 在没有 rebase 的情况下设置提交的父级

git - 通过 git push 模拟 git pull --rebase

git - 有没有办法在 AWS CodeCommit 中获取文件的原始 URL?

git - 以合理的格式查看git diff-tree