web-dev-qa-db-fra.com

git: impossible d'indexer le fichier - permission refusée

Pour un fichier seulement, j'obtiens l'erreur suivante:

error: unable to write sha1 filename /opt/www/.git/objects/3f/ce3587c54a8be14c69b08c6b01f94949b11b47: Permission denied

error: wp/wp-admin/css/theme-install.dev.css: failed to insert into database
fatal: unable to index file wp/wp-admin/css/theme-install.dev.css

J'ai vérifié mes autorisations sur le fichier en question, le répertoire .git objects en question et .git lui-même. Je peux ajouter n'importe quel fichier sauf celui-ci. Je pourrais stat/r/w/touch le fichier, et toucher ne m'a pas aidé. Les autorisations sont toutes correctes. 

Est-ce un bug fou?

20
h4xnoodle

En regardant le code source de Git (sha1_file.c, fonction move_temp_to_file()), il semble que Git ne parvient pas à renommer un fichier temporaire nommé /opt/www/.git/objects/3f/tmp_obj_XXXXXX (où XXXXXX est composé de six caractères aléatoires) en /opt/www/.git/objects/3f/ce3587c54a8be14c69b08c6b01f94949b11b47. Cela peut arriver si vous n'êtes pas autorisé à supprimer des fichiers dans /opt/www/.git/objects/3f.

Quelques choses à essayer:

  • Si plusieurs utilisateurs accèdent au référentiel Git, vous devrez peut-être exécuter quelque chose comme git config core.sharedRepository 0664 (voir git help config pour plus de détails) afin de vous assurer que les répertoires et les fichiers nouvellement créés disposent des autorisations appropriées pour tous les utilisateurs du référentiel.
  • Essayez d'exécuter rm -f /opt/www/.git/objects/3f/tmp_obj_* et voyez si cela fait disparaître le problème.
  • Voyez si vous pouvez reproduire le problème en dehors de Git en procédant comme suit:

    mkdir -p /opt/www/.git/objects/3f
    cd /opt/www/.git/objects/3f
    rm -f tmp_obj_* ce3587c54a8be14c69b08c6b01f94949b11b47
    echo "testing" >tmp_obj_abcdefg
    mv tmp_obj_abcdef ce3587c54a8be14c69b08c6b01f94949b11b47
    rm -f tmp_obj_abcdefg
    

    Assurez-vous d’exécuter les commandes ci-dessus avec le même utilisateur qui a rencontré l’erreur.

  • Essayez récursivement chowning et chmoding le répertoire des objets.
13
Richard Hansen

Si vous utilisez Visual Studio ou quelque chose de similaire qui génère le fichier mdf, fermez simplement VS et relancez la commande git. Cette fois, ça devrait marcher.

Pour sauvegarder constamment la fermeture et la réouverture, vous devez ajouter des références dans le fichier .gitignore à la racine du projet. Par exemple, s'il s'agit d'une base de données à l'origine du problème, ajoutez ce qui suit:

# SQL Server files
*.mdf
*.ldf
45
ShrapNull

Vous n'êtes pas autorisé à écrire dans /opt/www/.git/objects/3f.

La solution la plus rapide consiste à utiliser la commande Sudo pour exécuter votre commande avec les privilèges root.

Sudo <Your git command>

Résolu pour moi.

5
william.eyidi

Fermez simplement Visual Studio (ou Unity) et essayez d’ajouter de nouveau ces fichiers.

2
Yar

Quelque chose a mal tourné dans votre référentiel git, probablement à cause d'un processus externe créant un fichier ou un répertoire appartenant à un utilisateur autre que l'utilisateur actuel. 

Cette erreur est courante lors de l'utilisation de Docker et un service de votre fichier docker-compose.yml possède un volume monté localement, créé à l'aide d'un utilisateur différent de celui de l'utilisateur de l'ordinateur local. 

Si c'est la première fois que cette erreur se produit, exécutez la procédure ci-dessous dans votre répertoire de travail pour modifier le droit de propriété des fichiers et des dossiers sur l'utilisateur connecté:

Sudo chown -R ${USER}:${USER} .

Si ce n’est pas la première fois que vous rencontrez ce problème, c’est-à-dire que vous avez déjà validé et envoyé des fichiers et des dossiers appartenant à un autre utilisateur, seul ce qui précède ne résoudra pas le problème, ni l’exécution de la commande ci-dessus. besoin de suivre les instructions suivantes.

De loin, la solution la plus rapide consiste à exécuter ce qui suit à partir du répertoire de votre projet racine, qui contient votre référentiel git:

Sudo chown -R ${USER}:${USER} .git/objects

Pour vérifier que tout est corrigé, exécutez les opérations suivantes:

git add .

Rapidement suivi en exécutant:

git status

Vous verrez que tout a été ajouté au référentiel git sans que vous ayez besoin de tester/bidouiller quoi que ce soit.

1
Mat

Je rencontrais ce problème sur mon référentiel Origin d'origine lorsque les autorisations étaient root: git 770, apparemment je devais le changer en 771, même si mon utilisateur est dans le groupe git. Je soupçonne peut-être que git n'est peut-être pas au courant des problèmes ou n'est pas compatible avec les groupes secondaires, car ce groupe était l'un de mes groupes secondaires dans cette affaire.

0
RedScourge