Есть ли способ принудительно выполнить core.autocrlf=input
из .gitattributes
для распространения политики на всех моих коллег?
В деталях я хочу преобразовать в lf
в add и оставить as is
при оформлении заказа.
Проблема заключается в том, что ни text
, ни eol
делать то, что я хочу в .gitattributes
, поскольку eol
имеет 3 допустимых значения:
В идеале я хотел бы, чтобы мой файл .gitattributes
выглядел следующим образом:
* text eol=asis
Ответ 1
Подробно то, что я хочу, это преобразовать в lf в commit и оставить как есть при проверке.
Git не конвертируется при фиксации, а скорее в git add
. (Точнее, он выполняет преобразования в операциях, которые копируют объект в репозиторий и генерируют хеш-значение, но для большинства целей это просто git add
в любом случае.) В это время он применяет любые "чистые" фильтры и делает входную сторону EOL. (Аналогично, фильтры "smudge" на стороне выхода и операции EOL возникают при копировании из репозитория в дерево работы, которое для большинства целей - git checkout
и git reset --hard
.)
Согласно документация gitattributes, установите eol=lf
:
... заставляет Git нормализовать окончания строки для LF на checkin и предотвращает преобразование в CRLF, когда файл выдан.
Следовательно, хотя я на самом деле не тестировал это, похоже, что * eol=lf
- это именно то, что вы хотите. Обратите внимание, что это отличается от core.eol
, который ведет себя так, как вы описали в своем вопросе; это только для параметра .gitattributes
, которое применяется к файлам, которые соответствуют шаблону name.
Ответ 2
Я тоже столкнулся с этой проблемой. Когда я делал git status
каждый раз, у меня было много измененных файлов, которые даже нельзя было спрятать. Очень странно.
Использование autocrlf=input
в файле .gitattributes
эту проблему. Использовали vagrant в Windows с гостевой системой Ubuntu, при совместном использовании папки возникали конфликты в конце строки. Я надеюсь, что это решение кому-то поможет.