In diesem Abschnitt werden wir uns auf eine detaillierte Diskussion des Befehls git clean konzentrieren. Git clean ist in gewisser Weise ein „Rückgängig“-Befehl. Git clean kann als Ergänzung zu anderen Befehlen wie git reset und git checkout betrachtet werden. Während diese anderen Befehle auf Dateien wirken, die zuvor in den Git-Verfolgungsindex aufgenommen wurden, wirkt der Befehl git clean auf nicht verfolgte Dateien ein. Ungetrackte Dateien sind Dateien, die im Arbeitsverzeichnis Ihres Projektarchivs erstellt wurden, aber noch nicht mit dem Befehl git add in den Tracking-Index des Projektarchivs aufgenommen wurden. Um den Unterschied zwischen verfolgten und nicht verfolgten Dateien zu verdeutlichen, betrachten Sie das folgende Befehlszeilenbeispiel:

 $ mkdir git_clean_test $ cd git_clean_test/ $ git init . Initialized empty Git repository in /Users/kev/code/git_clean_test/.git/ $ echo "tracked" > ./tracked_file $ git add ./tracked_file $ echo "untracked" > ./untracked_file $ mkdir ./untracked_dir && touch ./untracked_dir/file $ git status On branch master Initial commit Changes to be committed: (use "git rm --cached ..." to unstage) new file: tracked_file Untracked files: (use "git add ..." to include in what will be committed) untracked_dir/ untracked_file

Das Beispiel erstellt ein neues Git-Repository im Verzeichnis git_clean_test. Anschließend wird ein tracked_file erstellt, das dem Git-Index hinzugefügt wird, außerdem wird ein untracked_file erstellt und ein untracked_dir. Das Beispiel ruft dann git status auf, das den internen Status von Git mit verfolgten und nicht verfolgten Änderungen anzeigt. In diesem Zustand des Repositorys können wir den Befehl git clean ausführen, um seinen Zweck zu demonstrieren.

 $ git clean fatal: clean.requireForce defaults to true and neither -i, -n, nor -f given; refusing to clean

An dieser Stelle kann die Ausführung des Standardbefehls git clean einen schwerwiegenden Fehler verursachen. Das obige Beispiel zeigt, wie dies aussehen kann. Git ist standardmäßig so konfiguriert, dass git clean mit der Option „force“ gestartet werden muss. Dies ist ein wichtiger Sicherheitsmechanismus. Wenn git clean endgültig ausgeführt wird, kann dies nicht rückgängig gemacht werden. Wenn git clean vollständig ausgeführt wird, wird eine harte Löschung des Dateisystems vorgenommen, ähnlich wie bei der Ausführung des Befehlszeilenprogramms rm. Vergewissern Sie sich, dass Sie die nicht verfolgten Dateien wirklich löschen wollen, bevor Sie es ausführen.

Allgemeine Optionen und Verwendung

Nach der vorangegangenen Erläuterung des Standardverhaltens von git clean und der Vorbehalte werden im Folgenden verschiedene Anwendungsfälle von git clean und die zugehörigen Befehlszeilenoptionen, die für ihre Ausführung erforderlich sind, demonstriert.

-n

Die Option -n führt einen „Trockenlauf“ von git clean durch. Dies zeigt Ihnen, welche Dateien entfernt werden sollen, ohne dass sie tatsächlich entfernt werden. Es ist empfehlenswert, immer zuerst einen Trockenlauf von git clean durchzuführen. Wir können diese Option in dem zuvor erstellten Demo-Repository demonstrieren.

 $ git clean -n Would remove untracked_file

Die Ausgabe zeigt uns, dass untracked_file entfernt wird, wenn der Befehl git clean ausgeführt wird. Beachten Sie, dass untracked_dir in der Ausgabe nicht aufgeführt ist. Standardmäßig wird git clean nicht rekursiv auf Verzeichnisse wirken. Dies ist ein weiterer Sicherheitsmechanismus, um ein versehentliches dauerhaftes Löschen zu verhindern.

 -f or --force

Die Option force leitet das tatsächliche Löschen von nicht verfolgten Dateien aus dem aktuellen Verzeichnis ein. Force ist erforderlich, wenn die Konfigurationsoption clean.requireForce nicht auf false gesetzt ist. Nicht verfolgte Ordner oder Dateien, die mit .gitignore angegeben wurden, werden nicht entfernt. Führen wir nun einen Live git clean in unserem Beispiel-Repo aus.

 $ git clean -f Removing untracked_file

Der Befehl gibt die entfernten Dateien aus. Sie können hier sehen, dass untracked_file entfernt wurde. Die Ausführung von git status an dieser Stelle oder ein ls zeigt, dass untracked_file gelöscht wurde und nirgendwo mehr zu finden ist. Standardmäßig wirkt git clean -f auf alle nicht verfolgten Dateien im aktuellen Verzeichnis. Zusätzlich kann mit der Option -f ein Wert übergeben werden, der eine bestimmte Datei entfernt.

 git clean -f -d include directories

Die Option -d teilt git clean mit, dass auch alle nicht verfolgten Verzeichnisse entfernt werden sollen, standardmäßig werden Verzeichnisse ignoriert. Wir können die Option -d zu unseren vorherigen Beispielen hinzufügen:

 $ git clean -dn Would remove untracked_dir/ $ git clean -df Removing untracked_dir/

