Git файлы, измененные после проверки, reset --hard и т.д., хотя autocrlf установлен в значение false
Вот мой системный диалог:
unrollme-dev-dan:views Dan$ git reset --hard HEAD
HEAD is now at 3f225e9 Fix scan titles
unrollme-dev-dan:views Dan$ git status
# On branch master
# Changes not staged for commit:
# (use "git add <file>..." to update what will be committed)
# (use "git checkout -- <file>..." to discard changes in working directory)
#
# modified: app/signup/finish.html
# modified: app/signup/scan.html
#
У меня autocrlf установлено значение false:
unrollme-dev-dan:unroll-website Dan$ git config core.autocrlf
unrollme-dev-dan:unroll-website Dan$
unrollme-dev-dan:unroll-website Dan$ git config --global core.autocrlf
unrollme-dev-dan:unroll-website Dan$
И у меня нет никаких файлов .gitattributes, которые испортили это:
unrollme-dev-dan:unroll-website Dan$ find . -name .gitattributes
[ only results are in different directory tree ]
Это вызвано .gitattributes
на один уровень вверх, как указано в ответе ниже.
Когда я делаю od -c
в файлах, он показывает \r\n
. Я не знаю, что они должны "быть", по-видимому, они должны заканчиваться на \n
, и именно поэтому показывает diff. Но я не понимаю, как эти файлы могут быть изменены при проверке даже при autocrlf
false.
Что может вызвать git изменение файла при проверке, кроме autocrlf?
Ответы
Ответ 1
Эта проблема может быть вызвана текстовой опцией gitattributes
https://www.kernel.org/pub/software/scm/git/docs/gitattributes.html
Эта проблема может быть исправлена путем временного редактирования вашего файла .gitattributes
в папке проекта.
изменить * text=auto
на #* text=auto
внести необходимые изменения в окончание строк файлов и нажать фиксацию. Затем вы можете включить его снова после внесения изменений или, альтернативно, выбрать один из других вариантов, которые могут лучше соответствовать вашему проекту.
Ответ 2
У меня не было файла gitattributes, как указано в принятом ответе, это была проблема с правами доступа к файлам в моем случае. Чтобы узнать, является ли это вашей проблемой, проверьте отличия измененных файлов от git diff, например:
git diff path/to/file.html
Если единственное изменение, которое вы видите, это старый режим/новый режим, вероятно, проблема с разрешениями. Вы можете сообщить git игнорировать изменения разрешения файла, используя:
git config core.filemode false
или
git config --global core.filemode false
(в зависимости от того, как вы используете git).
Недавно я переключился с использования Cygwin git на git для Windows по соображениям производительности, плюс, чтобы TortoiseGit работал правильно, это может быть причиной отказа в моем случае.
Литература: