Aufheben der Verknüpfung der Datei fehlgeschlagen. Soll ich es nochmal versuchen


571

Mit einer der Dateien in meinem lokalen Git-Repository stimmt etwas nicht. Wenn ich versuche, den Zweig zu ändern, heißt es:

Unlink of file 'templates/media/container.html' failed. Should I try again? (y/n)

Was könnte das bedeuten?


1
Schauen Sie sich diese Frage an
RDL

Mögliches Duplikat von [Git rebase hat den Fehler 'Verknüpfung der Datei aufheben fehlgeschlagen'] ( stackoverflow.com/questions/3698369/… )
Josh Lee

Hat die angegebene Antwort für Sie funktioniert
?

1
Überprüfen Sie auch, ob der Git-Prozess Schreibberechtigungen für diese Datei hat.
Boileau

5
Mögliches Duplikat von Unlink der Datei fehlgeschlagen
BartoszKP

Antworten:


751

Dies kann bedeuten, dass ein anderes Programm die Datei verwendet, wodurch verhindert wird, dass git die Datei in das Arbeitsverzeichnis oder aus dem Arbeitsverzeichnis "verschiebt", wenn Sie versuchen, Zweige zu ändern.

Ich habe dies unter Windows Vista geschehen lassen, wo Eclipse das Programm ist, das die Datei "verwendet". Die Datei ist möglicherweise nicht in Eclipse geöffnet, wurde jedoch möglicherweise von einem von Eclipse ausgeführten Prozess geöffnet.

Versuchen Sie in diesem Fall, die Datei in allen Anwendungen zu schließen, die sie möglicherweise verwendet haben. Wenn dies nicht funktioniert, beenden Sie alle Anwendungen, die die Datei möglicherweise geöffnet haben, vollständig.


53
Verwenden Sie unter Windows ProcessExplorer, um herauszufinden, auf welchem ​​Prozess die Datei geöffnet ist.
Dave C

2
Gibt es eine Möglichkeit, ein Skript wie "Wenn diese Datei nicht gelöscht werden kann (z. B. die Datei existiert einfach nicht), überspringen Sie einfach die Datei" zu schreiben.
2xMax

14
In meinem Fall war das Visual Studio und sein Git-Plugin.
Michał Powaga

8
Wenn Sie unter Windows ProcessExplorer nicht verfügbar haben oder nicht herunterladen möchten, können Sie (Windows + R) "resmon" ausführen, zur Registerkarte "CPU" wechseln und den Dateinamen im Textfeld "Zugehörige Kennungen" suchen.
Raphael

6
Wenn Sie verwenden, erhalten GitKrakenSie dies möglicherweise, wenn Sie Befehle wie eine Rebase ausführen
mtpultz

285

Ich hatte dieses Problem und löste es durch den Befehl: git gc Der obige Befehl entfernt temporäre und unnötige Dateien. (Müllsammler.)


43
git pullgit gcautomatisch initiiert und gc versuchte, auf einige .pack- und .inx-Dateien zuzugreifen. Diese wurden vom "Windows Git" -Prozess gehalten, dem der git pullBefehl gehörte. Manuelles Ausführen git gcund dann - git pullbehebt das Problem wirklich.
Nikita

4
Während des Laufens git gcbekam ich wieder den gleichen Fehler, als er gerade gclief
Prakash K

4
"Das manuelle Ausführen von git gc und than-git pull behebt das Problem wirklich." Das hat geholfen. Vielen Dank, Nikita.
Sangam

Das hat mir auch geholfen. Lief dies unter Windows mit Git Bash
Ascalonian

Nach dem Start des Git Pull habe ich diesen Fehler bekommen. Ich drückte STRG + C, um das Ziehen zu stoppen, den Git-GC auszuführen und dann den Git-Pull erneut auszuführen. Das Problem war verschwunden und nichts wurde durch Unterbrechen des Pulls unterbrochen.
Daniel Sp

84

Diese Lösung von hier hat für mich funktioniert:

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.


2
Hat für mich gearbeitet. Lief VS als Administrator und startete dann die Eingabeaufforderung von VS
Sentinel

