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?
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:
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.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.
chown
ing et chmod
ing le répertoire des objets.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
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.
Fermez simplement Visual Studio (ou Unity) et essayez d’ajouter de nouveau ces fichiers.
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.
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.