git解压缩错误推送到gerrit

edl*_*erd 58 git push unpack gerrit

在将新分支推送到gerrit服务器时,我们遇到以下错误:

de@roma:~/git-hate/www$ git push origin landingpage
Counting objects: 149, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (73/73), done.
Writing objects: 100% (111/111), 2.77 MiB, done.
Total 111 (delta 68), reused 80 (delta 38)
remote: Resolving deltas: 100% (68/68)
error: unpack failed: error Missing tree 30c4809ade0b4b0c81cb7f882450774862b82361
fatal: Unpack error, check server log
To ssh://user@git-server/repository
 ! [remote rejected] landingpage -> landingpage (n/a (unpacker error))
error: failed to push some refs to 'ssh://user@git-server/repository'
Run Code Online (Sandbox Code Playgroud)

我们尝试将提到的树对象手动复制到远程git,但没有成功.

在gerrit方面,我们得到一个堆栈跟踪:

[2013-05-16 13:43:42,753] ERROR com.google.gerrit.sshd.BaseCommand : Internal server error (user de account 1000000) during git-receive-pack '/repository'
com.google.gerrit.sshd.BaseCommand$Failure: fatal: Unpack error, check server log
        at com.google.gerrit.sshd.commands.Receive.runImpl(Receive.java:157)
        at com.google.gerrit.sshd.AbstractGitCommand.service(AbstractGitCommand.java:106)
        at com.google.gerrit.sshd.AbstractGitCommand.access$000(AbstractGitCommand.java:34)
        at com.google.gerrit.sshd.AbstractGitCommand$1.run(AbstractGitCommand.java:72)
        at com.google.gerrit.sshd.BaseCommand$TaskThunk.run(BaseCommand.java:430)
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:471)
        at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:334)
        at java.util.concurrent.FutureTask.run(FutureTask.java:166)
        at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$101(ScheduledThreadPoolExecutor.java:165)
        at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:266)
        at com.google.gerrit.server.git.WorkQueue$Task.run(WorkQueue.java:337)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
        at java.lang.Thread.run(Thread.java:636)
Caused by: java.io.IOException: Unpack error on project "repository":
  AdvertiseRefsHook: org.eclipse.jgit.transport.AdvertiseRefsHookChain@7047125class org.eclipse.jgit.transport.AdvertiseRefsHookChain

        at com.google.gerrit.sshd.commands.Receive.runImpl(Receive.java:156)
        ... 13 more
Caused by: org.eclipse.jgit.errors.UnpackException: Exception while parsing pack stream
        at org.eclipse.jgit.transport.ReceivePack.service(ReceivePack.java:202)
        at org.eclipse.jgit.transport.ReceivePack.receive(ReceivePack.java:142)
        at com.google.gerrit.sshd.commands.Receive.runImpl(Receive.java:98)
        ... 13 more
Caused by: org.eclipse.jgit.errors.MissingObjectException: Missing tree 30c4809ade0b4b0c81cb7f882450774862b82361
        at org.eclipse.jgit.transport.BaseReceivePack.checkConnectivity(BaseReceivePack.java:996)
        at org.eclipse.jgit.transport.BaseReceivePack.receivePackAndCheckConnectivity(BaseReceivePack.java:756)
        at org.eclipse.jgit.transport.ReceivePack.service(ReceivePack.java:167)
        ... 15 more
Run Code Online (Sandbox Code Playgroud)

伙计们:任何想法该怎么办?

Tas*_*dar 99

与推进--no-thin论证工作对我来说是解决方法:

git push --no-thin omnigerrit HEAD:refs/for/android-4.4
Run Code Online (Sandbox Code Playgroud)

  • 好吧,一个新的优化导致git在网络上发送尽可能少的数据导致这个bug出现,所以我的猜测是--no-thin只是关闭这些优化.来自git push --help:"当发送方和接收方共享许多相同的对象时,精简传输会显着减少发送数据的数量." ( - 是默认值). (11认同)
  • 这是有效的原因是因为空的更改(即:只有一个更改日志chage)不传输任何数据,并且一些服务器正在花费一些数据.所以他们回答"解包错误". (4认同)

tar*_*dyp 13

你使用的是git> 1.8.4.2吗?

我发现git 1.8.4.3+和gerrit 2.6之间不兼容,因为 https://github.com/git/git/commit/fbd4a7036dfa71ec89e7c441cef1ac9aaa59a315

通过此增强功能,如果git发现树sha1已经存在于服务器中,它将不再发送它,但是gerrit想要搜索与上传包中的提交sha1相关联的树sha1.

看起来我无法使用gerrit 2.8-rc3重现它,而不是最新版本的scm-manager.我会说这已经在jgit中解决了,但还找不到哪个版本.

  • 相应的Gerrit问题报告是[这里](https://code.google.com/p/gerrit/issues/detail?id=1582)和[here](https://code.google.com/p/格里特/问题/细节?ID = 2296). (4认同)
  • 当我尝试将新的补丁集推送到现有评论时,我发生了这种情况,其中唯一的更改是在提交消息中.对其中一个文件进行一些小改动,并推动这项工作是成功的 (3认同)

New*_*one 10

我的情况

我也遇到了这个问题,这需要很长时间来解决这个问题.

首先,我注意到gerrit日志中的一个错误信息:

Internal server error (user newptone account 1) during git-receive-pack                           '/neutron.git' 
com.google.gerrit.sshd.BaseCommand$Failure: fatal: Unpack error,   check server log
......
... Missing unknown 613fd2557fba30aff2dbd51c3807cc57561bab08
Run Code Online (Sandbox Code Playgroud)

什么是613fd2557fba30aff2dbd51c3807cc57561bab08对象?

然后我用git review -l来搜索这个项目neutron的所有打开的补丁集:

1974  master  Add two interfaces for manipulate forwarding individually
Run Code Online (Sandbox Code Playgroud)

然后我通过搜索在gerrit仪表板中找到这个补丁集,我点击链接,似乎错误:

613fd2557fba30aff2dbd51c3807cc57561bab08 cannot  found
Run Code Online (Sandbox Code Playgroud)

啊哈,这就是原因!

但为什么这个对象丢失了?

原因是我的同事告诉我中子项目将使用新的repo来替换旧的,我删除旧的repo但没有关闭所有打开的补丁集中的gerrit.打开的补丁集将在gerrit仪表板中消失,但它仍然存在于gerrit数据库中.

如何解决它

登录您的reviewdb sql并找到此记录:

首先,确保这是我们要修改的那个:

select * from changes where change_id=1974\G;
Run Code Online (Sandbox Code Playgroud)

然后更新此记录:

update changes set open='N',status='A' where change_id=1974;
Run Code Online (Sandbox Code Playgroud)


And*_*sek 7

我刚刚遇到这个错误.

对于我的场景,我试图推送修改后的提交,其中自上次推送相同提交以来没有任何文件发生过更改.我确实修改了改变的提交消息,并试图再次推送.作为提交的一部分的文件没有更改.

我的推送被拒绝,并发布了相同的错误消息.

似乎Gerrit不喜欢推送除了修改后的提交消息之外没有任何更改.

我确实对文件进行了一个字符更改,添加了文件,再次修改了提交,然后推送,并且推送成功.

我正在使用git == 1.8.4.2


obr*_*enk 7

我今天遇到了这个问题并尝试了所有的建议.最后解决方案非常简单:

  1. 切换到另一个分支(例如开发).
  2. 从远程存储库中提取
  3. 切换回新分支并推送.

运气好的话现在就可以了.