天天看點

[積累] git 出現 error Missing tree 的處理辦法

問題:

公司搭建了 gerrit 代碼稽核伺服器.有較低的機率(目前團隊中出現過兩例),在 git push 送出時,出現如下錯誤:

git push --receive-pack='git receive-pack --reviewer [email protected] --reviewer [email protected]' 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://[email protected]:29418/xxxx_v_2_3.git
 ! [remote rejected] HEAD -> refs/for/master (n/a (unpacker error))
error: failed to push some refs to 'ssh://[email protected]: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 參數,把該傳的都傳過去,問題就解決了.

stackoverflow 連結如下:

http://stackoverflow.com/questions/16586642/git-unpack-error-on-push-to-gerrit