Jasne, robię to od czasu do czasu za pomocą
git update-index --assume-unchanged [<file> ...]
Aby cofnąć i ponownie rozpocząć śledzenie (jeśli zapomniałeś, które pliki nie były śledzone, zobacz to pytanie ):
git update-index --no-assume-unchanged [<file> ...]
Odpowiednia dokumentacja :
- [no-] zakłada-niezmieniona
Po określeniu tej flagi nazwy obiektów zarejestrowane dla ścieżek nie są aktualizowane. Zamiast tego ta opcja ustawia / wyłącza bit „zakładaj niezmieniony” dla ścieżek. Gdy bit „zakładaj niezmieniony” jest włączony, użytkownik obiecuje nie zmieniać pliku i pozwala Gitowi założyć, że działający plik drzewa odpowiada temu, co jest zapisane w indeksie. Jeśli chcesz zmienić działający plik drzewa, musisz odznaczyć bit, aby powiedzieć Gitowi. Czasami jest to pomocne podczas pracy z dużym projektem w systemie plików, który ma bardzo wolne lstat(2)
wywołanie systemowe (np. Cifs).
Git zawiedzie (z gracją) na wypadek, gdyby musiał zmodyfikować ten plik w indeksie, np. Podczas scalania w zatwierdzeniu; dlatego w przypadku zmiany założonego pliku, który nie został wyśledzony, należy ręcznie obsłużyć sytuację.
Niepowodzenie z wdziękiem w tym przypadku oznacza, że jeśli są jakieś zmiany w górę do tego pliku (uzasadnione zmiany itp.), Gdy wykonasz ściąganie, powie:
$ git pull
…
From https://github.com/x/y
72a914a..106a261 master -> origin/master
Updating 72a914a..106a261
error: Your local changes to the following files would be overwritten by merge:
filename.ext
i odmówi połączenia.
W tym momencie możesz temu zaradzić, cofając lokalne zmiany, oto jeden ze sposobów:
$ git checkout filename.ext
następnie pociągnij ponownie i ponownie zmodyfikuj plik lokalny lub –no-assume-unchanged
możesz ustawić, a następnie możesz wykonać normalne ukrywanie i scalanie itp.