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