Тест 1: почему CRLF.txt видится измененным после свежего клона?
Потому что вы обманули git: вы сказали git, что строки заканчиваются на CRLF.txt
в вашем хранилище - это окончания строк в стиле Unix (LF), но вы хотите, чтобы окончания строк в стиле Windows (CRLF) в вашей рабочей папке .Вот что означает атрибут text
: нормализуйте окончания строк, чтобы они имели окончания строк в стиле Unix в хранилище.
Но ваш первый шаг заключался в добавлении файла с Windowsконец стиля в хранилище.
Итак, git может посмотреть файл на диске, преобразовать его конец строки в стиле Windows (CRLF) в нормальную форму (конец строки LF в стиле Unix) исравните результаты с тем, что находится в хранилище.
Это содержимое не совпадает.Таким образом, он думает, что вы изменили файл. Именно поэтому является причиной перенормировки файлов.
Тест 2: что такое git add --renormalize.на самом деле?
Обновляет файлы в соответствии с тем, что вы заявили в .gitattributes
.Когда вы добавляете .gitattributes
, вы не изменяете содержимое файлов на диске или в хранилище.Но вы можете (и в этом случае * ) изменить утверждения, которые вы предъявляете о существовании содержимого в хранилище.
Если содержимое врепозиторий не является на самом деле тем, что вы заявили , тогда git add --renormalize
исправит это.
Почему он также не ставит .gitattributes?
Перенормировка влияет только на файлы, уже находящиеся в репозитории, она применяет процесс «очистки» заново к всем отслеживаемым файлам , чтобы принудительно добавить их снова в индекс ».(Из документации git; выделение мое.)
Так что это действительно только перенормирует существующий контент.
При настройке .gitattributes в репо, который уже имеетНемного истории, рекомендуется ли запускать git add --renormalize, чтобы избежать изменения файлов после свежего клона?
Да.