Hier haben wir einen „Trockenlauf“ mit der Kombination -dn durchgeführt, der ausgibt, dass untracked_dir entfernt werden soll. Dann führen wir eine erzwungene Bereinigung aus und erhalten die Ausgabe, dass untracked_dir entfernt wurde.

 -x force removal of ignored files

Ein gängiges Muster für die Veröffentlichung von Software ist ein Build- oder Distributionsverzeichnis, das nicht in den Tracking-Index der Repositories aufgenommen wird. Das Build-Verzeichnis enthält ephemere Build-Artefakte, die aus dem übergebenen Quellcode erzeugt werden. Dieses Build-Verzeichnis wird normalerweise der Datei repositories .gitignore hinzugefügt. Es kann sinnvoll sein, dieses Verzeichnis auch mit anderen nicht getrackten Dateien zu bereinigen. Die Option -x weist git clean an, auch alle ignorierten Dateien einzuschließen. Wie bei früheren Aufrufen von git clean empfiehlt es sich, vor dem endgültigen Löschen zunächst einen „Trockenlauf“ durchzuführen. Die Option -x wirkt sich auf alle ignorierten Dateien aus, nicht nur auf projektspezifische Dateien. Dies könnte unbeabsichtigte Dinge wie ./.idea IDE-Konfigurationsdateien sein.

 git clean -xf 

Wie die Option -d kann -x mit anderen Optionen übergeben und kombiniert werden. In diesem Beispiel wird eine Kombination mit -f demonstriert, die nicht verfolgte Dateien aus dem aktuellen Verzeichnis sowie alle Dateien, die Git normalerweise ignoriert, entfernt.

Interaktiver Modus oder git clean interactive

Zusätzlich zur Ad-hoc-Befehlszeilenausführung, die wir bisher demonstriert haben, verfügt git clean über einen „interaktiven“ Modus, den Sie durch Übergabe der Option -i einleiten können. Lassen Sie uns noch einmal das Beispiel-Repository aus der Einleitung dieses Dokuments betrachten. In diesem Ausgangszustand starten wir eine interaktive, saubere Sitzung.

 $ git clean -di Would remove the following items: untracked_dir/ untracked_file *** Commands *** 1: clean 2: filter by pattern 3: select by numbers 4: ask each 5: quit 6: help What now>

Wir haben die interaktive Sitzung mit der Option -d gestartet, so dass sie auch auf unser untracked_dir wirkt. Im interaktiven Modus wird eine What now>-Eingabeaufforderung angezeigt, die einen Befehl zur Anwendung auf die nicht verfolgten Dateien verlangt. Die Befehle selbst sind ziemlich selbsterklärend. Wir sehen sie uns kurz in zufälliger Reihenfolge an und beginnen mit dem Befehl 6: help. Wenn Sie den Befehl 6 wählen, werden die anderen Befehle näher erläutert:

 What now> 6 clean - start cleaning filter by pattern - exclude items from deletion select by numbers - select items to be deleted by numbers ask each - confirm each deletion (like "rm -i") quit - stop cleaning help - this screen ? - help for prompt selection
 5: quit

Ist einfach und beendet die interaktive Sitzung.

 1: clean

Löscht die angegebenen Elemente. Wenn wir an dieser Stelle 1: clean ausführen würden, würde untracked_dir/ untracked_file entfernt werden.

 4: ask each

Wird jede nicht verfolgte Datei durchlaufen und eine Y/N Aufforderung zum Löschen anzeigen. Es sieht wie folgt aus:

 *** Commands *** 1: clean 2: filter by pattern 3: select by numbers 4: ask each 5: quit 6: help What now> 4 Remove untracked_dir/ ? N Remove untracked_file ? N
 2: filter by pattern

Es wird eine zusätzliche Eingabeaufforderung angezeigt, die Eingaben entgegennimmt, mit denen die Liste der nicht verfolgten Dateien gefiltert wird.

 Would remove the following items: untracked_dir/ untracked_file *** Commands *** 1: clean 2: filter by pattern 3: select by numbers 4: ask each 5: quit 6: help What now> 2 untracked_dir/ untracked_file Input ignore patterns>> *_file untracked_dir/

Hier geben wir das Platzhaltermuster *_file ein, das die Liste der nicht verfolgten Dateien auf untracked_dir einschränkt.

 3: select by numbers

Ähnlich wie bei Befehl 2 wird mit Befehl 3 die Liste der nicht verfolgten Dateinamen verfeinert. Die interaktive Sitzung fragt nach Zahlen, die einem nicht verfolgten Dateinamen entsprechen.

 Would remove the following items: untracked_dir/ untracked_file *** Commands *** 1: clean 2: filter by pattern 3: select by numbers 4: ask each 5: quit 6: help What now> 3 1: untracked_dir/ 2: untracked_file Select items to delete>> 2 1: untracked_dir/ * 2: untracked_file Select items to delete>> Would remove the following item: untracked_file *** Commands *** 1: clean 2: filter by pattern 3: select by numbers 4: ask each 5: quit 6: help

Zusammenfassung

Zusammenfassend lässt sich sagen, dass git clean eine bequeme Methode ist, um nicht verfolgte Dateien im Arbeitsverzeichnis eines Repos zu löschen. Unverfolgte Dateien sind solche, die sich im Verzeichnis des Repos befinden, aber noch nicht mit git add in den Index des Repos aufgenommen wurden. Insgesamt kann der Effekt von git clean mit git status und den systemeigenen Löschwerkzeugen erreicht werden. Git clean kann zusammen mit git reset verwendet werden, um alle Hinzufügungen und Übertragungen in einem Repository vollständig rückgängig zu machen.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.