Git review :error: unpack failed: error Missing tree

文章详细记录了解决Git在提交至Gerrit时遇到thinpush问题的过程,包括发现原因、尝试多种解决方案直至找到有效方法。重点在于通过执行`git push --no-thin gerrit HEAD:refs/publish/master`命令成功解决问题,强调了关闭默认开启的thinpush功能的重要性。

环境

git version 1.9.1
Gerrit Code Review (2.11.3) 

现象

修改后调用 git review可以提交到Gerrit上,然后只要一用 git commit --amend修改 Commit Message再提交,就会出现此错误;而如果不修改Commit Message,而只是修改增加文件,那么可以用 --amend提交再 git review

error: unpack failed: error Missing tree 8d89499daadf6417347218b630b5cae57e7fa27c
fatal: Unpack error, check server log
To ssh://user1@review.zjc.com:29418/test-project1.git
 ! [remote rejected] HEAD -> refs/publish/master (n/a (unpacker error))
error: failed to push some refs to 'ssh://user1@review.zjc.com:29418/test-project1.git'

解决方案

经过多方查资料,是提交时的 thin push 的问题,默认是开着的,要把它关掉

有人说

  • 在工程的 .gitreview 下的 Gerrit节点下增加 disablethinpush=true
  • /etc/git-review/git-review.conf 中添加 disablethinpush=true
  • git push --no-thin ...来解决,因为这是一个BUG
  • 涉及到库更改时候有未关闭的的patch,更新gerrit的数据库

好吧,我承认在Git使用上我是菜鸟,我只是用 git review来提交而已。捣鼓了半天上面的N种列出来没列出来的解决方案,都失败

好吧,说出来我碰巧得到的一个这种方案

执行命令git review --no-thin :失败
无意间看到 git review -h 有个命令行参数 -n
执行命令git review -n :

Please use the following command to send your commits to review: 
git push gerrit HEAD:refs/publish/master

执行 git push gerrit HEAD:refs/publish/master : 还是那个错误

执行 git push --no-thin gerrit HEAD:refs/publish/master

成功了!!!!

好吧,我笨 && 牛人的世界我不懂

结论

加一个结论吧,啰嗦一大堆,其实就2句话是关键
执行 git review,如果出现错误就执行 git push --no-thin gerrit HEAD:refs/publish/master

参考

https://libraries.io/github/savoirfairelinux/git-review
https://bugs.launchpad.net/git-review/+bug/1332549
http://www.cnblogs.com/qingliuyu/p/4510233.html

虽然给定引用中没有直接针对 'error: remote unpack failed: error Missing tree 3161824528e8378b28853c5f776d6e2d5580293e' 错误的解决方法,但可以参考通用的处理 `error Missing tree` 问题的思路。 `error: remote unpack failed: error Missing tree` 错误通常意味着远程仓库在解包对象时找不到指定的树对象,可能是由于本地仓库对象损坏、远程仓库对象缺失或者网络传输问题等原因导致。以下是一些可能的解决方法: #### 1. 清理本地仓库 清理本地仓库中可能损坏的对象,然后重新提交和推送。 ```bash git gc git prune ``` `git gc` 命令用于清理本地仓库中不必要的文件和优化仓库,`git prune` 命令用于删除那些没有被引用的对象。之后再尝试推送: ```bash git push --receive-pack='git receive-pack --reviewer xxx@xxx.cn --reviewer xx@xx.cn' review HEAD:refs/for/master ``` #### 2. 重新克隆仓库 如果本地仓库损坏严重,重新克隆仓库可能是一个有效的解决方法。 ```bash git clone ssh://xx@121.xx.xx.xx:29418/xxxx_v_2_3.git new_repo cd new_repo git push --receive-pack='git receive-pack --reviewer xxx@xxx.cn --reviewer xx@xx.cn' review HEAD:refs/for/master ``` #### 3. 检查远程仓库 联系仓库管理员,检查远程仓库是否存在对象缺失的问题,或者尝试在另一个网络环境下进行操作,排除网络传输问题。 #### 4. 强制更新引用 在某些情况下,可以尝试强制更新引用,但这可能会覆盖远程仓库的一些提交,需要谨慎操作。 ```bash git push --force --receive-pack='git receive-pack --reviewer xxx@xxx.cn --reviewer xx@xx.cn' review HEAD:refs/for/master ```
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值