Как игнорировать файлы, находящиеся в репозитории?

У меня есть файл (config.php), который уже зафиксирован в репозитории Git, но я хочу игнорировать его локально, то есть я хочу, чтобы этот файл оставался в репозитории, но заставлял Git игнорировать любые изменения в нем.

Я помещаю файл в .gitignore, но он по-прежнему помечен как измененный, и Git все еще пытается зафиксировать в нем изменения каждый раз, когда я что-то фиксирую. Любая идея, что я упускаю или делаю неправильно?


person prcaen    schedule 29.08.2011    source источник
comment
пожалуйста, добавьте свой .gitignore-файл - таким образом мы можем увидеть какие-либо проблемы, связанные с ним.   -  person Lars    schedule 29.08.2011
comment
возможный дубликат Как игнорировать файл, который уже был зафиксирован в предыдущем коммите?   -  person Karl Bielefeldt    schedule 29.08.2011


Ответы (3)


Если файл по-прежнему отображается в статусе, даже если он находится в .gitignore, убедитесь, что он еще не отслежен.

git rm --cached config.php

Если вы просто хотите игнорировать его локально, вы также можете игнорировать его статусом git:

git update-index --assume-unchanged config.php

Как прокомментировал , обратите внимание, что использование --assume-unchanged может привести к нежелательной потере данных, так как git stash сбрасывает игнорируемые файлы в исходное состояние, отменяя локальные изменения без предупреждения и сохранения.

person VonC    schedule 29.08.2011
comment
Хорошо, спасибо ! Если я объединю свою ветку с другой, может ли этот файл создать проблемы? - person prcaen; 29.08.2011
comment
@ Nimbus147: это не должно быть проблемой, и любые изменения в этом файле по-прежнему будут игнорироваться (т.е. не добавляться/фиксироваться). - person VonC; 29.08.2011
comment
если вы используете SmartGit, вы должны использовать remove для этого. - person Omid-RH; 06.01.2015
comment
git rm --cached config.php выдаст ошибку: fatal: pathspec 'config.php' did not match any files. Что делать? - person Sandra K; 14.07.2018
comment
@San У вас есть файл config.phone, отображаемый статусом git? - person VonC; 14.07.2018
comment
Можете ли вы помочь мне в моей ситуации? я был бы очень признателен - person Sandra K; 15.07.2018
comment
Есть ли способ заставить update-index --assume-unchanged работать в удаленной ветке? Я хотел бы сохранить файл в репо, но не иметь возможности его изменения другими, но, кроме того, недоступен для сцены. - person p014k; 08.02.2019
comment
@ p014k Не то, чтобы я знал. Для такого типа файла я сохраняю его версию под другим именем, а затем использую драйвер файловой системы для автоматического создания нужного файла (частного), когда это необходимо. Например, этот фильтр не будет активен на сцене. См. stackoverflow.com/a/54454356/6309 и соответствующую ссылку. - person VonC; 08.02.2019
comment
Таким образом, похоже, что нельзя игнорировать изменения в файле, который является частью репо. - person Nick; 07.05.2020
comment
@Ник Действительно. Вам понадобится драйвер фильтра содержимого для имитации частичного игнорирования содержимого файла: stackoverflow.com/a/59484661/6309 - person VonC; 07.05.2020
comment
Использование --assume-unchanged может привести к нежелательной потере данных, поскольку git stash сбрасывает игнорируемые файлы в состояние в восходящем направлении, отменяя локальные изменения без предупреждения или сохранения. - person user3351650; 09.12.2020
comment
@user3351650 user3351650 Спасибо, очень хорошая мысль. Я включил ваш комментарий в ответ для большей наглядности. - person VonC; 09.12.2020

Игнорировать зарегистрированный файл:

git update-index --assume-unchanged file

Вернуться

git update-index --no-assume-unchanged file

Вернуть все

git update-index --really-refresh 
person shiva kumar    schedule 28.03.2019
comment
Полезный. Вернуть один файл сработало, но вернуть все нет. - person Adem Tepe; 19.08.2019

Если файл уже находится в репозитории и, следовательно, в области индекса/индекса, то обновление до .gitignore не изменит эту ситуацию. Это будет продолжаться.

Чтобы удалить файл из индексной/индексной области, используйте git rm <file>.

person Philip Oakley    schedule 29.08.2011
comment
Что делать, если файл находится в репозитории, но еще не подготовлен? Я пытаюсь игнорировать файлы *.log, но все равно вижу их в разделе «Изменения». Я хочу игнорировать все, что делать? - person Sandra K; 14.07.2018
comment
@SandraK, если более старая версия этого файла (путь к файлу/имя) уже находится в репозитории при последнем коммите, то он считается отслеженным — в «индексе» будет этот файл в его записях, и поэтому status будет продолжать сообщать вы об этих изменениях. Если вы хотите игнорировать файлы *.log как для ранее привязанных, так и для неотслеживаемых в настоящее время файлов, вам необходимо как git rm *.log, так и обновить файл .gitignore. Сначала проверьте, действительно ли важны некоторые файлы журналов... Этот специальный файл легко забыть ;-) - person Philip Oakley; 15.07.2018