git 出现 error Missing tree 的处理办法
问题:
公司搭建了 gerrit 代码审核服务器.有较低的概率(目前团队中出现过两例),在 git push 提交时,出现如下错误:
git push --receive-pack='git receive-pack --reviewer xxx@xxx.cn --reviewer xx@xx.cn' review HEAD:refs/for/master
Counting objects: 1, done.
Writing objects: 100% (1/1), 241 bytes | 0 bytes/s, done.
Total 1 (delta 0), reused 0 (delta 0)
error: unpack failed: error Missing tree 129d587458f56f4b1f9c492824a97dc717257516
fatal: Unpack error, check server log
To ssh://xx@121.xx.xx.xx:29418/xxxx_v_2_3.git
! [remote rejected] HEAD -> refs/for/master (n/a (unpacker error))
error: failed to push some refs to 'ssh://xx@121.xx.xx.xx:29418/xxxx_v_2_3.git'
再次提交也还是会出现同样错误.
解决:
解决方法来自 stackoverflow.
使用如下命令即可推送成功:
git push --no-thin review HEAD:refs/for/master
关键点是 --no-thin
选项. stackoverflow 上的那位答主这么解释的:
默认情况下 git push 会在向服务器推送时进行优化,以将所发送的包降低到最小. 做法是发送时忽略本地仓库和远端仓库中共有的部分. 即 git push 默认是采用 --thin 选项的.
发生本文中出现的问题,貌似是因为某个 git 对象和服务器不一致了.
这时加上 --no-thin 参数,把该传的都传过去,问题就解决了.