У меня есть Git-репозиторий, доступ к которому возможен как из Windows, так и из OS X, и я знаю, что он уже содержит некоторые файлы с окончаниями CRLF. Насколько я могу судить, есть два способа справиться с этим:
Набор
core.autocrlf
дляfalse
везде,Следуйте приведенным здесь инструкциям (отраженным на страницах справки GitHub), чтобы преобразовать репозиторий так, чтобы он содержал только LF-окончания, и после этого установите
core.autocrlf
егоtrue
в Windows иinput
OS X. Проблема заключается в том, что если у меня есть какие-либо двоичные файлы в репозитории который:- неправильно помечены как двоичные в gitattributes, и
- случайно содержат как CRLF, так и LF,
они будут испорчены. Возможно, мой репозиторий содержит такие файлы.
Так почему я не должен просто отключить конвертацию конца строки в Git? В сети много смутных предупреждений о core.autocrlf
выключении, вызывающих проблемы, но очень мало конкретных ; единственное, что я нашел до сих пор, это то, что kdiff3 не может обрабатывать окончания CRLF (для меня это не проблема), и что некоторые текстовые редакторы имеют проблемы с окончанием строки (для меня это тоже не проблема).
Репозиторий является внутренним для моей компании, поэтому мне не нужно беспокоиться о том, чтобы делиться им с людьми с различными настройками autocrlf или требованиями к концу строки.
Есть ли какие-то другие проблемы с тем, чтобы просто оставить окончания строк, как я знаю?
источник
autocrlf
на ложь.autocrlf
в ложь. Я ищу причины, чтобы установить это на истину.autocrlf = input
: кажется, что это идеальное решение между двумя крайностями: вы сохраняете свое хранилище в чистоте от CRLF-дерьма, и локально разработчики Windows могут использовать все, что захотят, без того, чтобы в их локальных файлах ничего не происходило автоматически. (Они могут хотеть LF локально по разным причинам, поэтомуtrue
, на мой взгляд , это плохо.) Я не вижу никаких минусов в использованииautocrlf = input
.Ответы:
Единственные конкретные причины , чтобы установить
autocrlf
наtrue
следующие:git status
показывать все ваши файлы, такmodified
как из-за автоматического преобразования EOL, выполняемого при клонировании репозитория EOL Git на основе Unix, в Windows (см., например, выпуск 83 )Если вы не видите специальное лечение, которое должно иметь дело с нативным EOL, вам лучше уйти
autocrlf
вfalse
(git config --global core.autocrlf false
).Обратите внимание, что этот конфиг будет локальным (поскольку конфиг не перемещается из репо в репо)
Если вам нужна одинаковая конфигурация для всех пользователей, клонирующих этот репозиторий, проверьте « Какова лучшая
CRLF
стратегия обработки с помощью git? », Используяtext
атрибут в.gitattributes
файле .Пример:
Примечание: начиная с git 2.8 (март 2016 г.), маркеры слияния больше не будут вводить смешанный конец строки (LF) в файле CRLF.
Смотрите « Заставьте Git использовать CRLF на его строках слияния« <<<<<<< HEAD » »
источник
autocrlf=false
. Из интереса, знаете ли вы, почему git по-прежнему выполняет преобразование eol, даже если для autocrlf установлено значение false?core.autocrlf=false
в моем сценарии, заключается в том, что у меня есть какой-нибудь инструмент / редактор, который может запутаться в конце строки?false
, я никогда не был большим поклонником автоматических или волшебных вещей, происходящих на заднем плане. Просто используйте\n
иUTF-8
везде, и вы будете в порядке. Если какой-то чокнутый не понимает, что существуют соглашения и правила, и забывает использоватьUTF-8
или\n
, то кто-то конвертирует их вручную и шлепает себя по лицу.core.eol
атрибуты в.gitattributes
файле, а не использовать этот глобальныйcore.autocrlf
параметр, который применяется без разбора ко всем файлам.Я являюсь разработчиком .NET и уже много лет использую Git и Visual Studio. Я настоятельно рекомендую установить окончание строк на true. И сделайте это как можно раньше при жизни вашего репозитория.
При этом я НЕНАВИЖУ, что Git меняет окончание моей строки. Источник контроля должен только сохранять и извлекать работу, которую я делаю, он не должен изменять ее. Когда-либо. Но это так.
Что произойдет, если у каждого разработчика не будет установлено значение true, если ОДИН разработчик в конечном итоге установит значение true. Это приведет к изменению конца строк всех ваших файлов на LF в вашем репо. А когда пользователи установят false, проверьте их, Visual Studio предупредит вас и попросит изменить их. У вас 2 вещи произойдут очень быстро. Во-первых, вы будете получать все больше и больше таких предупреждений: чем больше ваша команда, тем больше вы получаете. Второе, и самое худшее, это то, что он покажет, что каждая строка каждого измененного файла была изменена (потому что окончание каждой строки будет меняться настоящим парнем). В конце концов вы больше не сможете надежно отслеживать изменения в своем репо. Гораздо проще и чище заставить всех держаться правды, чем пытаться всех обмануть. Как бы ужасно ни было жить с тем фактом, что ваш надежный источник контроля делает то, что не должен. Когда-либо.
источник
\r\n
и вы увидите.true
»? Почему вы позволите им это в первую очередь? когда вы настраиваете их для доступа к git-репо, то точно так же, как вы не разрешаете загрязнять определенные области разными языками (так что любой, кто работает над этим, может его прочитать), или как вы держите ветки / слияния / ребазы / и т. д. вдоль выбранного политика, они должны получить четкое правило: установить правильный crlf.Обновление 2 :
Xcode 9, кажется, имеет «особенность», в которой он будет игнорировать текущие окончания строки файла, и вместо этого просто использовать настройку окончания строки по умолчанию при вставке строк в файл, что приводит к файлам со смешанными окончаниями строк.
Я почти уверен, что этой ошибки не было в Xcode 7; не уверен насчет Xcode 8. Хорошей новостью является то, что, похоже, это исправлено в Xcode 10.
За то время, что она существовала, эта ошибка вызывала небольшое количество веселья в кодовой базе, на которую я ссылаюсь в этом вопросе (который используется по сей день
autocrlf=false
), и привела ко многим сообщениям коммита «EOL» и, в конечном итоге, к моему написанию git-pre-commit
хука для проверки для / предотвращения введения смешанных концов строки.Обновить :
Примечание: Как было отмечено VonC, начиная с Git 2.8, маркеры слияния будет не вводить Unix-стиль завершений строк в файл для Windows-стиле .
оригинал :
Один небольшой сбой, который я заметил в этой настройке, заключается в том, что когда возникают конфликты слияния, строки, добавляемые git для обозначения различий, не имеют конца строки в Windows, даже когда остальная часть файла есть, и вы можете получить с файлом со смешанными окончаниями строк, например:
Это не вызывает у нас никаких проблем (я полагаю, что любой инструмент, который может обрабатывать оба типа окончания строки, будет также иметь дело со смешанными окончаниями строки - конечно, все, что мы используем), но это то, о чем нужно знать.
Еще одна вещь, * обнаруженная нами, заключается в том, что при использовании
git diff
для просмотра изменений в файле, имеющем окончания строк в Windows, добавленные строки отображают возврат каретки, таким образом:* Это на самом деле не заслуживает термина «проблема».
источник