it-swarm.com.de

Git umbenennen von index.lock zu index ist fehlgeschlagen

Mit dem GitHub-Windows-Client habe ich ein sync ausgeführt, um die Remote-Änderungen auf meinen lokalen Computer zu übertragen. Bevor ich die Synchronisierung abschließe, hatte ich keinen Speicherplatz mehr und die Synchronisierung schlug fehl. Jetzt habe ich scheinbar eine Reihe von lokalen Änderungen, die eigentlich aus Origin stammen. Ich habe versucht, Git zu ziehen, bekam aber:

C:\Users\Tom\SourceLog [master +4 ~26 -0 !]> git pull
Updating b3a86e1..5afd74f
error: Your local changes to the following files would be overwritten by merge:
        SourceLog.Interface/IChangedFile.cs
        SourceLog.Interface/ILogEntry.cs
        ...
Please, commit your changes or stash them before you can merge.
error: The following untracked working tree files would be overwritten by merge:
        Lib/MSBuildExtensionPack/4.0.6.0/Ionic.Zip.dll
        Lib/MSBuildExtensionPack/4.0.6.0/MSBuild.ExtensionPack.dll
        ...
Aborting

Also versuche ich jetzt die lokalen Änderungen zu verwerfen, aber ich bekomme:

C:\Users\Tom\SourceLog [master +4 ~26 -0 !]> git checkout -- .
Rename from '.git/index.lock' to '.git/index' failed. Should I try again? (y/n) y
Rename from '.git/index.lock' to '.git/index' failed. Should I try again? (y/n) n
fatal: unable to write new index file

Wie kann ich das aufräumen? (Ich hatte vor dem Start der Synchronisierung keine lokalen Änderungen.)

Aktualisieren

Der Kopf kann nicht zurückgesetzt werden ..

C:\Users\Tom\SourceLog [master +4 ~0 -0 !]> git reset head
Rename from '.git/index.lock' to '.git/index' failed. Should I try again? (y/n) y
Rename from '.git/index.lock' to '.git/index' failed. Should I try again? (y/n) n
error: Could not write new index file.
fatal: Could not reset index file to revision 'head'.
25
Tom Hunter

Sieht aus, als hätte der folgende Prozess die .git\index-Datei gesperrt:

ssh-agent.exe
C:\Users\Tom\AppData\Local\GitHub\PortableGit_8810fd5c2c79c73adcc73fd0825f3b32fdb816e7\bin\ssh-agent.exe

Ich habe den Prozess abgebrochen und git reset HEAD ausgeführt und sieht so aus, als wäre ich jetzt wieder normal.

25
Tom Hunter

In meinem Fall wurde dies durch die Verwendung des gleichen Git-Repos aus den Eingabeaufforderungen des Admin und Nicht-Admin verursacht. Als letztes git pull von admin cmd stammte, wurde die index von ihm erstellt, und dann hatte nicht-admin cmd keine ausreichenden Berechtigungen, um es zu ändern.

Meine Lösung erstellte die index neu (wobei der Arbeitsbaum intakt blieb):

del .git\index
git reset --mixed head
7
Dimagog

Ich habe diese Rename from '.git/index.lock'...-Nachricht beim Ausführen des Befehls gesehen

git checkout -b my-branch

Die Lösung für mich bestand darin, die Befehlszeile als admin auszuführen.

Im Einzelnen habe ich die ausgezeichnete Anwendung cmder als Nicht-Administrator verwendet, was dazu führte, dass die Umbenennungsnachricht angezeigt wurde. Durch Ausführen von cmder als Administrator und anschließender erneuten Überprüfung der Installation hat es gut funktioniert.

2
Jason Evans

Ich habe index und index.lock (Im Ordner .git) Entfernt und git checkout . Ausgeführt, um die Änderungen rückgängig zu machen und zu lösen, aber wenn ich die Änderungen festschreiben wollte, habe ich hätte git add -A nach git commit -m "description" ausgeführt

