Я прочитал много разных вопросов и ответов по переполнению стека, а также git документацию о том, как работает параметр core.autocrlf .
Это мое понимание того, что я прочитал:
Клиенты Unix и Mac OSX (pre-OSX использует CR) используют LF-окончания строк.
Клиенты Windows используют окончания строки CRLF.
Когда для core.autocrlf на клиенте установлено значение true, репозиторий git всегда сохраняет файлы в формате окончания строки LF, а окончания строк в файлах на клиенте конвертируются туда-обратно при извлечении / подтверждении для клиентов (т. Е. Windows) которые используют не LF окончания строк, независимо от того, в каком формате файлы окончаний строк находятся на клиенте (это не согласуется с определением Тима Клема - см. обновление ниже).
Вот матрица, которая пытается документировать то же самое для настроек 'input' и 'false' в core.autocrlf с вопросительными знаками, где я не уверен в поведении конвертации, заканчивающемся строкой.
Мои вопросы:
- Какими должны быть знаки вопроса?
- Корректна ли эта матрица для "не вопросительных знаков"?
Я обновлю вопросительные знаки из ответов, поскольку консенсус, кажется, сформирован.
core.autocrlf value
true input false
----------------------------------------------------------
commit | convert ? ?
new | to LF (convert to LF?) (no conversion?)
commit | convert to ? no
existing | LF (convert to LF?) conversion
checkout | convert to ? no
existing | CRLF (no conversion?) conversion
Я на самом деле не ищу мнения о плюсах и минусах различных настроек. Я просто ищу данные, которые дают понять, как git будет работать с каждой из трех настроек.
-
Обновление 04/17/2012 : После прочтения статьи Тима Клема , связанной JJD в комментариях, я изменил некоторые значения в «неизвестных» значениях в приведенная выше таблица, а также изменение «извлечение существующего | true для преобразования в CRLF вместо преобразования в клиент». Вот определения, которые он дает, которые более понятны, чем все, что я видел в других местах:
core.autocrlf = false
Это значение по умолчанию, но большинству людей рекомендуется изменить это
немедленно. Результатом использования false является то, что Git никогда не шутит
с окончаниями строк в вашем файле. Вы можете проверить файлы с LF или CRLF
или CR, или какое-то случайное сочетание этих трех, а Git это не волнует. это
может затруднить чтение различий и затруднить слияние. Большинство людей
работая в мире Unix / Linux, используйте это значение, потому что у них нет
Проблемы с CRLF, и им не нужно, чтобы Git выполнял дополнительную работу всякий раз, когда
файлы записываются в базу данных объектов или записываются в
рабочий каталог.
core.autocrlf = true
Это означает, что Git обработает все текстовые файлы и убедится, что
CRLF заменяется на LF при записи этого файла в базу данных объектов
и превратить все LF обратно в CRLF при записи в рабочий
каталог. Это рекомендуемый параметр в Windows, потому что он
гарантирует, что ваш репозиторий может быть использован на других платформах, в то время как
сохраняя CRLF в вашем рабочем каталоге.
core.autocrlf = ввод
Это означает, что Git обработает все текстовые файлы и убедится, что
CRLF заменяется на LF при записи этого файла в объект
база данных. Это, однако, не будет делать обратное. Когда вы читаете файлы
выйти из базы данных объекта и записать их в рабочую
каталог у них все еще будут LF для обозначения конца строки. это
настройка обычно используется в Unix / Linux / OS X для предотвращения CRLF от
записывается в хранилище. Идея в том, что если вы вставили
код из веб-браузера и случайно получил CRLF в один из ваших
файлы, Git будет гарантировать, что они были заменены LFs, когда вы написали
в базу данных объекта.
Статья Тима отличная, единственное, о чем я могу подумать, что она отсутствует, это то, что он предполагает, что репозиторий имеет формат LF, что не всегда верно, особенно для проектов только для Windows.
Сравнение статьи Тима с ответом jmlane, получившим наибольшее количество голосов на сегодняшний день, показывает идеальное согласие с истинными и входными настройками и несогласие с ложными настройками.