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
materiały pokrewne
Git — ściągawka
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ść
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 wraz 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.