Git делает все вычеркнутые файлы "конец строки" CRLF

Я программирую на Mac, и я действительно не понимаю, что делает Git с концом строки моих файлов:

Я создал репозиторий с некоторыми файлами в формате Unix (конец строки LF).

Когда я клонирую репозиторий, который я создал, , все мои строки заканчиваются CRLF. Не следует ли автоматически определять, что мне нужен конец линии LF?

У меня autoclrf установлено значение true.

GIT документация об autoclrf довольно трудно понять:

Если вы просто хотите иметь окончания строк CRLF в своем рабочем каталоге независимо от того, с каким репозиторием вы работаете, вы можете установить конфигурационную переменную "core.autocrlf" без изменения каких-либо атрибутов.

[ядро]

   autocrlf = true

Это не приводит к нормализации всех текстовых файлов, но гарантирует, что текстовые файлы, которые вы вводите в репозиторий, имеют свои окончания строк, нормализованные к LF, когда они добавлены, и что файлы, которые уже нормализованы в хранилище, остаются нормализованными.

В первом предложении говорится: "Если вы хотите иметь все crlf", когда второе предложение говорит, что Git будет автоматически настраивать конец строк.

В моем случае кажется, что Git преобразует все в CRLF и оставляет его таким, как я пытаюсь клонировать.

Ответ 1

Персональная страница gitattributes плохо выложена. В следующем разделе вы найдете:

Переменная конфигурации core.eol управляет концами строк git для нормализованных файлов в вашем рабочем каталоге; по умолчанию используется внутренняя строка, заканчивающаяся для вашей платформы, или CRLF, если установлен core.autocrlf.

Итак, если вы не указали core.eol, вы получите строки, завершенные символами CR + LF, независимо от того, используете ли вы Apple Mac OS X, Microsoft Windows или Ubuntu Linux.

Из вашего вопроса:

В первом предложении говорится: "Если вы хотите иметь все crlf", когда второе предложение говорит, что git будет автоматически настраивать конец строк.

Важно отметить, что есть два направления настройки, которые выполняются, когда core.autocrlf установлено на true:

  • CR + LFs станут LF в вашем репозитории/репозиториях. То есть, файлы фиксации и back-end репозитория будут иметь LF в конце строк в текстовых файлах. Это упрощает работу в вашей истории фиксации, облегчая сравнение различий/сравнений, если одна из IDE ваших коллег решит магически преобразовать ваши LF в CR + LF (кто хочет видеть это в своем diff?). Вы также сохраните несколько байтов на жестком диске.
  • LFs станет CR + LFs в вашем рабочем каталоге. В вашей проверенной файловой системе любой новый текстовый файл будет иметь строки, заканчивающиеся на CR + LF, когда-то git коснется его. Это произойдет, даже если у файла были строки, заканчивающиеся на простые LF, когда вы его впервые создали.

Первое, что вам нужно сделать, это отключить core.autocrlf или установить его на false. Если вы хотите, чтобы проверенные текстовые файлы соответствовали конечным строкам, выбранным пользователем, независимо от того, как они были созданы, просто добавьте это в свои .gitattributes:

* text=auto

В качестве альтернативы, если git не полезно угадывать, какой из ваших файлов является текстом, вы можете объявить конкретное расширение для этой двухсторонней нормализации:

*.ext text

(где ext - это расширение файла)

Ответ 2

Когда вы устанавливаете core.autocrlf в true, Git преобразует окончания строки в LF при совершении репо, но записывает файлы в рабочее дерево, используя окончания строк, соответствующие вашим настройкам платформы (LF в Mac/Unix/Linux, CRLF в Windows).

Ответ 3

Да, вы должны увидеть CRLF в рабочем дереве Windows, когда autocrlf установлен в true, что включает в себя, если вы просматриваете проводник. Если вы нажмете на репо Linux, вы должны увидеть, что все ваши файлы заканчиваются правильно с помощью LF.