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_moduleslub/packages; - skompilowany kod, np. pliki
.o,.pyci.class; - katalogi wyjściowe kompilacji, np.
/bin,/outlub/target; - pliki generowane w czasie wykonywania, takie jak
.log,.locklub.tmp; - ukryte pliki systemowe, takie jak
.DS_StorelubThumbs.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.
Blog Bitbucket
Ścieżka szkoleniowa DevOps