Das Aufheben der Verknüpfung der Datei ist fehlgeschlagen

169

Ich versuche einen Git Pull zu machen und erhalte die folgende Fehlermeldung:

Das Aufheben der Verknüpfung der Datei 'lib / xxx.jar' ist fehlgeschlagen. Soll ich es nochmal versuchen (j / n)

Egal ob ich y oder n wähle, es ist nicht möglich, in einen Zustand zu gelangen, in dem ich ziehen oder drücken kann.

Marko
quelle
Haben Sie überprüft, ob Sie zum Schreiben in diese Datei berechtigt sind?
Raphael Michel
1
Führen Sie die rechte chmodund / oder die chownDatei aus.
Not_a_Golfer
Ich sollte die Rechte haben, sonst werde ich es chown / chmod!
Marko

Antworten:

204

Das bedeutet normalerweise, dass ein Prozess immer noch diese bestimmte Datei verwendet (hat immer noch ein Handle)
(unter Windows ProcessExplorerist es gut, diese Art von Prozess zu verfolgen)

Versuchen Sie, Ihre anderen Programme zu schließen, und versuchen Sie es erneut git pull.

Beachten Sie, dass Sie mit der GIT_ASK_YESNOVariablen eine Alternative haben .


Update Januar 2019:

Dies sollte mit Git 2.21 (Q1 2019) noch behoben werden, da " git gc" und " git repack" die offenen Packdateien, die sie vor dem Entfernen für nicht erforderlich befunden hatten, nicht geschlossen haben, was auf einer Plattform, die nicht in der Lage war, eine geöffnete Datei zu entfernen, nicht funktionierte.
Dies wurde korrigiert.

Siehe Commit 5bdece0 (15. Dezember 2018) von Johannes Schindelin ( dscho) .
(Zusammengeführt von Junio ​​C Hamano - gitster- in Commit 5104f8f , 18. Januar 2019)

gc/ repack: Packungen bei Bedarf freigeben

Unter Windows können Dateien nicht entfernt oder umbenannt werden, wenn noch Handles von einem Prozess gehalten werden.
Um dem abzuhelfen, haben wir die close_all_packs()Funktion eingeführt.

Zuvor haben wir sichergestellt, dass die Packs kurz vor dem Erscheinen freigegeben werden git gc, falls gcnicht mehr benötigte Packs entfernt werden sollen.

Dieser Entwickler hat jedoch vergessen, dass er gcselbst auch Packs loslassen muss, z. B. wenn alle Packs über die --aggressiveOption konsolidiert werden .

Ebenso git repack -dmöchte veraltete Packs löschen und muss daher auch alle Pack-Handles schließen.


Update Januar 2016

Dies sollte in Git 2.8 (März 2016) behoben werden (siehe Git 2.19, Q3 2018 unten).

Siehe Commit d562102 , Commit dcacb1b , Commit df617b5 , Commit 0898c96 (13. Januar 2016) von Johannes Schindelin ( dscho) .
(Zusammengeführt von Junio ​​C Hamano - gitster- in Commit 3c80940 , 26. Januar 2016)

fetch: Pack-Dateien vor dem Sammeln von Müll freigeben

Vor dem automatischen Gc'ing müssen wir sicherstellen, dass die Pack-Dateien freigegeben werden, falls sie neu gepackt und mit Müll gesammelt werden müssen.

Viele Codepfade, die gc --autovor dem Beenden " " ausgeführt werden, haben die Paketdateien zugeordnet und die Dateideskriptoren offen gelassen, was für Systeme, die geöffnete Dateien nicht entfernen können, nicht geeignet war.
Sie schließen jetzt die Packungen, bevor sie dies tun.

Das behebt das git-for-widowsProblem 500 .

Wenn man sich den Test ansieht, der zur Validierung dieses neuen Ansatzes verwendet wird , besteht eine mögliche Problemumgehung (da Git 2.8 noch nicht verfügbar ist) darin, künstlich zu erhöhen gc.autoPackLimit.

