git: Impossible de fichier d'index - autorisation refusée
Pour un seul fichier, 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 .git objets de répertoire en question, et .git lui-même. Je peux ajouter d'autres fichiers à l'exception de celui-ci. Je pourrais stat/r/w/touch
le fichier, et le toucher n'a pas aidé. Le autorisations sont tous corrects.
Ce n'est pas fou bug?
- Pouvez-vous
touch
de nouveaux fichiers dans.../objects/3f
, ou si non, quel est son mode de fonctionnement? Ne.../objects/3f/ce3...
existent déjà, et si oui, quel est son mode de fonctionnement? Pourrait la partition où/opt
vie soit pleine? - Le toucher est très bien, et le fichier n'existe pas.
- aussi m'est arrivé dans ce cas : le fait d'avoir un fichier nommé "imafile" > supprimer ce fichier > créer un répertoire nommé "imafile" > mettre des fichiers dans les = ne peut pas s'engager parce que "Impossible de trouver l'index"
Vous devez vous connecter pour publier un commentaire.
En regardant le code source de Git (
sha1_file.c
, la fonctionmove_temp_to_file()
), il semble comme Git est de ne pas renommer un fichier temporaire nommé/opt/www/.git/objects/3f/tmp_obj_XXXXXX
(oùXXXXXX
est de six caractères aléatoires) pour/opt/www/.git/objects/3f/ce3587c54a8be14c69b08c6b01f94949b11b47
. Cela peut se produire si vous n'avez pas la permission de supprimer des fichiers dans/opt/www/.git/objects/3f
.Certaines choses à essayer:
git config core.sharedRepository 0664
(voirgit help config
pour plus de détails) pour s'assurer que les nouveaux fichiers et répertoires ont des autorisations appropriées pour tous les utilisateurs du référentiel.rm -f /opt/www/.git/objects/3f/tmp_obj_*
et voir si cela rend le problème.Voir si vous pouvez reproduire le problème en dehors de Git en procédant de la manière suivante:
Assurez-vous d'exécuter les commandes ci-dessus le même utilisateur qui a connu l'erreur.
chown
ing etchmod
ing les objets d'annuaire.Si vous utilisez visual studio ou quelque chose de semblable qui est de générer le fichier mdf, il suffit de fermer VS & recommencez votre commande git de nouveau. Cette fois, il devrait fonctionner.
Pour enregistrer en permanence fermeture & réouverture, vous devez ajouter des références dans .gitignore fichier dans la racine du projet. Par exemple, si c'est une base de données à l'origine du problème, ajoutez la ligne suivante:
Vous n'avez pas la permission d'écrire dans
/opt/www/.git/objects/3f
.La solution la plus rapide est d'utiliser le
sudo
de commande pour l'exécution de votre commande avec les privilèges de root.sudo <Your git command>
Résolu pour moi.
Il suffit de fermer Visual Studio (ou de l'Unité) et essayez d'ajouter ces fichiers à nouveau.
Quelque chose est allé de travers dans votre dépôt git probablement causé par un processus externe de la création d'un fichier ou d'un répertoire qui est détenue par un utilisateur autre que l'utilisateur actuel.
Cette erreur est fréquente lors de l'utilisation de Docker, et un service dans votre menu fixe-composer.fichier yml a une monté localement volume qui a été créé à l'aide d'un nom d'utilisateur différent de celui de la machine locale de l'utilisateur.
Si c'est la première fois que cette erreur s'est produite, exécutez la ci-dessous sur votre répertoire de travail pour changer le propriétaire des fichiers et des dossiers à l'utilisateur connecté:
Si ce n'est pas la première fois que vous avez rencontré ce problème, c'est à dire que vous avez déjà commis et poussé les fichiers et les dossiers qui sont détenus par un autre utilisateur, le ci-dessus ne suffiront pas à redresser la situation, ainsi que l'exécution de la commande ci-dessus, vous devrez exécuter les instructions suivantes.
De loin, la solution la plus rapide consiste à exécuter les opérations suivantes à partir de la racine de votre répertoire de projet qui tient votre dépôt git:
Pour tester que tout est fixe, exécutez les opérations suivantes:
Rapidement suivie par l'exécution de:
Vous verrez que tout a été ajoutée sur le dépôt git sans qu'il soit besoin de tester /jouer avec quelque chose plus loin.
J'ai eu ce problème sur mon nu de l'origine du référentiel lorsque les autorisations ont été root:git 770, apparemment, j'ai dû changer de 771, même si mon utilisateur est dans le git groupe. Je soupçonne peut-être git est peut-être pas acl-conscient, ou non compatible avec les groupes secondaires, comme le git groupe a été l'un de mes groupes secondaires dans ce cas.