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.

Другие вопросы по тегам