266 votes

Erreur Git push : Unable to unlink old (Permission denied)

Sur le serveur distant, j'ai mis en place un hook post-receive afin de faire un checkout git de mon dépôt :

#!/bin/sh
GIT_WORK_TREE=/var/www/<website> git checkout -f

Mais lorsque je fais un push depuis ma machine locale vers le dépôt git du serveur, j'obtiens les messages d'erreur suivants :

remote: error: unable to unlink old '<file>' (Permission denied)

Cela apparaît de nombreuses fois, un message d'erreur pour presque chaque fichier.

Cependant, j'ai un fichier README.txt que je peux modifier en utilisant git, voici ses permissions :

-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 les mêmes permissions, me donnent cette erreur.

Dans un autre dépôt local pour un autre site web, j'ai les fichiers avec le nom d'utilisateur de ma machine locale comme propriétaire, et quand je pousse vers le serveur distant, il respecte le propriétaire des fichiers du serveur distant et fonctionne comme un charme.

De toute évidence, il semble qu'il s'agisse d'une erreur liée aux autorisations, mais je ne trouve pas de moyen de la corriger, avez-vous des suggestions ?

433voto

Jan Marek Points 1364

Lorsque vous devez délier un fichier, vous devez avoir la permission 'w' pour le répertoire dans lequel se trouve le fichier, et non pour le fichier...

82 votes

En effet, c'était le problème, je l'ai corrigé en utilisant sudo chmod -R g+w sur les dossiers de culpabilité.

1 votes

Merci OMG. J'étais tellement ennuyé de penser que les permissions étaient correctes sur le fichier. C'est logique, les mises à jour sont en fait plus du genre mv que de simples écrasements.

1 votes

Changer les permissions du répertoire a fonctionné pour moi (merci !) mais c'est étrange car je pouvais manuellement écraser les fichiers en question via sftp sans aucun problème. Il est étrange que lorsque git a essayé de faire la même chose, il n'a pas pu le faire.

98voto

sudo chmod -R ug+w .;

Cette commande résout le problème. Elle donne les droits d'écriture sur le dossier.

50voto

Si vous utilisez un IDE, le problème est probablement que le fichier a été utilisé par un processus. Par exemple, votre Tomcat pourrait utiliser ce fichier. Essayez d'identifier ce processus particulier et fermez-le. Cela devrait résoudre votre problème.

43voto

BARJ Points 420
sudo chown -R $USER:$USER .

Il a fait le travail pour moi.

0 votes

Cela m'a aidé, merci

34voto

Soumitra Sarkar Points 21

Je pense que le problème peut provenir de la propriété du dossier, il faut donc définir la propriété de l'utilisateur actuel.

sudo chown -R your_login_name /path/to/folder

Vous pouvez trouver la solution [ici][1].

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X