freshidea - stock.adobe.com

git clean: Wie man ungetrackte Dateien in Git entfernt

Der Befehl git clean entfernt alle nicht verfolgten Dateien aus Git-Arbeitsverzeichnissen. Welche Dateien entfernt werden sollen, lässt sich über drei Optionen steuern.

Der Befehl git clean entfernt alle ungetrackten (untracked) Dateien aus dem Git-Arbeitsverzeichnis. Welche nicht getrackten Git-Dateien entfernt werden sollen, kann über die drei Flags oder Switches (Schalter) des Befehls git clean gesteuert werden:

  1. Die Option -f erzwingt die Entfernung von nicht getrackten Dateien. Verzeichnisse und ignorierte Dateien bleiben unberührt.
  2. Die Option -d erzwingt die Entfernung von nicht getrackten Git-Verzeichnisse.
  3. Die Option -x entfernt ungetrackte Dateien, die .gitignore-Einträgen zugeordnet sind.

Entfernen Sie ungetrackte Git-Dateien mit Vorsicht

Vergewissern Sie sich vor dem Ausführen des Befehls git clean und dem Entfernen von nicht getrackten Dateien, dass Sie die Auswirkungen dieses Vorgangs verstehen. Beachten Sie die folgenden Warnungen:

  • Gelöschte, ungetrackte Git-Dateien können nicht wiederhergestellt werden. Der Papierkorb wird umgangen.
  • Der Befehl git clean kann wichtige Eigenschafts- oder Konfigurationsdateien löschen.
  • Führen Sie immer zuerst einen Probelauf durch, bevor Sie ungetrackte Git-Dateien entfernen.
  • Um maximale Kontrolle zu haben, verwenden Sie den Modus git clean interactive von git clean, um bestimmte Dateien zu identifizieren, die gelöscht werden sollen.
  • Manchmal ist ein git stash für einen bestimmten Anwendungsfall besser geeignet als ein git clean.

Die Befehle git clean versus git reset oder git rebase

Manchmal, wenn ein Entwickler seinen Branch-Verlauf bereinigen oder seinen Git-Commit-Verlauf vereinfachen möchte, schaut er sich den Befehl git clean an.

Um Branches zu bereinigen, Git Commits zu ändern oder einen Commit-Verlauf zu bereinigen, sind folgende Optionen besser geeignet:

  • der Befehl git rebase
  • der Befehl git squash
  • der Befehl git stash
  • eine aggressive Git-Speicherbereinigung.

So funktioniert der Befehl git clean

Wenn ein Entwickler ungetrackte Dateien aus einem Git-Arbeitsbereich entfernen möchte, ist der Befehl git clean die einfachste Möglichkeit.

Der Befehl git clean ist stark parametrisiert, sodass er Elemente wie die folgenden nicht entfernt:

  • historisch getrackte Dateien
  • Dateien, die Teil eines bestehenden Commits sind
  • Dateien, die dem Index hinzugefügt wurden
  • neue Verzeichnisse
  • Dateien, die in .gitignore aufgeführt sind

Ein git clean erfordert --force

Eine weitere Einschränkung des Befehls git clean besteht darin, dass Entwickler ihn nur verwenden können, wenn sie entweder den Schalter --force oder --dry-run (-n) angeben.

Wenn Sie den Befehl git clean allein ausführen, schlägt er fehl und es wird eine Fehlermeldung angezeigt.

Hier ist die Fehlermeldung, die angezeigt wird, wenn Sie den force-Schalter nicht mit dem Befehl git clean verwenden:

gme@ubuntu:~/git-clean-example$ git clean
fatal: clean.requireForce neither -i, -n, nor -f given; refusing to clean

Schritte zum Löschen ungetrackter Git-Dateien

Führen Sie die folgenden Schritte aus, um ungetrackte Dateien in Ihrem lokalen Arbeitsbereich ordnungsgemäß zu löschen und mit Git zu bereinigen:

  1. Führen Sie git clean -n aus, um einen Probelauf zu sehen.
  2. Führen Sie git clean -f aus, um das Löschen ungetrackter Dateien zu erzwingen.
  3. Verwenden Sie git clean -f -d, um ungetrackte Verzeichnisse zu entfernen.
  4. Verwenden Sie git clean -f -x, um ungetrackte .gitignore-Dateien zu entfernen.
  5. Fügen Sie den Schalter -i hinzu, um ein interaktives git clean durchzuführen.

Beispiel für git clean-Befehle

Da der git clean-Prozess Dateien dauerhaft löscht, empfiehlt Git, den Befehl zunächst mit der Option -n auszuführen, um einen Probelauf zu erzwingen:

gme@ubuntu:~/git-clean-example$ git clean -n
Would remove clean-cache.ini
Would remove clean-untracked.txt
Would remove clean-stash.html

Wenn die zu löschenden Dateien keine Überraschungen verursachen, kann ein Entwickler den Befehl git clean mit dem Schalter --force ausführen:

gme@ubuntu:~/git-clean-example$ git clean --force
Removing clean-cache.ini
Removing clean-untracked.txt
Removing clean-stash.html

Denken Sie daran, dass git clean nur ungetrackte Dateien entfernt. Um herauszufinden, ob eine Datei getrackt wird oder nicht, können Entwickler den Befehl git status aus dem Repository heraus ausführen.

git clean Befehl
Abbildung 1: Der Befehl git clean löscht nur bestimmte Dateien.

Ungetrackte Git-Dateien entfernen

Standardmäßig werden Verzeichnisse oder Dateien, die in der .gitignore-Datei aufgeführt sind, von git clean nicht berührt.

Mit der Option -d werden Verzeichnisse jedoch gelöscht, und die Option -x erzwingt das Löschen ignorierter Dateien:

gme@ubuntu:~/git-clean-example$ --force -x  -d
Would remove helloworld.class
Would remove new-directory/

git clean -fdx verwenden, um ignorierte Dateien und Verzeichnisse zu entfernen

Entwickler sehen das obige Beispiel möglicherweise in der verkürzten Form git clean -fdx:

gme@ubuntu:~/git-clean-example$ -fdx
Would remove helloworld.class
Would remove new-directory/

Die Befehle git clean und stash

Entwickler sollten den Befehl git clean mit Bedacht einsetzen.

Der Sinn eines verteilten Versionskontrollsystems besteht darin, sicherzustellen, dass Änderungen nie verloren gehen. Das Löschen von Dateien, bevor sie überhaupt getrackt werden, widerspricht eindeutig der Philosophie der Versionskontrolle.

Anstelle von git clean können Entwickler auch git stash verwenden.

Mit dem Befehl git stash können Entwickler Änderungen vorübergehend zurückstellen und diese Änderungen dann jederzeit in der Zukunft wieder in den lokalen Arbeitsbereich einfügen oder anwenden.

Die Möglichkeit, auch nicht getrackte Dateien mit git stash abzulegen, macht es wirklich schwierig, einen aggressiven Aufruf von git clean zu rechtfertigen. Seien Sie daher vorsichtig, wenn Sie den Befehl git clean verwenden, um nicht getrackte Git-Dateien zu entfernen.

Erfahren Sie mehr über Softwareentwicklung