gitkeep vs gitignore

Krótko o .gitkeep vs .gitignore.

Chyba każdy developer pracujący z gitem kojarzy plik .gitignore. Jego przeznaczenie jest powszechnie znane i lubiane. Z kolei plik .gitkeep… jest bardziej tajemniczy.

.gitignore

Jak sama nazwa mówi – plik .gitignore wskazuje na pliki, które mają być pomijane przez Gita podczas commitowania. Używamy, kiedy po prostu czegoś nie chcemy wrzucać do repo (np. zawartość /node_modules). To plik konfiguracyjny, jego nazwa “gitignore” jest jedna-jedyna-właściwa, niezbędna do prawidłowego działania pliku, zastrzeżona w dokumentacji Gita (KLIK!).

.gitkeep

Łatwo się domyślić, że ten plik podobnie jak .gitignore będzie zawierał jakieś istotne dla Gita informacje. Idąc dalej: skoro plik ten jest stawiany w opozycji do .gitignore – pewnie ma on za zadanie zawierać pliki, które Git NIE powinien ignorować, w sensie, jak sama nazwa wskazuje, zatrzymywać? Nie!!!

Ale to nie może być takie trudne! No i nie jest.

Plik .gitkeep wskazuje na FOLDERY, które powinny zostać wysłane do repo, nawet kiedy są puste! Git domyślnie pomija puste foldery. Plik .gitkeep zmienia ten mechanizm.

Co ciekawe: nazwa “gitkeep” jest czysto umowna. W sumie możemy nazwać go jakkolwiek, np. “hejhejhejsokoly”. Słowo “gitkeep” jakoś przyjęło się w środowisku, bo raz – analogicznie odpowiada dla powszechnie znanego “gitignore”, a dwa – ładnie brzmi.

Kluczem pliku nie jest nazwa, lecz jego położenie – plik .gitkeep powinien znajdować się właśnie w owym pustym folderze, który chcemy wysłać do repo. Czaicie ten trik? Masz pusty folder, a chcesz go wysłać na repo -> tworzysz tam bylejaki (pusty) plik, aby folder sam w sobie już pusty nie był. Jeśli jesteś uprzejmy dla innych developerów i chcesz, aby oni wiedzieli o co biega z tym plikiem (lub masz code review) – nazywasz owy pusty plik “.gitkeep”. Ot, cała filozofia!

Hack na hacku

Plik .gitkeep znajduje zastosowanie nie tylko dla pustych folderów.

Wyobraź sobie, że masz folder z jakimiś plikami. Jak teraz wrzucić do repozytorium pusty folder, bez plików, które zawiera?

Wpadłam w internetach na takie rozwiązanie: tworzysz standardowo plik .gitkeep w wybranym folderze. Następnie w pliku .gitignore dodajesz taki kawałek kodu:

# ignore files in folder foo
foo/*

# but keep the folder
!foo/.gitkeep

Folder dodany do gita oczywiście nie jest taki pusty, zawiera plik .gitkeep. Jednakże inne pliki są już ignorowane. Sprytne, co nie?

Bez sensu, żebym Wam przepisywała pracę kogoś innego. Więc zapodaję linka – przeznaczenie tego rozwiązania, jego wytłumaczenie oraz przykład znajdziecie TUTAJ.

Wpisz hasło, którego szukasz i naciśnij ENTER, aby je wyszukać. Naciśnij ESC, aby anulować.

Dawaj na górę