Close

git clean

In diesem Abschnitt geht es um die genaue Beschreibung des Befehls git clean. Der Befehl git clean ermöglicht in gewisser Weise das Rückgängigmachen. git clean ist eine Art Ergänzung zu anderen Befehlen wie git reset und git checkout. Während sich die anderen Befehle auf Dateien auswirken, die dem Git-Tracking-Index zuvor hinzugefügt wurden, spricht der Befehl git clean nicht verfolgte Dateien an. Nicht verfolgte Dateien sind Dateien, die im Arbeitsverzeichnis deines Repositorys erstellt, aber noch nicht mit dem Befehl git add dem Tracking-Index deines Repositorys hinzugefügt wurden.


Die folgenden Befehlszeilen veranschaulichen den Unterschied zwischen verfolgten und nicht verfolgten Dateien:

$ 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 <file>..." to unstage)

new file: tracked_file

Untracked files: (use "git add <file>..." to include in what will be committed) untracked_dir/ untracked_file
Git-Logo
Zugehöriges Material

Git-Merkzettel

Bitbucket-Logo
Lösung anzeigen

Git kennenlernen mit Bitbucket Cloud

In diesem Beispiel wird ein neues Git-Repository im Verzeichnis git_clean_test erstellt. Anschließend wird eine tracked_file erstellt und dem Index hinzugefügt. Zusätzlich werden eine untracked_file und ein untracked_dir angelegt. In dem Beispiel wird dann git status ausgeführt, woraufhin der interne Git-Status von verfolgten und nicht verfolgten Änderungen angezeigt wird. In diesem Repository-Zustand können wir git clean ausführen, um zu zeigen, was dieser Befehl bewirkt.

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

An dieser Stelle kann der Standard-Befehl git clean einen schwerwiegenden Fehler verursachen. Das Beispiel oben zeigt, wie das aussehen kann. Die globale Konfiguration von Git sieht vor, dass git clean standardmäßig mit der Option "force" ausgeführt wird. Das ist ein wichtiger Sicherheitsmechanismus. Wenn git clean am Ende ausgeführt wird, ist es nicht mehr rückgängig zu machen. Wird es vollständig ausgeführt, bewirkt git clean ein hartes Löschen des Dateisystems, ähnlich wie durch Ausführen der Befehlszeilenoption "rm". Stelle also sicher, dass du die nicht verfolgten Dateien löschen willst, bevor du den Befehl ausführst.

Allgemeine Optionen und Anwendungen


Nachdem wir erklärt haben, was mit git clean normalerweise geschieht und was zu beachten ist, wollen wir nun ein paar Anwendungsfälle für git clean und die dafür erforderlichen Befehlszeilenoptionen veranschaulichen.

-n

Die Option -n führt einen "Probelauf" mit git clean durch. So siehst du, welche Dateien entfernt werden, ohne dass sie tatsächlich entfernt werden. Ein Probelauf von git clean ist eine bewährte Methode. Diese Option lässt sich anhand unseres zuvor erstellten Demo-Repositorys demonstrieren.

$ git clean -n
Would remove untracked_file

Anhand des Outputs erkennen wir, dass die untracked_file beim Ausführen von git clean entfernt wird. Beachte, dass untracked_dir hier nicht genannt wird. git clean wird standardmäßig nicht rekursiv auf Verzeichnisse angewendet. Auch das ist ein Sicherheitsmechanismus, der dafür sorgt, dass nichts versehentlich dauerhaft gelöscht wird.

-f or --force

Die Option "force" leitet die Löschung nicht verfolgter Dateien vom aktuellen Verzeichnis aus ein. Wenn die Konfigurationsoption clean.requireForce auf "false" gesetzt ist, musst du "force" nicht verwenden. Die in der Datei .gitignore angegebenen nicht verfolgten Ordner und Dateien werden nicht entfernt. Führen wir git clean direkt einmal in unserem Beispiel-Repository aus.

$ git clean -f 
Removing untracked_file

Auf den Befehl hin werden die gelöschten Dateien ausgegeben. Wie du sehen kannst, ist die untracked_file entfernt worden. Führst du an dieser Stelle git status aus oder gibst ls ein, wird angezeigt, dass untracked_file gelöscht worden und nicht zu finden ist. git clean -f wird standardmäßig auf alle nicht verfolgten Dateien im aktuellen Verzeichnis angewendet. Zusätzlich kannst du einen < path >-Wert zur Option -f eingeben, um eine bestimmte Datei zu löschen.

git clean -f <path>
-d include directories

Mit der Option -d wird git clean mitgeteilt, dass du nicht verfolgte Verzeichnisse entfernen willst. Standardmäßig werden Verzeichnisse hierbei 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 mithilfe der Kombination -dn einen Testdurchlauf ausgeführt. Seine Ausgabe besagt, dass das Entfernen von untracked_dir ansteht. Dann führen wir eine erzwungene Bereinigung durch und erhalten als Ausgabe, dass untracked_dir entfernt wird.