git config gc.autoPackLimit 10000
git fetch
git config gc.autoPackLimit 50 # default value

In Git 2.8.4 (Juni 2016) wird das Problem 755 erwähnt, das das Problem ebenfalls lindern sollte ( Commit 2db0641 ):

Stellen Sie sicher, dass temporäre Dateihandles nicht von untergeordneten Prozessen geerbt werden


Tatsächlich ist das oben erwähnte git-for-windowsProblem 500 mit Git 2.19, Q3 2018, wirklich behoben.
Siehe " Git - Verknüpfung der Datei aufheben .idxund .packfehlgeschlagen (das einzige prozesseigene Handle für diese Datei ist git.exe) ".

VonC
quelle
5
Höchstwahrscheinlich läuft eine JVM mit dieser JAR-Datei.
Thorbjørn Ravn Andersen
2
In meinem Fall war es Skype. Ich hatte die Datei zuvor an andere übertragen und einige hatten sie noch nicht akzeptiert oder storniert.
Vivek Kodira
6
Ich fand, dass Windows Explorer der Schuldige ist. Dies lag höchstwahrscheinlich an den Symbolüberlagerungen von TortoiseGit oder an TGitCache. Das Schließen aller geöffneten Ordner hat den Trick getan, aber Sie müssen den Projektordner möglicherweise nur schließen, wenn dieser geöffnet ist.
Allan Bogh
4
In meinem Fall war es VS2013, da es an die offene Lösung gebunden war.
BrotherOdin
2
Explorer.exe war mein Problem - ich habe kein TortoiseGit. Ich habe explorer.exe aus dem Task-Manager beendet und eine neue mit STRG-ALT-ENTF = = Task-Manager => Datei => Neue Aufgabe
ausführen
57

Dies ist eine Windows-spezifische Antwort, daher bin ich mir bewusst, dass sie für Sie nicht relevant ist. Ich füge sie nur zum Nutzen zukünftiger Sucher ein.

In meinem Fall lag es daran, dass ich Git über eine nicht erhöhte Befehlszeile ausführte. "Als Administrator ausführen" hat das Problem für mich behoben.

NeilD
quelle
4
Ich habe dieses Problem unter Windows 7 beim Ziehen festgestellt, und Git hat ein automatisches Packen durchgeführt. Es beschwerte sich über die "idx" -Dateien. Ich habe dann als Administrator ein Konsolenfenster geöffnet und ein git gc ausgeführt, und es gab kein Problem. Das ist also eine gute Lösung.
Grahamesd
1
git gc hat es für mich unter Windows 7 getan. Es ist passiert, dass ich einen git pull on cmder gemacht habe, während ich einen Push auf WebStorm
Alessandro
2
Beeindruckend. Danke NeilD. Es hat es auch für mich behoben. Es wäre schön, GIT ein bisschen mehr auf Windows zu portieren.
Martin Dobšík
Nun ... es wurde vor 6 Jahren gebraucht. Jetzt? Wer weiß? ¯_ (ツ) _ / ¯
NeilD
30

Für mich lag es daran, dass Visual Studio versuchte, alle geänderten Dateien vom Pull neu zu laden. Lassen Sie Visual Studio aktualisieren und dann ausführen git gc.

Paul Nikonowicz
quelle
3
Ähnliches gilt für mich. Eclipse musste geschlossen werden, bevor git gc ausgeführt werden konnte.
Alfoks
5

Unter Windows, das GitHub für Windows verwendet, wurde beim Ausführen ein ähnlicher Fehler in der Shell angezeigt git gc:

Unlink of file '.git/objects/pack/pack-0b40ae7eae9b83edac62e19c07ff7b4c175244f6.idx' failed. Should I try again? (y/n)

Ich habe es gelöst, indem ich die GitHub-GUI geschlossen habe.

Garrett Smith
quelle
2

Versuchen Sie, Apache oder einen anderen Webserver neu zu starten, da möglicherweise einige Ihrer Dateien gesperrt wurden.