1
krekto

Git 2.10 (3. Quartal 2016, 4 Jahre später) sollte die Situation unter Windows verbessern

Siehe commit 05d1ed6 (23. August 2016) von Ben Wijen (Ben) .

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

Wenn der Index gesperrt ist und untergeordnete Prozesse den Handle an .__ erben. die Sperre und der übergeordnete Prozess möchte die Sperre vor dem .__ entfernen. Kindprozess wird beendet, unter Windows gibt es ein Problem: Es funktioniert nicht weil Dateien nicht gelöscht werden können, wenn ein Prozess sie im Griff hat.

Das Symptom:

Rename from 'xxx/.git/index.lock' to 'xxx/.git/index' failed.
Should I try again? (y/n)

Das Erstellen von untergeordneten Prozessen mit bInheritHandles==FALSE würde nicht funktionieren Da keine Dateizugriffspunkte vererbt werden würden, nicht einmal die hStdXxx-Handles in STARTUPINFO (stdin/stdout/stderr).

Das Öffnen jeder Datei mit O_NOINHERIT funktioniert auch nicht, wie z. git-upload-pack erwartet geerbte Dateihandles.

Dies lässt uns den einzigen Ausweg: Das Erstellen von temporären Dateien mit dem Flag O_NOINHERIT. Dieses Flag ist jedoch Windows-spezifisch.
Für unsere Zwecke ist es äquivalent zu O_CLOEXEC (was auf Windows nicht existiert), also lassen Sie uns temporäre Dateien mit dem O_CLOEXEC-Flag und .__ öffnen. Zuordnung dieses Flags zu O_NOINHERIT unter Windows .

1
VonC

Beenden Sie entweder den Prozess, der die Datei sperrt, oder löschen Sie den .git-Ordner rm -rf .git, und starten Sie erneut mit git init

0
Robot Boy

Ich hatte ein ähnliches Problem mit Git. Die Lösung für mich bestand darin, die Lösung lokal über den Windows-Explorer zu löschen und das Repository anschließend erneut zu klonen. Dadurch wurden alle Dateien entfernt, die lokal auf meinem Computer gespeichert waren 

Rename from '.git/..' to '.git/..' failed. Should I try again? (y/n) y

weggehen. Nachdem ich das Respository geklont hatte, versuchte ich es erneut (was in meinem Fall GIT COMMIT war) und der Fehler trat nicht wieder auf. 

Das Problem entstand, als ich versuchte, einen Zusammenführungskonflikt zu lösen, der nach dem Zusammenführen eines Funktionszweigs mit dem Entwicklungszweig auftrat.

0
joey

Ich schien ein Problem zu haben, als ich meine Niederlassung mit dem Meister zusammenlegte. Meine Lösung besteht darin, alle Lösungen auszuschalten, die sich öffnen, und meinen Zweig auf Origin zurückzusetzen und erneut zu starten.

0
Tiffany Chau

Es kann ein richtiges Problem sein. Versuchen Sie, Ihr Terminal als Administrator anstatt als Benutzer auszuführen. Arbeitete für mich

0
HamzDiou

Ich benutze Schildkröte Git. Ich habe gerade einen neuen Windows Explorer geöffnet und das Problem behoben. (Für die Befehlszeile kann es passieren, dass Git eine neue Shell öffnet).

0
Mark Seagoe

Ich habe diesen Fehler mehrmals hintereinander erhalten, als git reset HEAD in einem Projekt ausgeführt wurde, das in einem Google Drive-Ordner gespeichert ist. Nach einigen Minuten ist das Problem jedoch behoben. 

0
Brian Burns

Um lokale Änderungen zu verwerfen, gehen Sie 

git reset HEAD

Dann checke dein altes Commit aus, lösche das neue und ziehe noch einmal.

git checkout "hashOld"
git branch -d "hashNew"
git pull
0
James McDonnell