Lors du transfert d’une nouvelle branche vers un serveur gerrit, nous rencontrons l’erreur suivante:
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'
Nous avons essayé de copier manuellement l’arbre mentionné sur le git distant sans succès.
Du côté de gerrit nous obtenons un 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: 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
Les gens: des idées quoi faire?
Pousser avec --no-thin
argument fonctionne comme une solution de contournement pour moi:
git Push --no-thin omnigerrit HEAD:refs/for/Android-4.4
Utilisez-vous git> 1.8.4.2?
J'ai trouvé une incompatibilité entre git 1.8.4.3+ et gerrit 2.6, à cause de https://github.com/git/git/commit/fbd4a7036dfa71ec89e7c441cef1ac9aaa59a315
Avec cette amélioration, si git découvre que l’arbre sha1 existe déjà sur le serveur, il ne le renverra pas, mais gerrit souhaite effectuer une recherche dans l’arbre sha1 associé au commit sha1 du pack téléchargé.
Il semble que je ne puisse pas le reproduire avec gerrit 2.8-rc3, pas avec la dernière version de scm-manager. Je dirais que cela a été résolu en jgit, mais ne peut pas trouver quelle version pour le moment.
mon cas
J'ai également rencontré ce problème aussi, et cela prend beaucoup de temps pour résoudre ce problème.
Tout d'abord, je remarque une information d'erreur dans le journal 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
Qu'est-ce qu'un objet 613fd2557fba30aff2dbd51c3807cc57561bab08?
Ensuite, j'utilise git review -l pour rechercher dans tout le patchset ouvert ce neutron de projet:
1974 master Add two interfaces for manipulate forwarding individually
Ensuite, je trouve ce patchset dans le tableau de bord gerrit en cherchant, je clique sur le lien et il semble que erreur:
613fd2557fba30aff2dbd51c3807cc57561bab08 cannot found
Aha, c'est la raison!
Mais pourquoi cet objet manque-t-il?
La raison en est que mon collègue me dit que le projet neutron utilisera un nouveau référentiel pour remplacer l'ancien, je supprime l'ancien référentiel mais je ne ferme pas tous les patchs ouverts dans gerrit. Le jeu de correctifs ouvert disparaîtra dans le tableau de bord gerrit, mais il existe toujours dans la base de données gerrit.
comment y remédier
Connectez-vous à votre reviewdb sql et trouvez cet enregistrement:
Tout d’abord, assurez-vous que c’est celui que nous voulons modifier:
select * from changes where change_id=1974\G;
Puis mettez à jour cet enregistrement:
update changes set open='N',status='A' where change_id=1974;
Je viens de rencontrer cette erreur aussi.
Pour mon scénario, j'essayais de pousser un commit modifié dans lequel aucun des fichiers n'avait changé depuis la dernière fois que le même commit a été poussé. Je venais littéralement de modifier le message de validation pour le changement et de tenter de pousser à nouveau. Aucun fichier dans le commit n'a changé.
Mon Push a été rejeté avec le même message d'erreur que vous avez posté.
Il semblait que Gerrit n'appréciait pas un Push sans autre changement que le message de validation modifié.
J'ai littéralement apporté un changement de caractère à un fichier, ajouté le fichier, modifié à nouveau le commit et poussé, et le Push a réussi.
J'utilise git == 1.8.4.2
J'ai eu ce problème aujourd'hui et j'ai essayé toutes les suggestions. Finalement, la solution était très simple:
Avec un peu de chance, ça va marcher maintenant.
J'ai rencontré ce problème aujourd'hui et je n'utilisais pas git> 1.8.4.2. Je suis sur Gerrit 2.7.
Après environ 5 minutes de frustration, j'ai décidé de passer à la version locale de la branche sur laquelle j'essayais de pousser et j'ai tiré. Après cela, mes pulsions ont recommencé à fonctionner mais je ne comprends pas pourquoi.
Je viens juste avec ce problème tout à l’heure, et mon cas est le suivant: Un certain git init et Push, une toute nouvelle branche (c’est-à-dire que cette branche n’a aucune relation avec une révision dans Origin git in gerrit) à un projet git dans gerrit . J'essaie de nombreuses manières mais j'échoue. En fin de compte, je suis inspiré par la réponse de @obuseme, suivez ceci et corrigez:
git remote add gerrit GERRIT_GIT_PROJECT_URL
git fetch gerrit
And then upload again.
J'ai résolu ce problème en re-clonant le référentiel et en copiant mes modifications à partir de l'ancien.
Les autres solutions ne fonctionnaient pas pour moi, sauf que je n’essayais pas d’obrienks.
J'ai essayé avec Git 2.6.1 ainsi qu'avec JGit 4.6.1 et j'utilise Gerrit 2.13.1.
Lorsque vous obtenez l'erreur de décompression, vous pouvez également rechercher cette ligne: remote: error: unable to create temporary file: No space left on device
La suppression de quelques anciens fichiers de sauvegarde a libéré suffisamment d’espace pour le faire fonctionner à nouveau.