3
I: eingegeben, Ctrl+Cum die sehr lange Liste nicht verknüpfbarer Dateien zu beenden; gitbash, meine IDE und die GitHub Windows-Anwendung beendet; gitbash im erhöhten Modus "Als Administrator ausführen" neu gestartet; und rannte git gc --aggressive. Es dauerte eine Weile, bis es fertig war, aber ohne Fehler durchgekommen.
Mark McClelland

Wenn Sie glauben, dass dies ein Duplikat ist, sollten Sie es als solches kennzeichnen und keine Antwort hinzufügen, die auf eine andere Antwort verweist
Liam

2
@Liam Diese Frage ist älter, aber diese Antwort war nur auf die andere Frage, und es gibt nicht nur eine Antwort auf diese Frage, was es schwieriger macht, nur eine als Duplikat festzulegen.
September

Das hat bei mir ganz gut funktioniert. Keine der vorherigen Antworten hat dies getan. Vielen Dank.
Roberto Rodriguez

35

Ich bin auf dieses Problem gestoßen, als ich a git pull.

Ich habe es versucht git gcund es hat mein Problem gelöst.


Ich bin auf einem Windows-Computer auf dieses Problem gestoßen, und diese Lösung hat anfangs nicht funktioniert. Sobald ich diesen Befehl jedoch über eine Admin-Eingabeaufforderung ausgeführt habe, wurde mein Problem behoben.
William W

23

In meinem Fall gibt es keine Prozesse, die die Datei oder das Verzeichnis berühren. Möglicherweise passiert es, wenn der Pfad sehr lang ist, weil eine Betriebssystembeschränkung (Windows). Versuchen Sie, das Longpath-Support-Flag in der globalen Git-Konfiguration wie unten angegeben zu aktivieren:

git config --global core.longpaths true

oder versuchen Sie, das Ja / Nein-Antwortflag zu setzen, wenn es für Sie nicht in Konflikt steht

set GIT_ASK_YESNO=false

Wenn der Pfad zu lang ist, habe ich keine erfolgreiche Lösung gefunden.


5
Ich weiß nicht warum, aber das Setzen von "git config --global core.longpaths true" war für mich hilfreich.
Maxim

GIT_ASK_YESNO, kann keine Informationen zu diesem finden. Woher kommt das ?
Majkinetor

siehe zum Beispiel : stackoverflow.com/questions/3698369/… ; Ich weiß jetzt nicht, ob es mit neueren Versionen von git (2.9)
funktioniert

core.longpathsmit zusätzlichem: reset --hard prune gc hat bei mir funktioniert - musste aber AndroidStudio schließen, um die
eingebauten


10

Dies kann für jemanden nützlich sein. Wenn all das bei Ihnen nicht funktioniert hat, gehen Sie folgendermaßen vor:

  1. Schließen Sie Ihre IDE (meine war Eclipse, nicht sicher, ob sie für Intellij und andere gilt) oder eine andere App, die möglicherweise git verwendet.

  2. Öffnen Sie git über die Befehlszeile (in meinem Fall hatte ich git bash) und führen Sie es git gcwie von anderen erwähnt aus.

Das hat die Magie für mich getan.


Dies ist die einzige Antwort, die in meinem Fall mit Android Studio
0101100101

10

Da ich Gitkraken und die Eingabeaufforderung verwende, bin ich auf dasselbe Problem gestoßen . Und dann git gcführe ich Befehl aus, es hat mein Problem gelöst. Also bin ich glücklich und möchte einige der Punkte teilen, die hilfreich sein könnten.

Was git gcwird tun?

git gc Entfernen nicht erreichbarer Objekte, die möglicherweise aus früheren Aufrufen von git add erstellt wurden.

Wann laufen git gc?

In doc wird den Benutzern empfohlen, diese Aufgabe regelmäßig in jedem Repository auszuführen, um eine gute Speicherplatzauslastung und eine gute Betriebsleistung zu gewährleisten.

Wie mache ich es automatisch konfigurierbar?

Einige git-Befehle führen möglicherweise automatisch git gc aus. Einzelheiten finden Sie unter der Flagge --auto unten. Wenn Sie wissen, was Sie tun, und alles, was Sie möchten, ist, dieses Verhalten ohne weitere Überlegungen dauerhaft zu deaktivieren, tun Sie es einfach

git config --global gc.auto 0

8

