Git Checkout-Warnung: Dateien können nicht freigegeben werden, Berechtigung verweigert

109

Mir ist bekannt, dass es ähnliche Probleme mit git gibt, die sich auf die Warnung "Verknüpfung kann nicht aufgehoben werden" beziehen, aber ich konnte sie nicht verwenden.

Der Hauptunterschied besteht darin, dass dies passiert ist, wenn ich mich in keiner Weise mit Submodulen befasst habe (ich habe mich noch nie mit ihnen befasst). Ich habe einen Zweig namens "Upgrade" erstellt, meine alten Framework-Dateien gelöscht und in die neuen kopiert. Ich habe git add -A verwendet und dann alles festgeschrieben. Als ich versuchte, den Trunk-Zweig auszuchecken, antwortete er mit den folgenden Fehlern:

warning: unable to unlink requirements/views/sk/index.php: Permission denied
warning: unable to unlink requirements/views/sv/index.php: Permission denied
warning: unable to unlink requirements/views/zh/index.php: Permission denied
warning: unable to unlink requirements/views/zh_cn/index.php: Permission denied
warning: unable to unlink requirements/views/zh_tw/index.php: Permission denied

...etc. Es gibt Hunderte von ihnen.

Zuerst dachte ich, dies sei einfach ein Berechtigungsproblem, und fügte dem gesamten Anforderungsverzeichnis rekursiv Gruppenschreibberechtigungen hinzu, aber es gab keine Änderung.

Bearbeiten: Wie in einer Antwort unten vorgeschlagen, habe ich versucht, dasselbe zu tun, aber alles andere geschlossen. Ich hatte nicht mehr Glück als zuvor.

Dieses Problem ist besonders schwächend, da ich nicht zum Trunk wechseln kann, um zur normalen Entwicklung zurückzukehren.

Paragon
quelle
9
Ich löste es mit einem einfachensudo chown -R username directory
Stephen Corwin

Antworten:

84

Normalerweise sehe ich diese Art von Fehler, wenn ein Prozess das Handle dieser Dateien nicht freigibt.

Stellen Sie sicher, dass nichts ausgeführt wird, und versuchen Sie es erneut.

Hinweis: Dies kann auch mit der Art und Weise zusammenhängen, wie Git installiert wurde (unter Windows kann die Benutzerkontensteuerung Probleme verursachen, wenn msysgit in C:\Programoder installiert ist C:\Program Files, siehe " msysgit - sh.exe - fork: Berechtigung verweigert - Vista 64 Bit " und Kommentar 2 von Ausgabe 437 )

Hinweis: Wie unten dargestellt , ist eine häufige andere Ursache des Problems das Problem mit den Rechten im Verzeichnis (falscher Eigentümer), nicht unbedingt in der Datei, deren Verknüpfung nicht aufgehoben werden kann.

VonC
quelle
1
Ich bin auf Ubuntu, um das zu klären. Und leider bin ich nur in diesem Webbrowser und meiner Konsole, in der eine Registerkarte für das entsprechende Verzeichnis geöffnet ist (und zwei ganz anderswo).
Paragon
3
@Paragon: Selbst unter Unix können Probleme auftreten. Andernfalls sollte es sich um eine Berechtigungsfrage handeln. Sie sollten jedoch in der Lage sein, das Auschecken zu erzwingen. git checkout -f master
VonC
2
+1 in meinem Fall war es die Ordnerfreigabe mit einer aktiven VM, die das Verwerfen von Dateien in Git auf dem Hostsystem untersagte. Hat mich verrückt gemacht, also danke für den Hinweis!
Jook
1
Gleicher Fehler. Wenn Sie Process Explorer> Strg + F> <Dateiname> ausführen, wird der Prozess angezeigt, bei dem diese Datei geöffnet bleibt.
Setevoy
1
GitExtensions zeigte diesen Fehler an, als versucht wurde, alle abzurufen ... Ich hatte auch GitKraken geöffnet. Sobald ich GitKraken geschlossen hatte, funktionierte der Abruf ohne Fehler.
mkaj
99

