Close

Git Clean

W tej sekcji skupimy się na szczegółowym omówieniu polecenia git clean. Git clean jest w pewnym stopniu poleceniem „cofnij”. Polecenie git clean można uznać za komplementarne w stosunku do innych poleceń, takich jak git reset i git checkout. Podczas gdy te inne polecenia operują na plikach dodanych wcześniej do indeksu śledzenia Git, polecenie git clean działa na plikach nieśledzonych. Plikami nieśledzonymi są pliki, które zostały utworzone w katalogu roboczym repozytorium, ale nie zostały jeszcze dodane do indeksu śledzenia repozytorium za pomocą polecenia git add.


Aby lepiej zademonstrować różnicę między śledzonymi i nieśledzonymi plikami, przeanalizujmy następujący przykładowy wiersz polecenia:

$ 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
Logo Git
materiały pokrewne

Git — ściągawka

Logo Bitbucket
POZNAJ ROZWIĄZANIE

Poznaj środowisko Git z rozwiązaniem Bitbucket Cloud

W tym przykładzie jest tworzone nowe repozytorium Git w katalogu git_clean_test. Następnie jest tworzony plik tracked_file, który jest dodawany do indeksu Git, a ponadto jest tworzony także plik untracked_file i katalog untracked_dir. Następnie w przykładzie jest wywoływane polecenie git status, które wyświetla wynik, wskazujący wewnętrzny stan śledzonych i nieśledzonych zmian w Git. Przy tym stanie repozytorium możemy wykonać polecenie git clean, aby zademonstrować, do czego służy.

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

W tym momencie wykonanie domyślnego polecenia git clean może zwrócić błąd krytyczny. Na powyższym przykładzie przedstawiono, jak może to wyglądać. Domyślnie Git jest globalnie skonfigurowany w taki sposób, aby z poleceniem git clean przekazywana do zainicjowania była opcja wymuszenia „force”. Jest to ważny mechanizm bezpieczeństwa. Raz wykonanego polecenia git clean nie można cofnąć. Po wykonaniu polecenie git clean spowoduje całkowite usunięcie systemu plików, podobnie jak w przypadku uruchomienia narzędzia wiersza polecenia rm. Przed wykonaniem polecenia upewnij się, że faktycznie chcesz usunąć nieśledzone pliki.

Często używane opcje i zastosowanie


Biorąc pod uwagę poprzednie objaśnienie domyślnego sposobu działania polecenia git clean i związanych z nim zastrzeżeń, poniżej przedstawiono różne przypadki użycia polecenia git clean i powiązane opcje wiersza polecenia wymagane do ich obsługi.

-n

Opcja -n powoduje wykonanie polecenia git clean „na próbę”. Pozwala to wyświetlić, które pliki zostaną usunięte bez ich faktycznego usuwania. Najlepiej jest zawsze najpierw w ten sposób uruchamiać polecenie git clean. Możemy zaprezentować działanie tej opcji na utworzonym wcześniej repozytorium demonstracyjnym.

$ git clean -n
Would remove untracked_file

Wynik wskazuje nam, że plik untracked_file zostanie usunięty po wykonaniu polecenia git clean. Warto zwrócić uwagę, że w wyniku nie został uwzględniony katalog untracked_dir. Domyślnie polecenie git clean nie będzie działać rekurencyjnie na katalogi. Jest to kolejny mechanizm zabezpieczający, który chroni przed przypadkowym trwałym usunięciem.

-f or --force

Opcja force inicjuje faktyczne usunięcie nieśledzonych plików z bieżącego katalogu. Opcja force jest wymagana, o ile opcji konfiguracji clean.requireForce nie ustawiono wartość false. Nie spowoduje ona usunięcia nieśledzonych folderów ani plików określonych w .gitignore. Wykonajmy teraz faktyczne polecenie git clean w naszym przykładowym repozytorium.

$ git clean -f 
Removing untracked_file

Polecenie spowoduje wyświetlenie plików, które zostały usunięte. Widać tutaj, że plik untracked_file został usunięty. Jeśli na tym etapie wykonamy polecenie git status lub ls, zobaczymy, że plik untracked_file został usunięty i nigdzie go nie ma. Domyślnie polecenie git clean -f będzie obejmowało wszystkie nieśledzone pliki w bieżącym katalogu. Dodatkowo można przekazać wartość z opcją -f, aby usunąć konkretny plik.

git clean -f <path>
-d include directories

Opcja -d w poleceniu git clean sygnalizuje, że chcemy usunąć także wszelkie nieśledzone katalogi. Domyślnie to polecenie ignoruje katalogi. Możemy dodać opcję -d do naszych poprzednich przykładów:

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

Wykonaliśmy tutaj polecenie „na próbę”, używając kombinacji -dn, a wynik wskazuje, że usunięty zostanie katalog untracked_dir. Następnie wykonujemy wymuszone usuwanie i w efekcie otrzymujemy informację o usunięciu katalogu untracked_dir.