In meinem Fall (Win8.1, TortoiseGit wird ausgeführt) war es der Prozess "TortoiseSVN-Statuscache", der die Datei sperrte.

Durch das Töten konnte ich "git gc" ohne weitere Probleme ausführen. Der obige Prozess wird von TortoiseGit gestartet, sodass Sie ihn nicht manuell neu starten müssen.


7

Ich hatte diese Art von Problem unter Windows 7 und es stellte sich heraus, dass dies auf einen verwaisten git.exeProzess zurückzuführen war.

Öffnen Sie zur Lösung den Task-Manager und beenden Sie alle git.exeProzesse.

Da gitBefehle nur von kurzer Dauer sind, sollten Sie normalerweise keine git.exeim Task-Manager sehen. Wenn sie dort sind, bedeutet dies normalerweise, dass etwas nicht stimmt, und Sie sollten diese Prozesse beenden.


7

Ich habe dieses Problem in Windows. Ich habe meine IDE (Android Studio) geschlossen und in der Git-Shell JA ausgewählt. Es funktionierte.


5

Unter Windows 8: Ich habe git gc ausgeführt und es wurde angegeben, dass git gc bereits ausgeführt wurde. Ich habe git gc --force ausgeführt und der Garbage Collector wurde ausgeführt.

Ich könnte dann Zweige wechseln und ohne Probleme zusammenführen, versuchen Sie es mit git gc --force.

Vielleicht hat der GC-Prozess aus dem einen oder anderen Grund nicht anmutig aufgehört.


Es ist auch gültig für Windows 10.
Oguzhan

4

Ich hatte dieses Problem mit .tmpDateien im /.git/objects/packOrdner. Ich glaube, während eines Push- oder Pull-Vorgangs ist etwas fehlgeschlagen. Deshalb habe ich diese temporären Dateien entfernt und den HEAD auf mein letztes Commit zurückgesetzt. Ich bin mir nicht sicher, ob dies empfohlen wird, aber es hat bei mir funktioniert. Gab git count-objects -vmir auch eine Liste der .tmpDateien, die nicht in den Pack-Ordner gehörten.

Oder um die J / N-Nachrichten in Windows zu unterdrücken git open cmd.exeund auszuführen:

SETX GIT_ASK_YESNO false

hier zu sehen: https://twitter.com/petercamfield/status/494805475733807104


Nach dem Durchlauf git gc, git count-objects -vhilft Überbleibsel Temp Objekte in dem bei der Identifizierung packOrdner.
Mistaecko

4

Ich konnte dieses Problem lösen, indem ich Powershell als Administrator und von dort aus öffnetegit checkout <branch_name>


Danke @ bar-horing. Dies hat mir geholfen, es als Berechtigungsproblem zu identifizieren. Nachdem ich die Windows-Berechtigung für diesen Ordner festgelegt hatte, funktionierte es.
Kumar

3

Ich hatte das gleiche Problem, als ich 'Git Pull' machte. Ich habe den manuellen Housekeeping-Git-Befehl 'git gc' ausprobiert und mein Problem behoben.


4
Dies ist zwar ein Versuch einer Antwort, fügt jedoch nichts hinzu, was nicht bereits durch andere Antworten (wie diese ) abgedeckt ist . Wenn Sie versuchen zu bestätigen, dass diese Lösung funktioniert, oder dem Autor dieser Antwort danken möchten, senden Sie bitte keine Antwort, um dies zu tun. Nachdem Sie sich einen besseren Ruf erarbeitet haben , erhalten Sie ausreichende Berechtigungen , um die von Ihnen gewünschten Antworten zu verbessern. Dies ist die Art und Weise, wie Sie sich bei Stack Overflow bedanken.
Scott Weldon


2

Nachdem git clean -fich verschiedene Lösungen ausprobiert hatte, half es mir schließlich .

BEARBEITEN: Ich habe das Problem einige Male erneut getroffen - das Schließen aller von git abhängigen Prozesse scheint zu helfen (wie gitbash, Eclipse IDE usw.)


2

Wie oben erwähnt, hält etwas anderes die Dateien. Die Sache ist, dass das Programm für uns nicht verdächtig aussieht. Ich habe versucht, einen Git-Pull von der Konsole zu machen, während GitKraken geöffnet wurde. Das Schließen von GitKraken hat das Problem behoben.


