Git的推送解压错误格里特(git unpack error on push to gerrit)

2019-09-03 16:59发布

在一个新的分支,我们会遇到以下错误格里特服务器的推送:

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'

我们试图提到的树对象都没有成功手动复制到远程的git。

在格里特方面,我们得到一个堆栈跟踪:

[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

乡亲们:任何想法做什么?

Answer 1:

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

git push --no-thin omnigerrit HEAD:refs/for/android-4.4


Answer 2:

您是否使用的git> 1.8.4.2?

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

使用此增强功能,如果混帐发现该树SHA1已经存在于服务器,它不会再次发送,但格里特想要搜索与上传的包提交SHA1相关的树SHA1。

它看起来像我不能与格里特2.8 RC3复制它,而不是与SCM经理的最新版本。 我会说这已经jgit得到解决,但无法找到哪个版本呢。



Answer 3:

我的情况

我也遇到这样的问题太多了,这需要很长的时间来解决这个问题。

首先,我注意到在格里特日志一个错误信息:

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

什么是613fd2557fba30aff2dbd51c3807cc57561bab08对象?

然后,我使用git审查-l搜索所有打开的补丁集这个项目中子:

1974  master  Add two interfaces for manipulate forwarding individually

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

613fd2557fba30aff2dbd51c3807cc57561bab08 cannot  found

啊哈,这就是原因!

但是,为什么这个对象缺少什么?

究其原因,我的同事告诉我,中子项目将使用一个新的回购协议,以取代旧的,我删除旧的回购,但没有关闭所有打开的补丁集在格里特。 开放的补丁集将在格里特仪表盘消失,但它仍然在格里特数据库中。

如何解决

登录您的reviewdb SQL和发现这条记录:

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

select * from changes where change_id=1974\G;

然后更新该记录:

update changes set open='N',status='A' where change_id=1974;


Answer 4:

我只是遇到了这个错误也是如此。

对于我的方案,我试图推动的修正案提交,其中没有文件已经自上次一样提交被推改变。 我从字面上刚刚修订了改变的提交信息,并试图再次推动。 没有文件作为提交的一部份改变。

我推与您发布相同的错误消息拒绝。

看来,格里特不喜欢与比经修订外没有其他变化的推提交信息。

我真的做了一个字符更改为文件,添加该文件,修改了再犯,并推动和推动成功。

我使用的git == 1.8.4.2



Answer 5:

我今天有这个问题,尝试了所有的建议。 最后的解决方案是非常简单的:

  1. 切换到另一个分支(如开发)。
  2. 从远程仓库拉
  3. 切换回新的分支和推动。

运气好的话,这将现在的工作。



Answer 6:

今天我遇到过这个问题,我并没有使用Git> 1.8.4.2。 我在格里特2.7。

约5分钟的挫折后,我决定只切换到分支我试图推到的本地版本,我做了一个拉。 在那之后,我推又开始工作,但我不明白为什么。



Answer 7:

我刚刚来到这个问题刚才和我的情况是:有的一个git的init和推动一个全新的分支(也就是说,该分支是在格里特起源git的任何修改没有关系)在格里特一个Git项目。 我尝试了很多方法,但失败。 最后,我感到@obuseme的回答启发,按照此固定:

git remote add gerrit GERRIT_GIT_PROJECT_URL
git fetch gerrit
And then upload again.


Answer 8:

我工作围绕这一问题通过重新克隆库,并从旧的复制过我的变化。

其他的解决方案并没有为我工作,但我没有尝试obrienks。

我试着使用Git 2.6.1以及与JGit 4.6.1,我用格里特2.13.1。



文章来源: git unpack error on push to gerrit