Перестать следить за изменениями файла
В git есть возможность пометить файл неизмененным. Все изменения в этом файле перестают обновлять связанные с ним git-объекты. Например, это удобно для какого-нибудь конфига или временно добавленных дебаг принтов. Файл престает отображаться в списке измененных файлов.
Но есть два варианта пометить файл неизмененным: assume-unchanged
и skip-worktree
.
assume-unchanged
Этот файл будет считаться неизмененным в локальном индексе. Но только до тех пор пока от сервера не придут изменения для этого файла. Бит неизменяемости снимется и вы получите конфликт слияния.
--assume-unchanged
предпологает, что разработчик не должен изменять этот файл. Например, файлы библиотек или фреймворков.
Перестать отслеживать:
git update-index --assume-unchanged path/to/file
Снова начать отслеживать:
git update-index --no-assume-unchanged path/to/file
skip-worktree
В этом случае файл всегда будет считаться неизмененным, даже когда git
знает, что файл изменился или должен быть изменен (команда reset --hard
). Всегда будет использоваться локальная версия на момент блокировки от изменений. Отключается только явной командой.
--skip-worktree
полезен когда надо заблокировать изменения в файле, который может меняться. Например, какие-либо конфигурационные файлы.
Заблокировать от изменений и отслеживания:
git update-index --skip-worktree path/to/file
Разблокировать и начать отслеживать:
git update-index --no-skip-worktree path/to/file
Добавить алиасы
Надо внести в ~/.gitconfig
в секцию [alias]
:
hide="update-index --assume-unchanged"
unhide="update-index --no-assume-unchanged"
hidden="!git ls-files -v | grep ^h | sed -e 's|h ||'"
lock="update-index --skip-worktree"
unlock="update-index --no-skip-worktree"
locked="!git ls-files -v | grep ^S | sed -e 's|S ||'"