Bei meiner ersten Begegnung mit diesem Fehler hatte mein Benutzer das Recht, in die Datei zu "schreiben", jedoch nicht in das enthaltende Verzeichnis. Überprüfen Sie die Berechtigungen des Verzeichnisses, das die Datei enthält.

Elijah Lynn
quelle
94
Oh mein Gott, zu lustig, ich bin heute auf diese Antwort gestoßen und dann habe ich gemerkt, dass es meine eigene ist! Trotzdem hat es wieder funktioniert!
Elijah Lynn
Ok, es ist mir unter Windows 10 passiert, ich gehe zum Hauptprojektordner. und fügen Sie FÜR ALLE MÖGLICHEN BENUTZER alle Berechtigungen hinzu. Also für System, Administrator, Benutzer, alle Möglichkeiten. Wenden Sie chnages an. Und es scheint irgendwie zu funktionieren, vielleicht mit Windows 10-Update, auch wenn wir keinen neuen Benutzer erstellen, werden wir wie der neue ohne Berechtigungen bedroht. Zum Beispiel habe ich einen Namen S-1-15-32 ..... Nicht den Anmeldenamen, den ich habe, wenn wir unseren Laptop entsperren.
PsychedelicSubstance
30

"Verknüpfung aufheben" bedeutet in diesem Fall im Wesentlichen "Datei löschen".

Dieser Fehler wird nicht von git selbst verursacht. Sie sollten ähnliche Fehler beim manuellen Löschen dieser Dateien in einer Befehlszeile oder einem Datei-Explorer haben.

rtconner
quelle
18
Bei meiner ersten Begegnung mit diesem Fehler hatte mein Benutzer das Recht, in die Datei zu "schreiben", das enthaltene Verzeichnis jedoch nicht.
Elijah Lynn
3
@ Elijah: Danke! Das war es für mich.
Jesse Lee
4
In meinem Fall stellte ich fest, dass die betreffende Datei von einer anderen Anwendung gesperrt wurde. Durch das Schließen der Anwendung wurde die Datei freigegeben und das Auschecken fortgesetzt.
Simon Tewsi
25

Sie haben keine Zugriffsberechtigung, möglicherweise weil Sie nicht der Eigentümer sind.

Beheben Sie das Problem, indem Sie den Eigentümer in sich selbst ändern:

sudo chown -R your_login_name /path/to/folder
Vince Yuan
quelle
2
Auf meinem lokalen Entwicklungscomputer wurden die fraglichen Dateien ursprünglich von meinem lokalen Apache-Server erstellt und gehörten daher dem Benutzer www-data. Sobald ich sie auf mein eigenes Konto gebracht hatte, funktionierte alles wieder normal. "Erlaubnis verweigert" war das eigentliche Problem. Das "Unlikable" war nur ein roter Hering.
Dale Anderson
23

Ich hatte das Problem mit einer default-settings.php-Datei in Drupal 7. In diesem Fall konnte ich sie nicht löschen oder zurücksetzen, wie @rtconner sagte. Ich hatte keine Anwendung oder irgendetwas, das diese Datei verwendete, und es wurde ein Berechtigungsfehler.

Ich chmod 777 *habe dem Ordner hinzugefügt und konnte ihn dann problemlos zurücksetzen.

Rob Erskine
quelle
3
Möglicherweise möchten Sie 777keinen Ordner. Dies hat mein Problem gelöst, aber ich habe es schnell wieder auf den Standardwert zurückgesetzt, nachdem es gelöst wurde. Vielen Dank!
Bram
13

Sie können die Schreibberechtigungen ändern, um dies zu erledigen.

sudo chmod -R ug+w . 

Dieser Befehl 'w'erteilt Berechtigungen für alle Ordner im aktuellen Verzeichnis.

Rajendra Kumar Vankadari
quelle
6

