Git #11: Czasowe wyłaczenie śledzenia pliku

Jak czasowo wykluczyć ze śledzenia plik w Git’cie? Jeśli jeszcze nie znasz komendy update-index, z flagami –skip-worktree oraz assume_unchanged — koniecznie przeczytaj!

Git 11: czasowe wyłączenie śledzenia pliku

Git 11: czasowe wyłączenie śledzenia pliku


Pracując nad projektem z wykorzystaniem Git’a, czasami spotykamy się z sytuacjami, kiedy umieszczenie ścieżki do pliku w .gitignore nie wystarcza. Co, jeśli potrzebujemy wyedytować plik, którego zmian nie chcemy wysyłać na serwer, gdyż umieszczamy tam na przykład swoje dane. Oczywiście pewnym rozwiązaniem jest każdorazowo ręczne dodawanie plików do przygotowywanego commit’a lub cofanie zmian wybranego pliku bezpośrednio przed commit’owaniem. Może i jest to jakieś rozwiązanie, które sprawdzi się, gdy mamy do wyłączenia jeden plik, lub gdy wykonanych zmian na plikach wykluczonych już potem nie potrzebujemy. Jednak co jeśli takich plików mamy kilka, a kilka innych planujemy wrzucić do repo? Poniżej przedstawię dwa rozwiązania, które rozwiązują poniższy problem.

WYŁĄCZANIE PLIKÓW ZE ZMIANAMI

Najpierw zajmijmy się pierwszą możliwością oznaczania plików, których nie chcemy wrzucać do repozytorium, ze względu na wprowadzone zmiany. W tym celu najlepiej wykorzystać git update-index, z flagą –skip-worktree. Pełna składania polecenia to:

qabrio@test:~$ git update-index --skip-worktree [file_name]

Dzięki temu, w indeksie Git’a, plik zostanie oznaczony specjalną flagą — S. Spowoduje to pominięcie go podczas analizowania drzewa katalogów. Aby przywrócić plik do śledzenia, należy skorzystać z polecenia:

qabrio@test:~$ git update-index --no-skip-worktree [file_name]

Należy jednak przy tym pamiętać, że polecenie jedynie przywraca plik do śledzenia, a nie usuwa wykonanych w nim zmian, które trzeba ręcznie przywrócić. W celu sprawdzenia które pliki mają status S, należy skorzystać z poniższego polecenia, którego rezultatem będzie wykaz wszystkich śledzonych plików z konkretnymi flagami, gdzie H oznacza śledzony, a S — do pominięcia.

qabrio@test:~$ git ls-files -v
H test_file_1
S test_file_2
H test_file_3

WYŁĄCZENIE PLIKÓW BEZ ZMIAN

Drugą możliwością jest oznaczenie pliku, który z założenia nie powinien być zmieniany. Służy to głównie w celu przyspieszenia działania pracy mechanizmów Git’a, poprzez oznaczenie bardzo dużych plików. Jest to nic innego jak informacja dla systemu kontroli wersji, że „plik ten można pominąć, bo i tak tam nie ma zmian”. Polecenie to ma analogiczną składnię do tego z poprzedniego akapitu:

qabrio@test:~$ git update-index --assume-unchanged [file_name]

Do przywrócenia śledzenia pliku należy użyć:

qabrio@test:~$ git update-index --no-assume-unchanged [file_name]

W analogiczny sposób również sprawdzimy, które pliki są oznaczone jako unchanged, czyli flagą h:

qabrio@test:~$ git ls-files -v
H test_file_1
S test_file_2
h test_file_3

ALIASY

Dobrą praktyką jest stworzenie aliasów do wszystkich wymienionych wyżej poleceń, gdyż same w sobie są one znacznej długości. Przykładowymi aliasami mogą być odpowiednio ignore, unignore, oraz show_tree dla przeglądania plików. Aliasy Git’a zostały opisane w jednym z akapitów artykułu:

Jak widzimy umieszczenie pliku w .gitignore, to nie jedyna możliwość, aby sprawić, że plik będzie pomijany w mechanizmach Git’a.

close

Newsletter