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


182

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

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



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 (наконец) для локальных неотслеживаемых файлов.


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

16
Не могли бы вы рассказать подробнее о том, что это значит и что он делает случайно?
rogerdpack

это добавляет фильтр для файла, который читает содержимое файла ".orig" с оригинальным текстом
koct9i
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.