fbpx
devstyle.pl - Blog dla każdego programisty
devstyle.pl - Blog dla każdego programisty
3 minut

Git a ignorowanie plików


11.02.2010

System kontroli wersji zbierający WSZYSTKO z naszego working copy byłby bardzo ciężki w użyciu. Dlatego też każdy z nich w ten czy inny sposób umożliwia ignorowanie wybranej zawartości. Kiedyś pisałem o obsłudze tego scenariusza w SVN (post “Ignorowanie “zewnętrznych” plików w repozytorium SVN“), zobaczmy więc dla porównania jak to jest zrealizowane w Gicie.

Ignorowanie nowych plików

Standardowym zachowaniem jest ignorowanie plików, których w ogóle nie chcemy w swoim repozytorium. Dobrym przykładem takiej treści mogą być katalogi zawierające efekt kompilacji projektu (bin, obj etc…), ustawienia szczególne dla konkretnego użytkownika (pliki *.user) czy kod będący efektem pracy jakiegoś generatora (po co trzymać go w repo, skoro każdy może go sobie odtworzyć lokalnie).

Do tego celu służą w git pliki tekstowe o nazwie .gitignore. Każda linia takiego pliku zawiera wzorzec o określonej składni. Jeśli ścieżka do pliku pasuje do tego wzorca -> jest on pomijany we wszelkich komendach, git zachowuje się tak jakby tego pliku tam nie było. .gitignore może znajdować się w każdym folderze repozytorium, co określa zasięg jego działania. Plik z katalogu głównego odnosi się do całej zawartości repozytorium, podczas gdy instrukcje z katalogów wewnętrznych odnoszą się tylko do ograniczonego przezeń obszaru.

Jako że .gitignore stanowią normalną, pełnoprawną zawartość working copy, są wersjonowane i przechowywane jak każdy inny plik. A co za tym idzie – zdefiniowane w nich reguły współdzielone są przez cały zespół.

Dla zapewnienia użytkownikom jak największej kontroli, Git umożliwia także zdefiniowanie ignorowanych plików w innej lokalizacji, która nie jest ZAWARTOŚCIĄ repozytorium a raczej sprawą jego KONFIGURACJI. Co gdybyśmy do katalogu z projektem zażyczyli sobie wrzucić katalog nude-babes, ot tak, aby zawsze mieć go pod (nomen-omen) ręką? Umieszczanie go w repozytorium raczej nie byłoby mile widziane (chociaż kto wie…:) ), a jawne dodawanie go do ignorów może być nieco niezręczne. Rozwiązanie jest bardzo proste: wystarczy dodać linijkę

  nude-babes/

do pliku .git/info/exclude – i już. Zachowanie takie samo jak byśmy umieścili w “publicznych” .gitignore, a jednocześnie mamy pewność, że nikt nam tego pliku nie podejrzy.

O składni wzorców można poczytać w dokumentacji.

Ignorowanie zmian w śledzonych plikach

Jest też inny scenariusz: z jakichś powodów zmodyfikowaliśmy plik już dodany do repozytorium, ale nie chcemy tych zmian wysyłać. Nie chcemy też, aby żadne raporty czy listy pokazywały nam te zmiany.Na przykład umieściliśmy w kodzie nasz login i hasło w celu automatyzacji logowania do aplikacji podczas testów, ale lepiej żebyśmy tych danych nie upubliczniali.

Tutaj rozwiązanie jest trochę mniej intuicyjne i musiałem się go sporo naszukać. Efekt taki zapewni nam komenda update-index z odpowiednią flagą:

  git-update-index --assume-unchanged <ścieżka>

Od tej pory Git zachowuje się, jakbyśmy nigdy nic w tym pliku nie zmieniali. Wyłączyć to można odwrotnością:

  git-update-index --no-assume-unchanged <ścieżka>

I od teraz jesteśmy całkowitymi panami i władcami zawartości repozytorium:).

0 0 votes
Article Rating
5 Comments
Oldest
Newest Most Voted
Inline Feedbacks
View all comments
munzdr
munzdr
14 years ago

Stary, zacząłeś przynudzać. Proszę zacznij znowu pisać o .NET, programowaniu w ogóle itp.

procent
14 years ago

@munzdr:
Kontrola wersji to moim zdaniem kluczowy aspekt tworzenia oprogramowania, a że mnie ostatnio wzięło na eksperymenty w tym zakresie to i takie treści na blogu. Inne posty są na razie "pending". Ale skoro cie nudzą to mozesz mnie wywalic z RSSa i wysle ci maila jak skoncze pisac o Gicie:). (bo jeszcze kilka notek o tym mam w zanadrzu, pomimo tego ze sa nudne)

szmergiell
14 years ago

@procent Pisz o Gicie, pisz. Jestem coraz bliżej wykorzystywania systemu wersjonowania plików, gdyż jak wiadomo: programiści dzielą się na dwie grupy — ci, którzy robią kopie zapasowe i ci, którzy będą je robili :>
@munzdr — przecież nie musisz czytać wpisów dotyczących Gita, a poczekać na te o .Net.

klm_
14 years ago

@szmergiell – dziela sie tez na takich ktorzy sami odkrywaja nowe rozwiazania/mozliwosci (np. Spolsky) i takich ktorzy tylko czytaja gotowce lub potrafia kopiowac czyjes pomysly/zachowania ;)

noisy
14 years ago

@procent, @munzdr: mnie akurat tematyka gita odpowiada ;) Z resztą… trochę różnorodności przyda się na każdym blogu.

Kurs Gita

Zaawansowany frontend

Szkolenie z Testów

Szkolenie z baz danych

Książka

Zobacz również