新しいブランチを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を使用していますか?
https://github.com/git/git/commit/fbd4a7036dfa71ec89e7c441cef1ac9aaa59a315 のため、git 1.8.4.3+とgerrit 2.6の間で非互換性が見つかりました
この機能拡張により、gitはサーバーにツリーsha1が既に存在することを検出した場合、それを再度送信しませんが、gerritはアップロードされたパックのコミットsha1に関連付けられたツリーsha1を検索します。
Scm-managerの最新バージョンではなく、gerrit 2.8-rc3では再現できないようです。私はこれがjgitで解決されたと言いますが、まだどのバージョンを見つけることができません。
私の場合
私もこの問題に遭遇しましたが、この問題を修正するには時間がかかります。
最初に、gerritログに1つのエラー情報があります。
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を使用して、このプロジェクトneutronの開いているすべてのパッチセットを検索します。
1974 master Add two interfaces for manipulate forwarding individually
次に、gerritダッシュボードで検索してこのパッチセットを見つけ、リンクをクリックするとエラーのようです:
613fd2557fba30aff2dbd51c3807cc57561bab08 cannot found
ああ、それが理由です!
しかし、なぜこのオブジェクトが見つからないのですか?
理由は、私の同僚が、neutronプロジェクトは古いリポジトリを置き換えるために新しいリポジトリを使用すると教えてくれたためです。古いリポジトリを削除しましたが、gerritで開いているパッチセットをすべて閉じませんでした。開いているパッチセットはgerritダッシュボードに表示されなくなりますが、gerritデータベースにはまだ存在しています。
修正方法
Reviewdb sqlにログインして、このレコードを見つけます。
まず、これが変更するものであることを確認します。
select * from changes where change_id=1974\G;
次に、このレコードを更新します。
update changes set open='N',status='A' where change_id=1974;
このエラーも発生しました。
私のシナリオでは、同じコミットが最後にプッシュされてからファイルが変更されていない修正済みコミットをプッシュしようとしました。文字通り、変更のコミットメッセージを修正したばかりで、もう一度プッシュしようとしました。コミットの一部として変更されたファイルはありません。
あなたが投稿したのと同じエラーメッセージで私のプッシュが拒否されました。
Gerritは、修正されたコミットメッセージ以外の変更がないプッシュを好まなかったようです。
文字通り、ファイルに1文字の変更を加え、ファイルを追加し、コミットを再度修正してプッシュし、プッシュは成功しました。
Git == 1.8.4.2を使用しています
今日、この問題が発生し、すべての提案を試みました。最後に、解決策は非常に簡単でした。
運が良ければ今すぐ動作します。
今日、この問題に遭遇し、git> 1.8.4.2を使用していませんでした。 Gerrit 2.7を使用しています。
約5分間のフラストレーションの後、プッシュしようとしていたブランチのローカルバージョンに切り替えることにし、プルしました。その後、私のプッシュは再び機能し始めましたが、その理由はわかりません。
私はちょうどこの問題に今ちょうど来て、私の場合は:あるgit initで、まったく新しいブランチをプッシュします(つまり、このブランチはgerritのOrigin gitのリビジョンとは関係ありません)gerritのgitプロジェクトに。いろいろ試してみましたが、失敗しました。最後に、私は@obusemeの答えに触発され、これに従い、修正しました:
git remote add gerrit GERRIT_GIT_PROJECT_URL
git fetch gerrit
And then upload again.
この問題を回避するには、リポジトリを再度複製し、変更を古いリポジトリからコピーします。
他の解決策は私にとってはうまくいきませんでした。
Git 2.6.1とJGit 4.6.1を試し、Gerrit 2.13.1を使用しました。
アンパックエラーが表示されたら、次の行も探してください:remote: error: unable to create temporary file: No space left on device
いくつかの古いバックアップファイルを削除すると、再び動作するのに十分なスペースが解放されました。