Git push error: impossible de dissocier l'ancien (Autorisation refusée)
Dans le serveur distant, j'ai mis en place un hook post-receive afin de faire une extraction git de mon référentiel:
#!/bin/sh
GIT_WORK_TREE=/var/www/<website> git checkout -f
Mais quand je fais un push de ma machine locale vers le référentiel git du serveur, j'obtiens les messages d'erreur suivants:
remote: error: unable to unlink old '<file>' (Permission denied)
Cela apparaît plusieurs fois, un message d'erreur pour presque tous les fichiers.
Cependant, j'ai un README.fichier txt que je suis capable de changer en utilisant git, voici ses autorisations:
-rw-r--r-- 1 <serverusername> <serverusername> 2939 Aug 2 10:58 README.txt
, Mais d'autres fichiers avec exactement le même propriétaire et mêmes autorisations, donnez-moi cette erreur.
Dans un autre référentiel local pour un autre site web, j'ai les fichiers avec mon nom d'utilisateur local en tant que propriétaire, et quand je pousse vers le serveur distant, il respecte le propriétaire du serveur distant des fichiers et fonctionne comme un charme.
Évidemment, il semble une erreur liée aux autorisations, mais je ne peux pas trouver un moyen de le réparer, des suggestions?
11 réponses
Lorsque vous avez à dissocier fichier, vous devez disposer d'une autorisation " w " pour le répertoire dans lequel le fichier est, pas pour le fichier...
sudo chmod -R ug+w .;
Cette commande corrigerait le problème. Il donne des autorisations d'écriture au dossier.
Si vous utilisez un IDE, le problème est que le fichier a été utilisé par un processus. Comme votre tomcat pourrait utiliser le fichier. Essayez d'identifier ce processus particulier et fermez-le. Cela devrait résoudre votre problème.
J'ai eu le même problème et aucune des solutions ci-dessus a fonctionné pour moi. J'ai supprimé la délinquance dossier. Alors:
git reset --hard
Supprimé tous les fichiers persistants pour nettoyer le statut git, puis fait:
git pull
Ça a finalement marché.
REMARQUE: Si le dossier était, par exemple, un dossier public avec des fichiers de construction, n'oubliez pas de reconstruire les fichiers
FWIW-j'ai eu un problème similaire et je ne suis pas sûr si cela l'a atténué (au-delà du mod d'autorisation): fermeture D'Eclipse qui utilisait la branche avec ce problème.
C'est une vieille question, mais cela peut aider les utilisateurs de Mac.
Si vous copiez des fichiers de Time Machine manuellement, au lieu de les restaurer via Time Machine, il ajoutera ACLs à tout, ce qui peut gâcher vos autorisations.
Par exemple, la section de Cet article qui dit "comment réparer les autorisations de fichiers Mac OS X" montre que "tout le monde" a des autorisations personnalisées, ce qui gâche tout:
Vous devez supprimer les ACL à partir de ces répertoires/fichiers. cette réponse Super Utilisateur y va, Mais voici la commande:
sudo chmod -RN .
Ensuite, vous pouvez vous assurer que vos répertoires et fichiers ont les autorisations appropriées. J'utilise 750
pour les répertoires et les 644
pour les fichiers.
Je reçois cette erreur, et d'autres erreurs git étranges, quand j'ai un serveur en cours d'exécution (dans Intellij). Arrêter le serveur et réessayer la commande git le corrige fréquemment pour moi.
Certains fichiers sont protégés en écriture que même git ne peut pas l'écrire. Modifiez l'autorisation de dossier pour autoriser l'écriture, par exemple sudo chmod 775 foldername
Puis git tire à nouveau
Rappelez-vous également de vérifier l'Autorisation du répertoire racine lui-même!
Vous pouvez trouver:
drwxr-xr-x 9 not-you www-data 4096 Aug 8 16:36 ./
-rw-r--r-- 1 you www-data 3012 Aug 8 16:36 README.txt
-rw-r--r-- 1 you www-data 3012 Aug 8 16:36 UPDATE.txt
Et l'erreur' permission denied ' apparaîtra.
Je pense que le problème peut être avec la propriété du dossier, alors définissez-le sur la propriété actuelle de l'utilisateur
Sudo chown - R your_login_name/chemin/vers / dossier
Vous pouvez trouver la solution ici