Enforce core.autocrlf = ввод через .gitattributes

Есть ли способ принудительно выполнить core.autocrlf=input из .gitattributes для распространения политики на всех моих коллег?

В деталях я хочу преобразовать в lf в add и оставить as is при оформлении заказа.

Проблема заключается в том, что ни text, ни eol делать то, что я хочу в .gitattributes, поскольку eol имеет 3 допустимых значения:

  • lf
  • crlf
  • native

В идеале я хотел бы, чтобы мой файл .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, при совместном использовании папки возникали конфликты в конце строки. Я надеюсь, что это решение кому-то поможет.