web-dev-qa-db-ja.com

Gritへのプッシュでのgit unpackエラー

新しいブランチを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

人々:何をすべきか?

56
edlerd

--no-thin引数を使用したプッシュは、回避策として機能します。

git Push --no-thin omnigerrit HEAD:refs/for/Android-4.4
99
Tassadar

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で解決されたと言いますが、まだどのバージョンを見つけることができません。

13
tardyp

私の場合

私もこの問題に遭遇しましたが、この問題を修正するには時間がかかります。

最初に、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;
10
NewPtone

このエラーも発生しました。

私のシナリオでは、同じコミットが最後にプッシュされてからファイルが変更されていない修正済みコミットをプッシュしようとしました。文字通り、変更のコミットメッセージを修正したばかりで、もう一度プッシュしようとしました。コミットの一部として変更されたファイルはありません。

あなたが投稿したのと同じエラーメッセージで私のプッシュが拒否されました。

Gerritは、修正されたコミットメッセージ以外の変更がないプッシュを好まなかったようです。

文字通り、ファイルに1文字の変更を加え、ファイルを追加し、コミットを再度修正してプッシュし、プッシュは成功しました。

Git == 1.8.4.2を使用しています

7
Andy Obusek

今日、この問題が発生し、すべての提案を試みました。最後に、解決策は非常に簡単でした。

  1. 別のブランチに切り替えます(例:開発)。
  2. リモートリポジトリからプルする
  3. 新しいブランチに切り替えてプッシュします。

運が良ければ今すぐ動作します。

6
obrienk

今日、この問題に遭遇し、git> 1.8.4.2を使用していませんでした。 Gerrit 2.7を使用しています。

約5分間のフラストレーションの後、プッシュしようとしていたブランチのローカルバージョンに切り替えることにし、プルしました。その後、私のプッシュは再び機能し始めましたが、その理由はわかりません。

2
onlywei

私はちょうどこの問題に今ちょうど来て、私の場合は:あるgit initで、まったく新しいブランチをプッシュします(つまり、このブランチはgerritのOrigin gitのリビジョンとは関係ありません)gerritのgitプロジェクトに。いろいろ試してみましたが、失敗しました。最後に、私は@obusemeの答えに触発され、これに従い、修正しました:

git remote add gerrit GERRIT_GIT_PROJECT_URL
git fetch gerrit
And then upload again.
1
Chunlin Zhang

この問題を回避するには、リポジトリを再度複製し、変更を古いリポジトリからコピーします。

他の解決策は私にとってはうまくいきませんでした。

Git 2.6.1とJGit 4.6.1を試し、Gerrit 2.13.1を使用しました。

0
Max Hohenegger

アンパックエラーが表示されたら、次の行も探してください:remote: error: unable to create temporary file: No space left on device

いくつかの古いバックアップファイルを削除すると、再び動作するのに十分なスペースが解放されました。

0
Frank Forte