Git: игнорировать отслеживаемые файлы
У меня есть несколько отслеживаемых файлов в хранилище, которые автоматически изменяются при сборке кода. Я не хочу отследить их, я просто не хочу, чтобы они отображались как измененные, и я не хочу, чтобы они ставились при установке git add.
Это возможно?
4 ответа
Конечно.
git update-index --assume-unchanged file
Чтобы отменить и начать отслеживание снова:
git update-index --no-assume-unchanged [<file> ...]
Принятый ответ неверен.--assume-unchanged
только заставляет Git пропускать определенные (иногда дорогостоящие) проверки файловой системы - это не гарантирует, что Git покажет файл как «неизмененный».
Та же команда, но с опцией--skip-worktree
, тем не менее, работает. Поэтому, чтобы отслеживаемый, но измененный файл не отображался как измененный в статусе Git, используйте
git update-index --skip-worktree [<file> ...]
Чтобы отменить и снова начать показывать его как измененный:
git update-index --no-skip-worktree [<file> ...]
См. также процитированное электронное письмо от сопровождающего Git в этом ответе , документацию Git git-update-index и запись в блоге FallenGameR о том, как они реагируют на разные сценарии.
Другой подход заключается в том, чтобы сохранить "отслеживаемый" файл шаблона, а затем иметь его локальные неотслеживаемые копии, например: https://gist.github.com/canton7/1423106
Тогда не будет никаких проблем, если файл будет изменен в git и т. Д., И вы можете использовать.gitignore (наконец) в локальном неотслеживаемом файле.
Другое решение, использующее атрибуты git и%f в команде фильтра:
git config filter.orig.clean "cat %f.orig"
cp filename filename.orig
echo "filename filter=orig" >> .git/info/attributes
echo "filename.orig" >> .git/info/exclude