Git: игнорировать отслеживаемые файлы

182

У меня есть несколько отслеживаемых файлов в хранилище, которые автоматически изменяются при сборке кода. Я не хочу отследить их, я просто не хочу, чтобы они отображались как измененные, и я не хочу, чтобы они ставились при установке git add.

Это возможно?

haymansfield
источник
7
возможный дубликат git: могу ли я зафиксировать файл и игнорировать изменения содержимого?
Сиро Сантилли 郝海东 冠状 病 六四 事件 法轮功
5
Если эти файлы автоматически генерируются при сборке, они не должны отслеживаться в git.
Кодирование
Вот краткое руководство по gitignore, которое вам может пригодиться: learningpassion.wordpress.com/2016/06/17/…
джокер

Ответы:

283

Конечно.

git update-index --assume-unchanged [<file> ...]

Чтобы отменить и начать отслеживание снова:

git update-index --no-assume-unchanged [<file> ...]
Ник Вейс
источник
3
Что будет с файлами в этом состоянии, если я внесу в них изменения?
Хеймансфилд
2
@haymansfield страница справки для команды говорит следующееGit will fail (gracefully) in case it needs to modify this file in the index e.g. when merging in a commit; thus, in case the assumed-untracked file is changed upstream, you will need to handle the situation manually.
Пархам
3
Любой способ подать заявку --assume-unchangedна клонирование? Чтобы у всех пользователей были файлы, но они не видели локальных изменений в них.
Готье
10
@Tyler - нет, если файл отслеживается с помощью git, он всегда отслеживается, даже если этот файл появляется в .gitignore. Мой пример использования - это что-то вроде «вот базовый шаблон файла, в котором вы храните свои учетные данные, а теперь никогда не фиксируете его»
Джон V
5
@watbywbarif У меня есть команда, git update-index --no-assume-unchanged $(git ls-files $(git rev-parse --show-toplevel))заданная как псевдоним git. Всякий раз, когда я подозреваю, что это некоторые из этих махинаций, я просто делаю это.
Филипп Карфин
6

Другой подход (из уже удаленного ответа Сета Робертсона, но я нашел его полезным, поэтому воскресил его) состоит в том, чтобы сохранить «отслеживаемый» файл шаблона, а затем иметь его локальную неотслеживаемую версию, например: «config.sample.ini» или « config.ini.template "см. https://gist.github.com/canton7/1423106 для полного примера.

Тогда не будет никаких проблем, если файл будет изменен в git и т. Д., И вы можете использовать .gitignore (наконец) для локальных неотслеживаемых файлов.

rogerdpack
источник
5

Другое решение, использующее атрибуты 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
koct9i
источник
16
Не могли бы вы рассказать подробнее о том, что это значит и что он делает случайно?
rogerdpack
это добавляет фильтр для файла, который читает содержимое файла ".orig" с оригинальным текстом
koct9i