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?

Pol
quelle
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.

Melissa
quelle
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.)

khilo
quelle
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.

sepehr
quelle
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.

Rahul Chandran
quelle
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.

andhdo
quelle
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
11

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

Mukesh Yadav
quelle
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.

Papigee
quelle
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
Ramesh Papaganti
quelle
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.

nickD
quelle
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.

jakub.g
quelle
7

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

vovahost
quelle
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.

Mark Howard
quelle
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

Blaubeeren
quelle
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>

Bar Horing
quelle
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.

mach es richtig
quelle
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.)

FazoM
quelle
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.

100r
quelle
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.

Mach Nhu Vy
quelle
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.

weinerk
quelle
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 .

jhyry
quelle
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.

Pablo Fallas
quelle
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.

alex3683
quelle
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.

T3rm1
quelle
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.

Marc.S
quelle
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

Messers Schneide
quelle
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.

Codiee
quelle
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.

Frederik Struck-Schøning
quelle
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.

Somesh Rao
quelle
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.

Paul McDaniel
quelle