Arvind Bhardwaj
quelle
2

Visual Studio und Rubymine wurden geschlossen und der Fehler wurde nicht erneut angezeigt. Einer von ihnen war der Täter.

Bikey
quelle
2

Schließen Sie dann Ihre IDE git pull. Es wird klappen.

Md. Naushad Alam
quelle
1

Ich habe auch dieses Problem, aber ich habe herausgefunden, dass es das UltraEdit im Weg ist, da ich UE verwendet habe, um meinen Eclipse-Arbeitsbereich zu organisieren und zu bearbeiten ~~

Möglicherweise konnte Git die Verknüpfung nicht aufheben, da das UE die alte Version einer bestimmten Datei im Griff hat.

Nachdem ich UltraEdit geschlossen habe, ist das Problem nie wieder aufgetreten.

Ruobin Wang
quelle
1

Dies wurde in meinem Fall durch SimpLESS, den LESS-Compiler, verursacht. Sie müssen es im Systray schließen.

Sebastian Thomas
quelle
0

Das Problem ist, dass Sie ein Programm haben, das diese Dateien verarbeitet. Ich habe einen Vorschlag, dass Sie den Unlocker verwenden sollten, um das Programm zu finden, das es handhabt:

Unlocker

Neid
quelle
0

Ich habe dies unter Windows XP erlebt, sowohl mit der Nachricht in einer Schleife als auch mit der Möglichkeit, durch Antworten gelöscht zu werden.

Das Feststecken in einer Schleife wurde durch Schließen der Git-GUI behoben. (Ich habe git merge -i in einer Bash-Shell ausgeführt.)

Die anderen Vorkommnisse sind möglicherweise auf die große Anzahl von Dateien in meinem Repository zurückzuführen. Es passierte hauptsächlich mit .cod-Dateien, die ich später von der Versionskontrolle ausschließe. (Ich habe einen Grund, sie zunächst zu verfolgen.) Ich glaube, die Ursache hängt möglicherweise mit der Rate zusammen, mit der Git Dateihandles verwendet.

Ich frage mich, ob das Problem, das durch Antworten behoben werden kann, mit Windows zusammenhängt, da zwei frühere Poster Windows erwähnt haben und niemand gesagt hat, dass sie das Problem mit anderen Betriebssystemen haben.

Ivan
quelle
0

Ich hatte PHPStorm geöffnet, geschlossen und alles war gut.

Tisch
quelle
0

Ich hatte das gleiche Problem und habe alle zugehörigen Programme über den Window Task Manager geschlossen. Es funktionierte jedoch immer noch nicht. Der interessante Teil ist, dass ich "Git Rebase" anstelle von "Git Pull" ausgeführt habe und es funktioniert hat!

In-Young Choung
quelle
0

Keine der oben genannten Antworten funktioniert bei mir nicht, aber ich führe den Befehl git gc mit der Option force aus und es hat meinen Fall gelöst.

'git gc --force'

[Windows 7, Als Administrator ausführen => Eingabeaufforderung]

Juha Hanka
quelle
0

Versuchen Sie, den Befehlszeileneditor im Verwaltungsmodus auszuführen, und führen Sie den Befehl aus. Es hilft und löst Probleme. :) :)

Harshad Sindhav
quelle
0

In meinem Fall hatte ich eine alte Methode zum Beschneiden von Tags, die das Problem verursachten. Ich habe es gelöst, indem ich das Original deaktiviert habe:

git config --global --unset remote.origin.fetch '\+refs/tags/\*:refs/tags/\*'

Fügen Sie dies dann hinzu, um gelöschte Zweige auf dem Server zu bereinigen:

git config --global fetch.pruneTags true
Ken
quelle
0

Ich hatte den gleichen Fehler und habe ihn behoben, indem ich die Sonnenfinsternis geschlossen und erneut gezogen habe, während die Datei verwendet wurde.

Außerirdischer
quelle