Git не может проверить в Linux с LF файл, который был сохранен с CRLF - PullRequest
1 голос
/ 11 июня 2019

Я проверяю сторонний проект "libjpeg" из https://github.com/winlibs/libjpeg в Linux (это только один пример, на самом деле у меня такая же проблема и со многими другими проектами). У меня есть следующая конфигурация окончания строки Git.

У меня настроены только глобальные настройки (установлено оформление с окончанием строки LF):

$ git config --system -l | grep core
core.eol=lf
core.autocrlf=false

$ git config --global -l | grep core
core.eol=lf
core.autocrlf=false

Нет локальных настроек (репо) относительно концов строк.

Я прочитал эту статью о конфигурации окончания строки Git: https://adaptivepatchwork.com/2012/03/01/mind-the-end-of-your-line и думаю, что моя конфигурация должна дать мне LF для всех текстовых файлов в Linux. Однако это не работает. Вместо этого я получаю CRLF в своем рабочем пространстве. Например:

~/gitclonetest/libjpeg$ file libjpeg.map
libjpeg.map: ASCII text, with CRLF line terminators
~/gitclonetest/libjpeg$ cat -v libjpeg.map
LIBJPEG_9.0 {^M
  global:^M
    *;^M
};^M

Может ли кто-нибудь помочь мне понять, чего мне не хватает? Моя цель - сделать так, чтобы все текстовые файлы (для любого проекта) автоматически конвертировались в LF, когда я клонировал их на хосте Linux.

ОБНОВЛЕНИЕ : Цель состоит в том, чтобы сконфигурировать Git для проверки на хосте Linux с LF, даже если тогда файл хранился с CRLF в хранилище.

Ответы [ 3 ]

2 голосов
/ 12 июня 2019

Проблема в том, что для core.autocrlf установлено значение true.Документация гласит следующее:

Установка этой переменной в «true» аналогична установке атрибута text в «auto» во всех файлах и в core.eol в «crlf».Установите значение true, если вы хотите, чтобы в вашем рабочем каталоге были окончания строк CRLF, а в хранилище - окончания строк LF.

Вы определенно не хотите устанавливать эту переменную на true в Unix илиСистема Linux;он должен быть установлен на false, если вы не в системе Windows (и даже тогда есть лучшие альтернативы).

1 голос
/ 11 июня 2019

Старый, но все еще правильный ответ о EOL-головной боли в Git

Короче:

core.autocrlf = false 
core.eol = native

будет производить правильные EOL на всех и любом сочетании ОС.

1 голос
/ 11 июня 2019

Скорее всего, вы установили некоторые флаги, которые сообщают git о том, что они должны работать с форматами EOL (а эти флаги беспорядок ). Если вы предпочитаете, чтобы git не связывался с ними, вы можете сделать это, добавив это в .gitattributes:

* -text

Таким образом, git выиграл путаницу с файлами, когда вы их добавляете или извлекаете. Если вам нужны другие вещи (например, реальное автоматическое преобразование EOL), вы можете проверить доступные вещи там.

https://git -scm.com / Docs / gitattributes

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

...