問題
公司搭建了 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'
再次提交也還是會出現同樣錯誤.
解決:
使用如下命令即可推送成功:
git push --no-thin review HEAD:refs/for/master
關鍵點是 –no-thin 選項:
默認情況下 git push 會在向服務器推送時進行優化,以將所發送的包降低到最小. 做法是發送時忽略本地倉庫和遠端倉庫中共有的部分. 即 git push 默認是採用 –thin 選項的.
發生本文中出現的問題,貌似是因爲某個 git 對象和服務器不一致了.
這時加上 –no-thin 參數,把該傳的都傳過去,問題就解決了.