Ich bin auf dieses Problem gestoßen, wenn ich "git repack" oder "git gc" auf meinen OS X-Computern ausgeführt habe, auch wenn ich git mit Administratorrechten ausgeführt habe, und habe es schließlich gelöst, nachdem ich auf diese Seite gestoßen bin: http://hints.macworld.com /comment.php?mode=view&cid=1734

Die Lösung besteht darin, ein Terminal zu öffnen, zu Ihrem Git-Repo zu wechseln, eine CD in den .git-Ordner zu verschieben und dann Folgendes zu tun:

chflags -R nouchg *

Wenn dies das Problem war, funktionieren Ihre Git-Befehle danach wie gewohnt.

Lernen Sie OpenGL ES
quelle
1
Der Macworld-Link ist nicht mehr gültig. Hier ist ein aktualisierter ref: superuser.com/a/40754
webb
4

Für diejenigen, die Intellij verwenden , wie @rtconner sagte, wird dieses Problem nicht durch git verursacht. Da Ihre IDE gesperrt ist, können Git-Dateien die Verknüpfung nicht aufheben. Sie müssen also Ihre IDE schließen und dann versuchen, sie über die Befehlszeile zusammenzuführen (oder was auch immer Sie möchten).

Hesam
quelle
Das war's. Geschah mit Android-Entwicklung, da AndroidStudio Intellij ist.
Reinherd
4

Dies kann auch auftreten, wenn:

  1. Sie haben einen Prozess in einem Docker-Container ausgeführt und:

  2. Einige Dateien wurden durch diesen Prozess generiert und:

  3. Das Ziel der Dateien wird als Volume auf dem Docker-Host bereitgestellt.

  4. Sie werden gitauf dem Docker-Host ausgeführt.


Wenn dies der Fall ist, stellen Sie die Dateien bereit, die Sie festschreiben und ausführen möchten:

git diff --name-only --cached | xargs ls -l 

Dateien, die die oben genannten Kriterien erfüllen, wird Folgendes vorangestellt:

-rw-r--r-- 1 root root ...

Sie gehören rootund sind nicht beschreibbar, was nicht gut ist. So beheben Sie diesen Lauf:

 git diff --name-only --cached | xargs -i sh -c 'sudo chown $USER:$USER {}; chmod +w {}'

Eine sauberere Lösung wäre wahrscheinlich, die --userOption zu verwenden, siehe dies für Docker und dies für Docker Compose .

Davetapley
quelle
2

In meinem Fall war es ein ":" - Zeichen in einem Ordnernamen, das das Auschecken des Git-Repos unter Windows verhinderte.

simonC
quelle
2

auf dem Terminal auf dem Mac mache ich das einfach

Sudo Git Checkout. (um alles aufzuräumen)

und dann

sudo git pull origin

Jry
quelle
2

Ich hatte diesen Fehler in einer virtuellen Maschine (unter Ubuntu), als ich es versuchte git reset --hard.

Das Update sollte einfach git reset --hardvom OS X-Hostcomputer ausgeführt werden.

Henrik N.
quelle
1

Keiner der anderen Vorschläge hat bei mir funktioniert, aber das hat funktioniert:

sudo git reflog expire --expire=now --all && sudo git gc --prune=now --aggressive

0x1mason
quelle
1

In meinem Fall befindet sich mein Windows-Verzeichnis im Dropbox-Ordner. Es ist kein Git-spezifisches Problem. Wenn gerade eine Datei (in diesem Fall die Sperrdatei) erstellt wurde, benötigt Dropbox eine weitere Sekunde, um die Synchronisierung durchzuführen. Während dieser Zeit wird die Datei von Dropbox verwendet, und Programme von Drittanbietern (in diesem Fall Git) können die Datei nicht löschen.

Meine Lösung besteht darin, Dropbox zu beenden und damit die Magie hinter den Kulissen der Dateisynchronisierung von Dropbox zu vermeiden.

