Test mit gleichzeitigen Git-Operationen
In den vorherigen Schritten haben wir gesehen, wie die Existenz der Datei .git/index.lock
verhindert, dass Git-Befehle wie git status
ausgeführt werden können. Diese Sperrdatei ist von entscheidender Bedeutung, um Probleme zu vermeiden, wenn mehrere Git-Operationen gleichzeitig versuchen, den Index zu ändern.
Lassen Sie uns ein Szenario simulieren, in dem eine Git-Operation im Gange ist und die Sperrdatei erstellt. Obwohl wir in dieser einfachen Lab-Umgebung nicht zwei Git-Befehle exakt im gleichen Mikrosekunden-Takt ausführen können, können wir das Konzept verstehen. Stellen Sie sich vor, Sie würden einen langlaufenden Git-Befehl ausführen (z. B. eine komplexe Rebase-Operation oder einen großen Commit) und dieser würde unterbrochen werden. Dadurch würde die Sperrdatei zurückbleiben.
Da wir bereits die Datei .git/index.lock
aus den vorherigen Schritten haben, versuchen wir nun, eine weitere Git-Operation auszuführen, wie z. B. das Hinzufügen einer Datei. Zunächst erstellen wir eine neue Datei:
echo "This is another file." > another_file.txt
Jetzt versuchen wir, diese Datei zur Staging-Area hinzuzufügen:
git add another_file.txt
Wahrscheinlich werden Sie die gleiche Fehlermeldung fatal: Unable to create ... .git/index.lock: File exists.
sehen. Dies bestätigt, dass solange die Sperrdatei vorhanden ist, die meisten Git-Befehle, die mit dem Index interagieren, blockiert werden.
Um dieses Problem zu beheben, wenn Sie sicher sind, dass kein anderer Git-Prozess läuft, müssen Sie die Datei .git/index.lock
manuell entfernen. Verwenden Sie den Befehl rm
, um die Datei zu löschen:
rm .git/index.lock
Nachdem die Sperrdatei entfernt wurde, versuchen wir erneut, den Befehl git add
auszuführen:
git add another_file.txt
Diesmal sollte der Befehl ohne die Sperrfehlermeldung ausgeführt werden. Sie können dies überprüfen, indem Sie git status
ausführen:
git status
Sie sollten sehen, dass another_file.txt
unter "Changes to be committed" aufgeführt ist, was bedeutet, dass es erfolgreich zur Staging-Area hinzugefügt wurde.
On branch master
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
new file: another_file.txt
Untracked files:
(use "git add <file>..." to include in what will be committed)
message.txt
Hinweis: Möglicherweise sehen Sie auch message.txt
als "untracked" aufgeführt, wenn Sie es aus dem vorherigen Lab noch nicht committet haben. Dies ist zu erwarten.
Diese Übung zeigt, wie die Datei .git/index.lock
als Schutzmechanismus fungiert und wie Sie sie manuell entfernen können, wenn sie aufgrund einer Unterbrechung zurückbleibt. Seien Sie immer vorsichtig, wenn Sie die Sperrdatei manuell entfernen, und stellen Sie sicher, dass keine anderen Git-Prozesse aktiv sind.