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:

1$ mkdir git_clean_test
2$ cd git_clean_test/
3$ git init .
4Initialized empty Git repository in /Users/kev/code/git_clean_test/.git/
5$ echo "tracked" > ./tracked_file
6$ git add ./tracked_file
7$ echo "untracked" > ./untracked_file
8$ mkdir ./untracked_dir && touch ./untracked_dir/file
9$ git status
10On branch master
11
12Initial commit
13
14Changes to be committed: (use "git rm --cached <file>..." to unstage)
15
16new file: tracked_file
17
18Untracked files: (use "git add <file>..." to include in what will be committed) untracked_dir/ untracked_file

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.

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

1-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.

1$ git clean -n
2Would 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.

1-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.

1$ git clean -f 
2Removing 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ść <path> z opcją -f, aby usunąć konkretny plik.

1git clean -f <path>
2-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:

1$ git clean -dn
2Would remove untracked_dir/
3$ git clean -df
4Removing 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.

1-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.

1git 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.

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

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

Jest oczywiste i spowoduje zamknięcie sesji interaktywnej.

11: 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.

14: 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:

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

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

1Would remove the following items:
2  untracked_dir/  untracked_file
3*** Commands ***
4    1: clean                2: filter by pattern    3: select by numbers    4: ask each             5: quit                 6: help
5What now> 2
6  untracked_dir/  untracked_file
7Input ignore patterns>> *_file
8  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.

13: 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.

1Would remove the following items:
2  untracked_dir/  untracked_file
3*** Commands ***
4    1: clean                2: filter by pattern    3: select by numbers    4: ask each             5: quit                 6: help
5What now> 3
6    1: untracked_dir/    2: untracked_file
7Select items to delete>> 2
8    1: untracked_dir/  * 2: untracked_file
9Select items to delete>>
10Would remove the following item:
11  untracked_file
12*** Commands ***
13    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.

Polecane dla Ciebie

Blog Bitbucket

Ścieżka szkoleniowa DevOps

Dowiedz się więcej o Git

Znajdź więcej przewodników i zasobów Git w tym centrum.

Morty Proxy This is a proxified and sanitized view of the page, visit original site.