69 votes

git: ne peut pas pousser (erreur de décompression)

J'ai ce problème quand j'essaie de le pousser dans git:

error: insufficient permission for adding an object to repository database ./objects

fatal: failed to write object
error: unpack failed: unpack-objects abnormal exit
To ssh://<repo url>/<repo dir>
 ! [remote rejected] master -> master (n/a (unpacker error))
error: failed to push some refs to 'ssh://<repo url>/<repo dir>'

J'ai eu cela avant que de façon sporadique et nous avons toujours eu à résoudre par chaque utilisateur sshing à la mise en pension et de la configuration des autorisations de groupe sur tous les fichiers qui y sont avec

chmod -R g+w *

Cela n'a jamais été une solution satisfaisante et maintenant il est mordu de nous dans le cul, comme l'un des gars est parti et personne ne connaît son repo mot de passe utilisateur. Donc, je suis en train de le résoudre correctement.

L'erreur semble se produire quand quelqu'un essaie de pousser jusqu'à un changement qui va modifier une pension de dir qui est détenue par un autre utilisateur (d'où le réglage de l'écriture du groupe option ci-dessus). J'ai fait un peu de googling autour de cela et avons trouvé un couple de solutions en cours de discussion (ni de ce qui a fonctionné pour moi)

1) assurez-vous que le groupe que les pensions de dirs sont partagés avec chacun des utilisateurs " groupe principal (je crois que c'est déjà le cas: chaque utilisateur a un seul groupe, de sorte que doit être leur groupe principal, non?)

2) git pensions de base.sharedRepository, ainsi qu'il est détaillé ici: http://stackoverflow.com/questions/398203/git-cant-push-from-one-computer#answer-399133 J'ai changé de cela, mais il n'a fait aucune différence. Ai-je besoin de recharger la config ou quelque chose de réellement effectuer le changement?

Voici ce que mon repo config ressemble à un guichet automatique:

[core]
        repositoryformatversion = 0
        filemode = true
        bare = true
        sharedRepository = all
[receive]
        denyNonFastForwards = True

Reconnaissant pour tout conseils ou des suggestions! max

40voto

Iason Points 96

J'ai eu cette erreur pour deux semaines, et la majorité des solutions déclaré "chmod -R' comme la réponse, malheureusement pour moi, mon git repos (local / distant / partagée avec l'équipe) étaient tous sur Windows OS, et même si chmod -Rv a montré tous les fichiers qui ont changés de "rwxrwxrwx', un 'ls-l' encore montré tous les fichiers comme "rwxr-xr-x' et l'erreur se répète. Finalement, j'ai vu cette solution par Ariejan de Vroom. Cela a fonctionné et nous avons tous été en mesure de tirer et de pousser à nouveau.

Sur les deux locaux (local qui a de la difficulté à pousser) et à distance de repos, exécutez les commandes suivantes:

  • git fsck
  • git pruneau
  • git repack
  • git fsck

    Sur une note de côté, j'ai essayé d'utiliser Windows natif autorisations de fichier / ACL et même eu recours à l'élévation de l'utilisateur de problème à l'Administrateur, mais rien de tout cela semblait pour aider. Vous ne savez pas si l'environnement est important, mais il peut aider quelqu'un avec une configuration similaire - problème des membres de l'équipe et à distance (Windows Server 2008 R2 Standard), mon local (Windows 7 VM).

30voto

spadeworkers Points 170

Une méthode plus simple consiste à ajouter un script de post-réception qui exécute la commande chmod après chaque transmission au référentiel 'hub' sur le serveur. Ajoutez la ligne suivante à hooks / post-receive dans votre dossier git sur le serveur:

 chmod -Rf u+w /path/to/git/repo/objects
 

9voto

Alastair Points 1492

C'est une erreur de permission. Le moyen le plus approprié et le plus sûr pour moi consistait à ajouter des utilisateurs à un groupe supplémentaire que le repo. appartient à (ou vice versa):

 groupadd git
chgrp -R git .git
chgrp -R git ./
usermod -G -a git $(whoami)
 

8voto

sjas Points 3175

Dans le cas où quelqu'un d'autre serait coincé avec ceci: cela signifie simplement que les autorisations d'écriture sont erronées dans le référentiel vers lequel vous insistez. Cliquez sur chmod -R pour que l'utilisateur auquel vous accédez au serveur git ait un accès en écriture.

http://blog.shamess.info/2011/05/06/remote-rejected-na-unpacker-error/

Ça fonctionne.

3voto

Cameron Skinner Points 19987

J'utilise la gitose pour gérer ce genre de choses. Gitosis a un seul utilisateur (généralement appelé "git") qui possède tous les référentiels et utilise un contrôle d'accès basé sur une clé publique pour chaque référentiel. Cela pourrait ne pas convenir à votre configuration, mais cela vaut probablement la peine de vérifier (sans jeu de mots).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X