-x force removal of ignored files

Ein gängiges Muster für Software-Releases ist ein Build- oder Distributionsverzeichnis, das nicht in den Verfolgungsindex der Repositorys übertragen wird. Das Build-Verzeichnis enthält vorübergehende Build-Artefakte, die aus einem committeten Quellcode generiert werden. Dieses Build-Verzeichnis wird normalerweise der .gitignore-Datei nachholen. Es kann sinnvoll sein, dieses Verzeichnis auch mit anderen nicht verfolgten Dateien zu bereinigen. Die Option -x weist git clean an, auch alle ignorierten Dateien einzubeziehen. Wie bei vorherigen git clean-Aufrufen ist es empfehlenswert, vor dem endgültigen Löschen zunächst einen Testlauf durchzuführen. Die Option -x wird auf alle ignorierten Dateien angewendet und nicht nur Projekt-Build-spezifische. Dies könnten unbeabsichtigte Dinge wie ./.idea IDE-Konfigurationsdateien sein.

git clean -xf

Die Option -x kannst du, wie auch -d, zusammen mit anderen Optionen anwenden und kombinieren. In dieser Verbindung mit -f werden aus dem aktuellen Verzeichnis nicht verfolgte Dateien sowie auch all die Dateien entfernt, die Git normalerweise ignoriert.

Interaktiver Modus oder "git clean interactive"


Neben einzelnen Befehlen, die wir bisher ausgeführt haben, verfügt git clean auch über einen "interaktiven" Modus, den du mit der Option -i einleiten kannst. Werfen wir einen Blick zurück auf das Beispiel-Repository vom Anfang. In diesem anfänglichen Zustand starten wir eine interaktive Bereinigungssitzung.

$ 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>

Da wir die interaktive Sitzung mit der Option -d eingeleitet haben, wird dabei auch unser untracked_dir einbezogen. Im interaktiven Modus wirst du mit What now> dazu aufgefordert, einen Befehl auf die nicht verfolgten Dateien anzuwenden. Die Befehle selbst sind selbsterklärend. Werfen wir einen kurzen Blick darauf und beginnen wir einfach mal mit dem Befehl 6: help. Wenn du Befehl 6 auswählst, werden die anderen Befehl anschließend erklärt:

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

Es liegt auf der Hand: Dieser Befehl beendet die interaktive Sitzung.

1: clean

So kannst du die angegebenen Elemente löschen. Wenn wir 1: clean an dieser Stelle ausführen, wird untracked_dir/ untracked_file entfernt.

4: ask each

wird für jede nicht verfolgte Datei wiederholt. Zum Löschen erscheint eine Y/N (Ja/Nein)-Aufforderung. Das sieht in etwa so 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/ [y/N]? N
Remove untracked_file [y/N]? N
2: filter by pattern

Zeigt eine zusätzliche Eingabeaufforderung an, die Eingaben zum Filtern der Liste mit nicht verfolgten Dateien entgegennimmt.

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 folgen wir dem Muster des Platzhalters *_file. Daraufhin wird die Liste nicht verfolgter Dateien auf untracked_dir beschränkt.

3: select by numbers

Mit Befehl 3 kannst du, ähnlich wie mit Befehl 2, mehr Informationen zur Namensliste der nicht verfolgten Dateien anzeigen lassen. Bei der interaktiven Sitzung werden Zahlen zu den Namen der nicht verfolgten Dateien ausgegeben.

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


Zur Erinnerung: git clean ist ein praktischer Befehl zum Entfernen nicht verfolgter Dateien im Arbeitsverzeichnis eines Repositorys. Nicht verfolgte Dateien sind Dateien im Arbeitsverzeichnis deines Repositorys, die noch nicht per git add dem Index deines Repositorys hinzugefügt wurden. Mit git clean erzielst du im Allgemeinen dasselbe Ergebnis, als würdest du git status und die nativen Tools zum Entfernen verwenden, die dein Betriebssystem dir bietet. Wenn du git clean und git reset miteinander kombinierst, kannst du sämtliche Ergänzungen und Commits in einem Repository vollständig rückgängig machen.


Diesen Artikel teilen
Nächstes Thema

Lesenswert

Füge diese Ressourcen deinen Lesezeichen hinzu, um mehr über DevOps-Teams und fortlaufende Updates zu DevOps bei Atlassian zu erfahren.

Mitarbeiter arbeiten mit unzähligen Tools zusammen

Bitbucket-Blog

Abbildung: DevOps

DevOps-Lernpfad

Demo Den: Feature-Demos mit Atlassian-Experten

So funktioniert Bitbucket Cloud mit Atlassian Open DevOps

Melde dich für unseren DevOps-Newsletter an

Thank you for signing up