Git делает конец всех извлеченных файлов CRLF - PullRequest
10 голосов
/ 01 сентября 2010

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

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

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

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

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

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

[ядро]

   autocrlf = true

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

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

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

Ответы [ 3 ]

5 голосов
/ 07 февраля 2013

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

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

* text=auto

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

*.ext text

(где ext - расширение файла, о котором идет речь)

3 голосов
/ 02 сентября 2010

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

1 голос
/ 09 марта 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...