git update-index --assume-unchanged не приводит к игнорированию изменений файла
Я выполняю команду:
git update-index --assume-unchanged src/more/main.c
А потом:
-
git commit -av
- изменения внесены в этот коммит, -
git diff
- изменения отражены в этом различии, -
git status
- файлmain.c
сообщается как измененный.
Почему? Не следует ли игнорировать файл в этих командах? Если нет, то как это сделать?
1 ответ
Git не предлагает способа игнорировать изменения в отслеживаемых файлах. Из Git FAQ:
Git не предоставляет возможности [игнорировать изменения в отслеживаемых файлах]. Причина в том, что если Git необходимо перезаписать этот файл, например, во время проверки, он не знает, являются ли изменения в файле ценными и должны ли они сохраняться, или же они неактуальны и могут быть безопасно уничтожены. Следовательно, он должен выбирать безопасный путь и всегда сохранять их.
Заманчиво попытаться использовать определенные функции
git update-index
, а именно биты accept-unchanged и skip-worktree, но они не работают должным образом для этой цели и не должны использоваться таким образом.Если ваша цель - изменить файл конфигурации, часто бывает полезно зарегистрировать файл в репозитории, который является шаблоном или набором значений по умолчанию, которые затем можно скопировать вместе и при необходимости изменить. Этот второй измененный файл обычно игнорируется, чтобы предотвратить его случайную фиксацию.
Если вы сообщите нам, какова ваша настоящая цель с этим файлом, мы сможем предложить рекомендации о том, как достичь вашей цели с помощью Git.