Git ошибка распаковки при нажатии на gerrit

При нажатии новой ветки на сервер gerrit возникает следующая ошибка:

[email protected]:~/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://[email protected]/repository
 ! [remote rejected] landingpage -> landingpage (n/a (unpacker error))
error: failed to push some refs to 'ssh://[email protected]/repository'

Мы попытались скопировать указанный объект дерева на удаленный git вручную без успеха.

На стороне gerrit мы получаем stacktrace:

[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: [email protected] 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

Люди: любые идеи, что делать?

Ответ 1

Нажатие с аргументом --no-thin работает как обходной путь для меня:

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

Ответ 2

Используете ли вы git > 1.8.4.2?

Я обнаружил несовместимость между git 1.8.4.3+ и gerrit 2.6, из-за https://github.com/git/git/commit/fbd4a7036dfa71ec89e7c441cef1ac9aaa59a315

С помощью этого улучшения, если git узнает, что дерево sha1 уже существует на сервере, оно не отправит его снова, но gerrit хочет выполнить поиск дерева sha1, связанного с commit sha1 в загруженном пакете.

Похоже, я не могу воспроизвести его с помощью gerrit 2.8-rc3, а не с последней версией scm-manager. Я бы сказал, что это было разрешено в jgit, но пока не может найти версию.

Ответ 3

мой случай

Я также сталкиваюсь с этой проблемой, и это занимает много времени, чтобы исправить эту проблему.

Во-первых, я замечаю одну информацию об ошибке в журнале 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 для поиска всех открытых патчей для этого нейтрона проекта:

1974  master  Add two interfaces for manipulate forwarding individually

Затем я нахожу этот патч-набор в панели инструментов gerrit путем поиска, я нажимаю ссылку и кажется ошибкой:

613fd2557fba30aff2dbd51c3807cc57561bab08 cannot  found

Ага, что причина!

Но почему этот объект отсутствует?

Причина в том, что мой коллега сказал мне, что нейтронный проект будет использовать новое репо для замены старого, я удаляю старое репо, но не закрываю все открытые патч файлы в gerrit. Открытый патчсет исчезнет на панели инструментов gerrit, но он все еще существует в базе данных gerrit.

как его исправить

Войдите в свой блок reviewdb и найдите эту запись:

Сначала убедитесь, что это тот, который мы хотим изменить:

select * from changes where change_id=1974\G;

Затем обновите эту запись:

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

Ответ 4

Я тоже столкнулся с этой ошибкой.

В моем сценарии я пытался нажать исправленную фиксацию, когда ни один из файлов не изменился с момента последнего нажатия одной и той же фиксации. Я буквально только что внесла поправки в сообщение о совершении изменения и попытался снова нажать. Никакие файлы как часть изменения не были изменены.

Мой push был отклонен с тем же сообщением об ошибке, которое вы опубликовали.

Казалось, что Gerrit не понравился толчок без каких-либо изменений, кроме измененного сообщения фиксации.

Я буквально произвел одно изменение символа в файл, добавил файл, снова скорректировал фиксацию и нажал, и нажатие преуспело.

Я использую git == 1.8.4.2

Ответ 5

У меня была эта проблема сегодня и пробовал все предложения. Наконец, решение было очень простым:

  • Переключиться на другую ветку (например, разработать).
  • Вытащите из удаленного репозитория
  • Вернитесь к своей новой ветке и нажмите.

С какой-либо удачей он будет работать сейчас.

Ответ 6

Сегодня я столкнулся с этой проблемой, и я не использовал git > 1.8.4.2. Я на Gerrit 2.7.

После 5 минут разочарования я решил просто переключиться на локальную версию ветки, к которой я пытался нажать, и я сделал попытку. После этого мои попытки начали работать снова, но я не понимаю, почему.

Ответ 7

Я только что пришел с этой проблемой сейчас, и мое дело: Какой-то один git init и нажмите целую новую ветвь (т.е. Эта ветка не связана с какой-либо версией в начале git в gerrit) в проект git в gerrit. Я стараюсь много, но терпеть неудачу. В конце концов, меня вдохновляет ответ @obuseme, следуйте этому и фиксируйте:

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

Ответ 8

Я работал над этой проблемой путем повторного клонирования репозитория и копирования моих изменений из старого.

Другие решения не сработали для меня, кроме того, что я не пробовал obrienks.

Я попытался с git 2.6.1, а также с JGit 4.6.1, и я использую Gerrit 2.13.1.

Ответ 9

Когда вы получаете сообщение об ошибке распаковки, вы можете также искать эту строку: remote: error: unable to create temporary file: No space left on device

Удаление пары старых файлов резервных копий высвободило достаточно места, чтобы оно снова заработало.