Git ignore
Git widzi każdy plik w Twojej kopii roboczej jako należący do jednej z trzech kategorii:
1. śledzony — plik, który został już dodany do przechowalni lub zatwierdzony;
2. nieśledzony — plik, który nie został dodany do przechowalni ani zatwierdzony;
3. ignorowany — plik, który zgodnie z wyraźnym poleceniem Git ma ignorować.
Plikami ignorowanymi są zazwyczaj artefakty kompilacji oraz pliki generowane maszynowo, które mogą pochodzić ze źródła repozytorium lub z innych powodów nie powinny być zatwierdzane. Do typowych przykładów należą:
- pamięci podręczne zależności, takie jak zawartość katalogów
/node_modules
lub/packages
; - skompilowany kod, np. pliki
.o
,.pyc
i.class
; - katalogi wyjściowe kompilacji, np.
/bin
,/out
lub/target
; - pliki generowane w czasie wykonywania, takie jak
.log
,.lock
lub.tmp
; - ukryte pliki systemowe, takie jak
.DS_Store
lubThumbs.db
; - osobiste pliki konfiguracji IDE, takie jak
.idea/workspace.xml
.
Pliki ignorowane są śledzone w specjalnym pliku o nazwie .gitignore
, który jest ewidencjonowany w katalogu głównym repozytorium. W Git nie ma wyraźnego polecenia ignorowania. Jeśli pojawią się nowe pliki, które chcesz ignorować, musisz edytować plik .gitignore
, a następnie zatwierdzić go ręcznie. Nazwy plików w repozytorium są porównywane z wzorcami w pliku .gitignore
w celu określenia, czy powinny być ignorowane.
W tym dokumencie omówimy następujące tematy:
Wzorce ignorowania Git
Plik .gitignore
wykorzystuje wzorce z obsługą symboli wieloznacznych do porównywania z nazwami plików. Możesz tworzyć własne wzorce, używając różnych symboli:
Wzorzec | Przykładowe dopasowania | Objaśnienie* |
---|---|---|
| Przykładowe dopasowania | Objaśnienie* Można poprzedzić wzorzec podwójną gwiazdką, aby dopasować katalogi z dowolnej lokalizacji w repozytorium. |
| Przykładowe dopasowania | Objaśnienie* Można również użyć podwójnej gwiazdki, aby dopasować pliki na podstawie ich nazwy i nazwy ich katalogu nadrzędnego. |
| Przykładowe dopasowania | Objaśnienie* Gwiazdka jest symbolem wieloznacznym, który może zastępować zero lub większą liczbę znaków. |
| Przykładowe dopasowania | Objaśnienie* Poprzedzenie wzorca wykrzyknikiem powoduje jego zanegowanie. Jeśli plik będzie pasował do wzorca, ale równocześnie będzie pasował do zdefiniowanego później w pliku wzorca negacji, nie będzie ignorowany. |
| Przykładowe dopasowania | Objaśnienie* Wzorce zdefiniowane po wzorcu negacji spowodują ponowne zignorowanie wszelkich zanegowanych wcześniej plików. |
| Przykładowe dopasowania | Objaśnienie* Poprzedzenie ukośnikiem umożliwia dopasowanie wyłącznie plików w katalogu głównym repozytorium. |
| Przykładowe dopasowania | Objaśnienie* Znak zapytania zastępuje dokładnie jeden znak. |
| Przykładowe dopasowania | Objaśnienie* Nawiasy kwadratowe można wykorzystać także do dopasowania pojedynczego znaku ze wskazanego zakresu. |
| Przykładowe dopasowania | Objaśnienie* Nawiasy kwadratowe pozwalają dopasować jeden znak ze wskazanego zbioru. |
| Przykładowe dopasowania | Objaśnienie* Wykrzyknik pozwala dopasować dowolny znak nienależący do wskazanego zbioru. |
| Przykładowe dopasowania | Objaśnienie* Zakresy mogą być liczbowe lub alfabetyczne. |
| Przykładowe dopasowania | Objaśnienie* W razie pominięcia ukośnika, wzorzec będzie pasował zarówno do plików, jak i do zawartości katalogów o takiej nazwie. W przykładowych dopasowaniach z lewej strony, zarówno katalogi, jak i pliki o nazwie logs zostaną zignorowane. |
| Przykładowe dopasowania | Objaśnienie* Dołączenie ukośnika wskazuje, że wzorzec jest katalogiem. Cała zawartość dowolnego katalogu o pasującej nazwie w repozytorium — wraz ze wszystkimi plikami i katalogami podrzędnymi — zostanie zignorowana. |
| Przykładowe dopasowania | Objaśnienie* Chwileczkę! Czy |
| Przykładowe dopasowania | Objaśnienie* Podwójna gwiazdka zastępuje zero lub większą liczbę katalogów. |
| Przykładowe dopasowania | Objaśnienie* Symboli wieloznacznych można używać także w nazwach katalogów. |
| Przykładowe dopasowania | Objaśnienie* Wzorce określające plik w konkretnym katalogu są względne w stosunku do katalogu głównego repozytorium. (Można poprzedzić je ukośnikiem, jednak nie wywołuje to żadnego konkretnego skutku). |
** przedstawione powyżej objaśnienia zakładają, że plik .gitignore znajduje się w katalogu najwyższego poziomu repozytorium, zgodnie z konwencją. Jeśli w repozytorium znajduje się wiele plików .gitignore, wystarczy zastąpić w myślach „katalog główny repozytorium” „katalogiem zawierającym plik .gitignore” (i rozważyć ich unifikację dla dobra zespołu).*
Oprócz tych znaków można użyć znaku #, aby dodać komentarze w pliku .gitignore
:
# ignore all logs
*.log
Za pomocą symbolu \ można wprowadzić znaki specjalne wzorca .gitignore
, jeśli pliki lub katalogi je zawierają:
# ignore the file literally named foo[01].txt
foo\[01\].txt
materiały pokrewne
Gałąź Git
POZNAJ ROZWIĄZANIE
Poznaj środowisko Git z rozwiązaniem Bitbucket Cloud
Reguły ignorowania Git zazwyczaj są definiowane w pliku .gitignore
znajdującym się w katalogu głównym repozytorium. Można jednak zdefiniować wiele plików .gitignore
w różnych katalogach w repozytorium. Każdy wzorzec w konkretnym pliku .gitignore
jest testowany w odniesieniu do katalogu zawierającego ten plik. Jednak konwencja i zarazem najprostsze podejście zakłada zdefiniowanie jednego pliku .gitignore
w katalogu głównym. Po zaewidencjonowaniu pliku .gitignore
jest on wersjonowany jak każdy inny plik w repozytorium i udostępniany innym członkom zespołu po wypchnięciu. Zazwyczaj w pliku .gitignore
uwzględnia się tylko wzorce, które będą przydatne dla innych użytkowników repozytorium.
Osobiste reguły ignorowania Git
Można również zdefiniować osobiste wzorce ignorowania dla konkretnego repozytorium w specjalnym pliku znajdującym się w lokalizacji .git/info/exclude
. Nie są one wersjonowane ani dystrybuowane razem z repozytorium, więc jest to odpowiednie miejsce, aby dodać wzorce, które najprawdopodobniej będą przydatne tylko dla Ciebie. Przykładowo, jeśli korzystasz z niestandardowej konfiguracji rejestrowania lub specjalnych narzędzi programistycznych, które generują pliki w katalogu roboczym repozytorium, warto dodać je do lokalizacji .git/info/exclude
, aby zapobiec przypadkowemu zatwierdzeniu ich w repozytorium.
Globalne reguły ignorowania Git
Ponadto można zdefiniować globalne wzorce ignorowania Git dla wszystkich repozytoriów w systemie lokalnym, ustawiając właściwość core.excludesFile
w Git. Plik musisz utworzyć samodzielnie. Jeśli nie wiesz, gdzie umieścić globalny plik .gitignore
, dobrym wyborem będzie katalog główny (w ten sposób można go również łatwo znaleźć później). Po utworzeniu pliku musisz skonfigurować jego lokalizację za pomocą polecenia git config
:
$ touch ~/.gitignore
$ git config --global core.excludesFile ~/.gitignore
Należy uważać, jakie wzorce są wybierane na potrzeby globalnego ignorowania, ponieważ w różnych projektach wykorzystuje się różnego rodzaju pliki. Specjalne pliki systemu operacyjnego (np. .ds_store
i thumbs.db
) lub pliki tymczasowe tworzone przez niektóre narzędzia programistyczne są typowymi kandydatami do globalnego ignorowania.
Ignorowanie wcześniej zatwierdzonego pliku
Aby zignorować plik, który został już wcześniej zatwierdzony, należy go usunąć z repozytorium, a następnie dodać dla niego regułę .gitignore
. Użycie opcji --cached
z poleceniem git rm
oznacza, że plik zostanie usunięty z repozytorium, ale pozostanie w katalogu roboczym jako plik ignorowany.
$ echo debug.log >> .gitignore
$ git rm --cached debug.log
rm 'debug.log'
$ git commit -m "Start ignoring debug.log"
Można również pominąć opcję --cached
, aby usunąć plik zarówno z repozytorium, jak i z lokalnego systemu plików.
Zatwierdzanie ignorowanego pliku
Można wymusić zatwierdzenie w repozytorium zignorowanego pliku za pomocą opcji -f
(lub --force
) użytej z poleceniem git add
:
$ cat .gitignore
*.log
$ git add -f debug.log
$ git commit -m "Force adding debug.log"
Warto rozważyć ten sposób, jeśli zdefiniowano ogólny wzorzec (np. *.log
), ale trzeba zatwierdzić konkretny plik. Lepszym rozwiązaniem jest jednak zdefiniowanie wyjątku od reguły ogólnej:
$ echo !debug.log >> .gitignore
$ cat .gitignore
*.log
!debug.log
$ git add debug.log
$ git commit -m "Adding debug.log"
Takie podejście jest bardziej oczywiste i wprowadza mniej zamieszania dla innych członków zespołu.
Dodawanie do schowka ignorowanego pliku
Polecenie git stash to zaawansowana funkcja Git służąca do tymczasowego „odkładania na półkę” i przywracania zmian lokalnych z możliwością ich ponownego zastosowania w przyszłości. Jak można się spodziewać, domyślnie polecenie git stash
ignoruje pliki ignorowane i dodaje do schowka zmiany wyłącznie w plikach śledzonych przez Git. Można jednak użyć polecenia git stash z opcją --all, aby dodać do schowka zmiany także w ignorowanych i nieśledzonych plikach.
Debugowanie plików .gitignore
Jeśli plik .gitignore
zawiera złożone wzorce lub wzorce są rozproszone w kilku plikach .gitignore
, czasem trudno znaleźć przyczynę ignorowania konkretnego pliku. Polecenie git check-ignore
z opcją -v
(lub --verbose
) pozwala ustalić, który wzorzec powoduje ignorowanie określonego pliku:
$ git check-ignore -v debug.log
.gitignore:3:*.log debug.log
Wyświetlany wynik jest następujący:
<file containing the pattern> : <line number of the pattern> : <pattern> <file name>
Do polecenia git check-ignore
można przekazać wiele nazw plików, a same nazwy nie muszą nawet odpowiadać plikom, które występują 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.