128 votes

Error pushing to GitHub - insufficient permission for adding an object to repository database

Je reçois une erreur inhabituelle lorsque j'essaie de faire un "git push" vers mon dépôt GitHub :

Counting objects: 8, done.
Delta compression using 2 threads.
Compressing objects: 100% (4/4), done.
Writing objects: 100% (5/5), 1.37 KiB, done.
Total 5 (delta 2), reused 0 (delta 0)
error: insufficient permission for adding an object to repository database ./objects

fatal: failed to write object
error: unpack-objects exited with error code 128
error: unpack failed: unpack-objects abnormal exit
To git@github.com:bixo/bixo.git
 ! \[remote rejected\] master -> master (n/a (unpacker error))
error: failed to push some refs to 'git@github.com:bixo/bixo.git'
  • Après un clone propre de GitHub, je peux éditer/additionner/commettre/pousser un fichier modifié.
  • Si je répète cette opération une deuxième fois, j'obtiens l'erreur ci-dessus.
  • Je peux pousser vers d'autres dépôts GitHub sans problème.
  • J'ai vérifié les permissions des fichiers et des répertoires de mon côté, et elles semblent correctes.
  • J'utilise git 1.6.2.3 sous Mac OS X 10.5.8.

Le référentiel ci-dessus a été la source de mon amusement pour une question précédente de Stack Overflow ( SO 1904860 ), donc peut-être que le repo GitHub a été corrompu. Le seul problème similaire que j'ai trouvé en faisant des recherches était une échec du déballage problème signalé sur github. Est-ce que quelqu'un d'autre a déjà rencontré ce problème, en particulier lorsque no en utilisant GitHub ?

1 votes

Une autre astuce pour les personnes qui rencontrent cette erreur : J'ai eu cette erreur parce que j'ai utilisé le mauvais utilisateur pour pousser. Mon serveur a l'utilisateur foo y git ; les deux peuvent lire /opt/git/<repo> mais seulement git peut y écrire. git La valeur par défaut est l'utilisateur actuel si aucun n'est donné dans .git/config que j'ai oublié. Aucune des réponses élaborées ci-dessous n'était nécessaire.

212voto

syvex Points 2244

Si vous voyez cette erreur en dehors de github, voici un remède.

Je l'ai eu par : http://mapopa.blogspot.com/2009/10/git-insufficient-permission-for-adding.html

ssh me@myserver
cd repository/.git

sudo chmod -R g+ws *
sudo chgrp -R mygroup *

git config core.sharedRepository true

Après cela, le démon git devrait utiliser les permissions du groupe de fichiers lorsqu'il écrit dans .git/objets.

4 votes

+1 Ça a marché pour nous. A quoi sert le 's' dans sudo chmod -R g+ws * ?

5 votes

Cela permettra à tout nouveau fichier créé par un autre utilisateur de conserver les permissions de groupe du répertoire racine. Sinon, vous aurez des erreurs en poussant vers le référentiel. Voir setuid et setgid

0 votes

J'ai eu la même erreur avec Gitorious sur Debian 6 et l'IDE PHPStorm, avec ce message "error : insufficient permission for adding an object to repository database .git/objects". J'ai utilisé cette solution sur le dossier parent des projets, cela fonctionne bien avec le "+s trick".

55voto

tschundeee Points 9241

Ce problème est généralement dû à des permissions d'utilisateur et de groupe incorrectes sur le système de fichiers de votre serveur Git. Le dépôt git doit appartenir à l'utilisateur et à son groupe.

Ejemplo:

Si votre utilisateur s'appelle "git", son groupe "gitgroup", et l'emplacement du dépôt Git est : git@mygitserverxyz.com:path/to/repo.git.

alors faites un :

sudo chown -R git:gitgroup path/to/repo.git/

Cela a corrigé l'erreur de permission insuffisante de git pour moi.

0 votes

Chown : utilisateur invalide : `git:git'

4 votes

@MariusKavansky essayez $USER:$USER au lieu de git:git

0 votes

Dans mon cas, cela ne fonctionne que pendant un certain temps. Je dois le refaire après quelques poussées.

36voto

Ferid Mövsümov Points 1903
sudo chmod 777 -R .git/objects

4 votes

Cela a fonctionné pour moi... mais WTF ? J'ai mis à jour le dépôt pendant des mois et cela a soudainement commencé cet après-midi...

0 votes

La solution pour moi était presque la même, mais impliquait de changer/corriger le propriétaire de certains des fichiers dans le répertoire .git. J'avais fait de la maintenance git alors que j'étais connecté en tant que 'Root', et cela semblait avoir soit changé le propriétaire en Root, soit créé de nouveaux fichiers avec le propriétaire de Root sur lequel git s'appuyait. J'avais un script de déploiement automatique s'exécutant sous le propriétaire 'apache' qui a ensuite cessé de fonctionner.

9 votes

chmod 777 n'est jamais une bonne solution, juste une solution de rechange peu sûre. Essayez plutôt la réponse de @Syvex (avec setgid)

5voto

Zensursula Points 81

Rien de ce qui précède n'a fonctionné pour moi. Quelques heures plus tard, j'ai trouvé la raison du problème : J'ai utilisé une url de repo du type

ssh://git@example.com/~git/repo.git

Malheureusement, j'ai stocké une session putty avec le nom example.com qui a été configuré pour se connecter en tant qu'utilisateur myOtherUser .

Donc, alors que je pensais que git se connectait à l'hôte example.com avec l'utilisateur 'git', Git/TortoiseGit s'est connecté à la session Putty. example.com qui utilise l'utilisateur myOtherUser . Cela conduit à l'exact même ..insufficient permission.. erreur (car les deux utilisateurs sont dans des groupes différents).

Solution : Renommez la session putty example.com a myOtherUse@example.com

5voto

rubyan Points 21

Chmod devrait être chown, donc la ligne correcte est :

sudo chown -R gituser:gituser objects

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