2

Nach dem Befehl ausführen

git rm -rf foo.bar

Ich sehe Fehler

Unlink of file 'foo.bar' failed. Should I try again? (y/n)

Weil ein anderes Programm diese Datei verwendet . Wenn ich beispielsweise eine Java-Webanwendung im Debug-Modell oder eine Webanwendung auf einem Server ausführe, kann ich keine Protokolldatei löschen. Deaktivieren Sie den Anwendungsserver (oder deaktivieren Sie den Debug-Prozess) und versuchen Sie es erneut

git rm -rf foo.bar

Ich sehe, dass die Datei gelöscht wurde.


1

Dies kann ein separates Gitk-Fenster sein, das ausgeführt wird, um einen Git-Verlauf anzuzeigen.

Schließen Sie einfach das Fenster, um das Problem zu beheben.


1

Ich bin auf dieses Problem gestoßen, bei dem git Bash und Eclipse EGit gleichzeitig ausgeführt wurden. Lösung: Schließen Sie Eclipse. Es würde auch nicht schaden, git gcwie @khilo erwähnt zu laufen .



1

Ich bin in Windows auf dieses Problem gestoßen. Vielleicht möchten Sie die Git-Bash als Administrator ausführen und dann die gewünschten Befehle ausführen, die das Problem für mich gelöst haben.


1

Wenn Sie eine Webanwendung entwickeln, besteht ein häufiger Grund darin, das Herunterfahren des Servers zu vergessen. Dies kann beispielsweise ein einfacher Node.js-Prozess sein, oder unter Windows wird Ihr IIS-Prozess als Hintergrundprozess unauffälliger ausgeführt.


1

Ich habe jeden einzelnen Tipp auf dieser Seite ausprobiert und nichts hat geholfen. Ich habe ein git fetchund ein git reset --hard origin/developmentgab mir den Knickfehler. Ich konnte nicht auf das letzte Commit zurücksetzen.

Was half, war das Auschecken eines anderen Zweigs und dann das Auschecken des vorherigen Zweigs. Sehr seltsam, aber es hat das Problem gelöst.


1

Wenn das Schließen Ihrer IDE und das Ausführen verschiedener hier aufgelisteter Git-Befehle nicht hilft, versuchen Sie, alle ausgeführten Java-Prozesse manuell zu beenden. Ich hatte wahrscheinlich einen Java-Prozess von Eclipse übrig, der irgendwie eine Konfigurationsdatei offen hielt.


1

Wenn Sie Docker verwenden und Windows 10 ausführen, möchten Sie möglicherweise die Container stoppen, in denen die Datei möglicherweise ausgeführt wird. Führen Sie aus, um den Status Ihrer Container anzuzeigen

docker ps -a

Um sie zu stoppen, laufen Sie einfach

docker stop <container name or container id>

Dies hat bei mir funktioniert, da ich meine lokalen Dateien mit einer .sh-Datei ausführe


1

Arbeitete für mich, versuchte an Fenstern:

Stoppen Sie die Ausführung Ihres Servers über die IDE oder schließen Sie die IDE

Intellij / Ecllipse oder eines, es wird funktionieren.


0

Unter Windows wurde dieser Fehler bei git cloneeinem (ziemlich großen) Repo festgestellt. SmartGit geschlossen und meine Backup-Software (CrashPlan) angehalten, und danach hat es funktioniert. Ich bin mir nicht sicher, welcher der beiden den Trick gemacht hat, aber wenn einer von beiden läuft, könnte dies auch für Sie tun.


0

Ich hatte das gleiche Problem beim Ausführen eines Git-Pulls und wie oben angegeben, lag es an einem Programm, das diese Dateien enthielt und kein Git-Pull zuließ. Das Schließen des Programms hat geholfen. Normalerweise hält die IDE (wie Eclipse), von der aus die Dateien eingecheckt werden, sie im Hintergrund. Das gleiche zu schließen und Git Pull erneut auszuführen, löste das Problem für mich.


0

Ich hatte den gleichen Fehler und das Schließen der App, bei der die Datei geöffnet war, löste ihn. Ich konnte zurückgehen und "Y" drücken.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.