Vincent
quelle
0

Ich bin auf diesen Fehler gestoßen und er wird durch einen falschen "Eigentümer / eine falsche Gruppe" der Datei / des Ordners verursacht . Sie müssen Ihren Serveradministrator um Unterstützung bitten, um den "Eigentümer / die Gruppe" dieser Datei / dieses Ordners zu ändern und es erneut mit "git pull" zu versuchen. Oder wenn Sie ein Sudoer sind, zeigen Sie einfach "Ihren Besitzernamen / Ihren Gruppennamen" an und versuchen Sie erneut, Ihr Repository abzurufen. Probieren Sie es aus, es funktioniert 100% für mich!

Jeff Simons Decena
quelle
0

Stellen Sie sicher, dass alle zugehörigen Prozesse oder Threads nicht ausgeführt werden, und führen Sie die Endaufgabe aus oder erzwingen Sie das Beenden nach Bedarf.

Stellen Sie sicher, dass Sie die Eigentumsberechtigung ändern.

Creative_Cimmons
quelle
0

Wenn dies unter Windows geschieht und Sie Tortoisegit verwenden , ist dies im Allgemeinen der Status-Cache von Tortoisegit . Töte diesen Prozess und er wird befreit.

WiseStrawberry
quelle
Sie können den Status-Cache von TortoiseGit tatsächlich vollständig deaktivieren. Dies würde ich im Allgemeinen empfehlen. Es ist oft die Ursache für viele unerwartete Dateisperren, und es ist in der Regel viel schwieriger als es sich lohnt. Verwenden Sie git statusstattdessen einfach über die Befehlszeile.
0

Ich musste nur den Benutzer von Ubuntu auf meinen tatsächlichen Benutzernamen umstellen, unter dem ich zuerst Sachen gemacht hatte. Das hat es behoben.

Marc
quelle
und was ist mit den Windows-Benutzern?
Herr Nentu
Das OP war auf Ubuntu. Ich hätte einen Windows-Thread nicht kommentiert.
Marc
0

Für mich gelöst, indem mein Git-Client (GitExtensions) so eingestellt wurde, dass er immer im Admin-Modus ausgeführt wird.

frodo2975
quelle
0

Ich hatte dieses Problem während der Verwendung IntelliJ (14.1.3 Ultimate). Ich wollte Änderungen in einigen Dateien rückgängig machen.

Gelöst durch Schließen Git Bashin einem anderen Fenster geöffnet - ein weiterer Wiederherstellungsversuch in IntelliJArbeit.

Aal Lee
quelle
0

Ich bin auf diesen Fehler gestoßen, und ich glaube, das Problem war, dass ich beim Starten von Eclipse als Administrator ausgeführt und die Dateien erstellt habe. Daher gehörten sie Admin (was durch Ausführen von 'ls -la' im Ordner festgestellt wurde). Als ich später versuchte, die Dateien zu verstauen, ließ es mich nicht ("Dateien können nicht getrennt werden" und so weiter). Ein chmod für die Dateien zu machen war das Update für mich.

LConrad
quelle
0

Sie müssen lediglich Berechtigungen bereitstellen und den folgenden Befehl im Stammverzeichnis Ihres Projekts ausführen:

    chmod ug+w <directory path>
Hansa
quelle
0

Ich hatte das gleiche Problem, ich habe nur wenige Alternativen ausprobiert, wie andere vorgeschlagen haben.

Wenn Sie dem Ordner .git jedoch die richtige Berechtigung erteilen, können Sie die Probleme beheben.

sudo chown -R "${USER:-$(id -un)}" .git
Raza Rafaideen
quelle
0

In meinem Fall wurde das Berechtigungsproblem durch Festlegen www-dataals Eigentümer gelöst :

chown -R www-data project_folder_name
Avag Sargsyan
quelle
0

Ich denke, es geht um Ihre Dateiberechtigung:

sudo chmod 777 -R <your-git-folder>
Johnny Cage
quelle