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.
有人能解释一下如何解决这个错误吗?我已经看了一些其他类似的问题,但我找不到任何有助于解决为什么这个推送被拒绝的问题-我大约在半小时前更新了分支,想推送一个我忘记包含在初始推送中的新文件。我试过更新dev然后切换回功能分支。我正在处理一些评论建议git尝试更新其他本地分支和远程分支之间的差异,但这没有做任何事情-我得到了和以前完全相同的错误消息。
1条答案
按热度按时间e3bfsja21#
这个
unable to migrate objects to permanent storage
通常是服务器上的配置错误的结果。无论如何,很可能你在你的终端上做的任何事情都不会改善结果。当服务器接收到一个
git push
时,接收端Git会从发送端获得一系列Git对象--commit、tree、blob和/或tag,所有这些都构成了执行git push
的人发送的内容。然后发送端发送一个请求:* 我希望你,接收者,用一些特定的分支和/或标签名称来命名这些对象,以便它们变得可访问。在2.11.0之前的Git版本中,objects 会立即进入接收方的对象数据库。然后接收方会检查建议的名称创建或更新(例如,
feature/xxx
应该指向对象1234567...
),验证它是否正常,然后要么进行更新并回复 OK,done,要么用特定的错误拒绝更新,例如“not fast forward”。在Git版本2.11.0中,流程发生了变化:传入的对象被放置在“隔离区”中,直到接受名称更新。一旦接收方验证更新
feature/xxx
是OK的,接收方必须将对象从隔离区 * 移动 * 到对象数据库中。一旦移动成功并完成更新,您将从服务器获得 OK,done 回复。从仓库中的隔离区到仓库对象数据库的移动失败了。换句话说,你的推送请求没有任何问题。相反,服务器说:* 我会照你说的做,但我跌倒了,无法自救 *
要解决这个问题,控制服务器的人应该登录到机器并检查存储库区域,特别注意文件和目录的所有权和权限、磁盘配额以及可能影响此对象迁移过程的任何其他内容。