Erreur lors de l'extraction de git - autorisation insuffisante pour ajouter un objet à la base de données du référentiel .git / objets

112

J'ai une erreur git: "permission insuffisante pour ajouter un objet à la base de données du référentiel .git / objets" chaque fois que je fais "git pull origin develop".

    remote: Counting objects: 70, done.
    remote: Compressing objects: 100% (7/7), done.
    remote: Total 42 (delta 35), reused 42 (delta 35)
    error: insufficient permission for adding an object to repository database     .git/objects

    fatal: failed to write object
    fatal: unpack-objects failed
Unnati patil
la source
1
Question évidente: avez-vous des droits d'accès aux fichiers sur le disque?
Lasse V.Karlsen
17
Vérifiez les autorisations du .git/objectsfichier. Il semble que vous ayez peut-être utilisé par erreur sudoà un moment donné dans le passé et donné la propriété rootà vous-même plutôt qu'à vous-même.
Chris Hayes
J'obtiens le même problème @ChrisHayes Mais quel fichier .git / objects? Où est ce fichier / répertoire?
pedroremedios
1
@pedroremedios .gitest un répertoire qui existe à la base de chaque dépôt git.
Chris Hayes

Réponses:

255

En supposant que @ChrisHayes a raison à propos d'un sudo accidentel, cela devrait résoudre le problème. Depuis l'intérieur de votre référentiel:

sudo chown -R $USER:$USER "$(git rev-parse --show-toplevel)/.git"

Mise à jour : pour ceux d'entre vous qui obtiennent l' illegal group nameerreur, essayez plutôt ceci:

sudo chown -R $(id -u):$(id -g) "$(git rev-parse --show-toplevel)/.git"
dwurf
la source
7
Que fait git rev-parse --show-toplevel-on? J'ai pu résoudre le problème simplement en utilisant chown -R user:userle répertoire de premier niveau de mon dépôt.
Matt K
9
@MattK cela obtiendra le répertoire de premier niveau de votre dépôt, donc la commande fonctionnera quel que soit l'endroit où vous vous trouvez actuellement dans votre dépôt. Si vous êtes déjà à la racine, vous pouvez simplement exécutersudo chown -R $USER:$USER .git
dwurf
7
Je reçois: illegal group name
Ian
1
J'utilisais le mauvais nom d'utilisateur. La commande a fonctionné. Je vous remercie.
Ian
1
cela m'est aussi arrivé après un sudo accidentel avant. le changement de propriétaire / groupe a résolu le
problème
10

Accédez au répertoire racine du projet et exécutez les commandes ci-dessous pour résoudre ce problème,

cd .git/objects
sudo chown -R yourname:yourgroup *
Priyank Patel
la source
2

La mienne était une erreur stupide ... le bon nom d'utilisateur et le bon groupe ont été définis, mais www-data était le compte qui y accédait. Le répertoire appartenait à vaindil: www-data, mais les permissions étaient de 755 donc www-data ne pouvait pas y écrire. Corrigé avec:

$ sudo chmod -R 775 /path/to/repo
vaindil
la source
1

PAS UNE BONNE PRATIQUE (Juste une alternative)

J'utilise Ubuntu et j'ai rencontré le même problème. Pour le résoudre, j'ai simplement changé d'utilisateur en root et je ne vois aucune autre erreur.

$su
password

Ensuite,

$git pull origin master

Méthode recommandée: MODIFIER LA PERMISSION DU RÉPERTOIRE

Nabin
la source
4
Cela fonctionnera (comme cela sera le cas sudo), mais il est préférable d'éviter d'exécuter des commandes en tant que root dans la mesure du possible.
dwurf
@dwurf Merci pour le commentaire. C'était juste une alternative à la réponse ci-dessus. :)
Nabin le
1
PAS UNE SOLUTION aussi - vous ne voulez pas utiliser votre repo comme sudo.
Wax Cage
1
@WaxCage Oui, mais voyez-vous déjà le gros texte en gras? :)
Nabin