-x force removal of ignored files

W typowym wzorcu wydawania oprogramowania występuje katalog kompilacji lub dystrybucji, w przypadku którego nie wykonano commita do indeksu śledzenia repozytoriów. Katalog kompilacji będzie zawierał efemeryczne artefakty kompilacji generowane z zatwierdzanego kodu źródłowego. Ten katalog kompilacji zazwyczaj dodaje się do pliku .gitignore repozytorium. Wygodne może być również czyszczenie tego katalogu z innymi nieśledzonymi plikami. Opcja -x polecenia git clean informuje o konieczności uwzględnienia wszelkich ignorowanych plików. Jak w przypadku poprzednich wywołań polecenia git clean, najlepiej jest najpierw wykonać polecenie „na próbę”, zanim ostatecznie usunie się dane. Opcja -x będzie miała zastosowanie do wszystkich ignorowanych plików, a nie tylko do plików właściwych dla kompilacji projektu. Mogą to być elementy niezamierzone, takie jak pliki konfiguracji środowiska IDE ./.idea.

git clean -xf

Podobnie jak opcję -d, opcję -x można przekazywać i łączyć z innymi opcjami. W tym przykładzie przedstawimy kombinację z opcją -f, która usunie wszystkie nieśledzone pliki z bieżącego katalogu, a także wszelkie inne pliki zazwyczaj ignorowane przez Git.

Tryb interaktywny lub interaktywne polecenie git clean


Oprócz wykonywania polecenia doraźnie z poziomu wiersza polecenia, jak przedstawiliśmy powyżej, polecenie git clean oferuje również tryb interaktywny, który można zainicjować, przekazując opcję -i. Wróćmy na moment do przykładowego repozytorium z części wprowadzenia tego dokumentu. W tym stanie początkowym uruchomimy sesję czyszczenia interaktywnego.

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

Zainicjowaliśmy sesję interaktywną, korzystając z opcji -d, więc będzie ona działać również na nasz katalog untracked_dir. Tryb interaktywny spowoduje wyświetlenie monitu What now>, z prośbą o podanie polecenia, które ma zostać zastosowane do nieśledzonych plików. Same polecenia raczej nie wymagają szczególnych wyjaśnień. Przyjrzymy się krótko każdemu z nich w losowej kolejności, począwszy od polecenia 6: help. Wybranie polecenia 6 spowoduje wyświetlenie dalszych objaśnień innych poleceń:

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

Jest oczywiste i spowoduje zamknięcie sesji interaktywnej.

1: clean

Spowoduje usunięcie wskazanych elementów. Gdybyśmy w tym miejscu wykonali polecenie 1: clean zostałby usunięty plik untracked_dir/ untracked_file.

4: ask each

Powyższe polecenie będzie wykonywane dla każdego nieśledzonego pliku i towarzyszyć mu będzie monit Y/N potwierdzający usunięcie. Jest on wyświetlany w następujący sposób:

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

To polecenie wyświetli dodatkowy monit, który pobiera dane wejściowe używane do filtrowania listy nieśledzonych plików.

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/

W tym przypadku wprowadzamy wzorzec z symbolem wieloznacznym *_file, który następnie ogranicza listę nieśledzonych plików jedynie do katalogu untracked_dir.

3: select by numbers

Podobnie jak w przypadku polecenia 2, polecenie 3 ma na celu zawężenie listy nazw nieśledzonych plików. Sesja interaktywna wyświetli monit o numery odpowiadające nazwie nieśledzonego pliku.

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

Podsumowanie


Podsumowując, polecenie git clean jest wygodnym sposobem usuwania nieśledzonych plików z katalogu roboczego repozytorium. Plikami nieśledzonymi są pliki, które znajdują się w katalogu repozytorium, ale nie zostały jeszcze dodane do indeksu repozytorium przy użyciu polecenia git add. Zasadniczy efekt działania polecenia git clean można uzyskać za pomocą polecenia git status oraz natywnych narzędzi do usuwania systemów operacyjnych. Polecenia git clean można używać w połączeniu z poleceniem git reset, aby całkowicie cofnąć wszelkie dodania i commity w repozytorium.


Udostępnij ten artykuł
Następny temat

Zalecane lektury

Dodaj te zasoby do zakładek, aby dowiedzieć się więcej na temat rodzajów zespołów DevOps lub otrzymywać aktualności na temat metodyki DevOps w Atlassian.

Ludzie współpracujący przy ścianie pełnej narzędzi

Blog Bitbucket

Ilustracja DevOps

Ścieżka szkoleniowa DevOps

Demonstracje funkcji z ekspertami Atlassian

Zobacz, jak Bitbucket Cloud współpracuje z Atlassian Open DevOps

Zapisz się do newslettera DevOps

Thank you for signing up