web-dev-qa-db-de.com

Git Push-Fehler: Alte Verknüpfung kann nicht aufgehoben werden (Berechtigung verweigert)

Auf dem Remote-Server habe ich einen Post-Receive-Hook eingerichtet, um eine Überprüfung des Repositorys durchzuführen:

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

Wenn ich jedoch einen Push von meinem lokalen Rechner zum git-Repository auf dem Server mache, erhalte ich die folgenden Fehlermeldungen:

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

Dies erscheint viele Male, eine Fehlermeldung für fast jede Datei.

Ich habe jedoch eine README.txt-Datei, die ich mithilfe von git ändern kann. Hier sind die Berechtigungen:

-rw-r--r--  1 <serverusername>  <serverusername>  2939 Aug  2 10:58 README.txt

Andere Dateien mit genau demselben Besitzer und gleichen Berechtigungen geben mir diesen Fehler.

In einem anderen lokalen Repository für eine andere Website habe ich die Dateien mit dem Benutzernamen meines lokalen Computers. Wenn ich auf den Remote-Server schiebe, respektiert er den Remote-Server-Besitzer der Dateien und funktioniert wie ein Zauber.

Offensichtlich scheint es ein Fehler in Bezug auf Berechtigungen zu sein, aber ich kann keine Möglichkeit finden, den Fehler zu beheben.

151
rfc1484

Wenn Sie die Verknüpfung der Datei aufheben müssen, müssen Sie die Berechtigung 'w' für das Verzeichnis haben, in dem sich die Datei befindet, nicht für die Datei.

265
Jan Marek
Sudo chmod -R ug+w .;

Dieser Befehl würde das Problem beheben. Es gibt Schreibberechtigungen für den Ordner.

Wenn Sie ein beliebiges IDE verwenden, liegt das Problem wahrscheinlich darin, dass die Datei von einem Prozess verwendet wurde. So wie Ihr Tomcat möglicherweise die Datei verwendet. Versuchen Sie, diesen bestimmten Prozess zu identifizieren und schließen Sie ihn. Das sollte dein Problem lösen. 

Ich hatte das gleiche Problem und keine der oben genannten Lösungen funktionierte für mich. Ich habe den fehlerhaften Ordner gelöscht. Dann: 

git reset --hard

Gelöschte Dateien wurden gelöscht, um den Git-Status zu bereinigen. Anschließend wurden folgende Schritte ausgeführt:

git pull

Es hat endlich funktioniert.

HINWEIS: Wenn es sich bei dem Ordner beispielsweise um einen öffentlichen Ordner mit Build-Dateien handelt, denken Sie daran, die Dateien neu zu erstellen

6
wcyn

FWIW - Ich hatte ein ähnliches Problem und ich bin mir nicht sicher, ob dies dadurch gelockert wurde (jenseits des Moduls "Permission"): Eclipse schließen, das den Zweig mit diesem Problem verwendete.

5
cellepo

Dies ist eine alte Frage, kann jedoch Mac-Benutzern helfen.

Wenn Sie Dateien manuell aus Time Machine kopieren, anstatt sie über Time Machine wiederherzustellen, werden ACLs zu allem hinzugefügt, was Ihre Berechtigungen beeinträchtigen kann.

Zum Beispiel zeigt der Abschnitt in diesem Artikel , in dem "So beheben Sie die Mac OS X-Dateiberechtigungen" angegeben ist, dass "Jeder" über benutzerdefinierte Berechtigungen verfügt, was alles durcheinander bringt:

 Bad permissions, from http://dreamlight.com/how-to-fix-mac-os-x-file-permissions

Sie müssen die ACLs aus diesen Verzeichnissen/Dateien entfernen. Diese Super User Antwort geht hinein, aber hier ist der Befehl:

Sudo chmod -RN .

Dann können Sie sicherstellen, dass Ihre Verzeichnisse und Dateien über die richtigen Berechtigungen verfügen. Ich benutze 750 für Verzeichnisse und 644 für Dateien.

3
kylesimmonds
git reset --hard

Arbeitete für mich

2
kreker

Ich erhalte diesen Fehler und andere seltsame Git-Fehler, wenn ein Server (in Intellij) ausgeführt wird. Wenn Sie den Server anhalten und den Befehl git erneut versuchen, wird er häufig behoben.

2
Phil Carter

Einige Dateien sind schreibgeschützt, sodass auch git sie nicht überschreiben kann. Ändern Sie die Ordnerberechtigung, um das Schreiben zuzulassen, z. Sudo chmod 775 Ordnername

Und dann git wieder ziehen

1
Carmela

Denken Sie auch daran, die Erlaubnis des Wurzelverzeichnisses selbst zu prüfen!

Du wirst vielleicht finden:

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

der Fehler "Erlaubnis verweigert" wird angezeigt.

0
cadavre

Ich denke, das Problem kann mit dem Besitz des Ordners zusammenhängen

Sudo chown -R your_login_name /path/to/folder
0
Soumitra Sarkar

Durch das Ziehen ist möglicherweise eine lokale Änderung aufgetreten.

Fügen Sie Ihre nicht verfolgte Datei hinzu:

git hinzufügen.

Änderungen verstecken.

git Stash

Löschen Sie lokale Änderungen.

git Stash Drop

Mit Sudo-Erlaubnis ziehen

Sudo Git ziehen Remote-Zweig

0
user2858738