git解压到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' 

我们试图手动将所提到的树对象手动复制到远程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 

伙计们:有什么想法做什么?

--no-thin参数来解决我的问题:

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

你使用的是git> 1.8.4.2吗?

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

通过这个改进,如果git发现树sha1已经存在于服务器中,它不会再发送它,但是gerrit想要search与上传包中提交sha1相关的树sha1。

看起来我不能用gerrit 2.8-rc3来重现它,而不是最新版本的scm-manager。 我会说这已在jgit中解决,但无法find哪个版本呢。

我的情况

我也遇到这个问题,这个问题需要很长时间才能解决。

首先,我注意到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 

什么是613fd2557fba30aff2dbd51c3807cc57561bab08对象?

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

 1974 master Add two interfaces for manipulate forwarding individually 

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

 613fd2557fba30aff2dbd51c3807cc57561bab08 cannot found 

啊哈,这就是原因!

但为什么这个对象失踪?

原因是我的同事告诉我neutron项目会用一个新的repo来取代旧的,我删除了旧的repo但没有closuresgerrit中的所有开放补丁集。 开放的补丁集将在gerrit仪表板中消失,但它仍然存在于gerrit数据库中。

如何解决它

login你的reviewdb sql并find这个logging:

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

 select * from changes where change_id=1974\G; 

然后更新这个logging:

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

我刚刚也遇到了这个错误。

对于我的场景,我试图推送一个修改后的提交,自从上次推送同一个提交以来,没有任何文件发生更改。 我刚刚修改了提交信息,并尝试再次推送。 没有文件作为提交的一部分改变。

我的推送被拒绝,您发布相同的错误消息。

看起来Gerrit并不喜欢除修改后的提交消息之外的任何更改。

我从字面上改变了一个文件,添加了文件,再次修改了提交,然后推送,推送成功。

我使用的是git == 1.8.4.2

我今天有这个问题,并尝试了所有的build议。 最后解决办法很简单:

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

运气好的话现在就可以运作了。

我今天遇到这个问题,我没有使用git> 1.8.4.2。 我在Gerrit 2.7上。

经过大约5分钟的沮丧之后,我决定切换到我试图推向的分支的本地版本,然后我做了一个拉动。 之后,我的推动又开始工作,但我不明白为什么。

我只是刚刚遇到这个问题,我的情况是:有一个git init,并把一个全新的分支(也就是说,这个分​​支与gerrit中的git中的任何修改都没有关系)添加到grit项目中。 我尝试了许多方法,但失败了。 最后,我从@obuseme的答案中得到了启发,按照下面的说法修正:

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

我通过重新克隆存储库来解决这个问题,并从旧的版本复制我的修改。

其他的解决scheme并不适合我,除非我没有尝试obrienks。

我使用git 2.6.1以及JGit 4.6.1,并使用Gerrit 2.13.1。