Я прочитал много разных вопросов и ответов о переполнении стека, а также в документации git о том, как работает параметр core.autocrlf.
Это мое понимание из того, что я прочитал:
Клиенты Unix и Mac OSX (до 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 будет работать с каждой из трех настроек.
--
Обновление 17.04.2012: после прочтения статья Тима Клема, на которую указывает JJD в комментариях, я изменил некоторые значения в" неизвестных "значениях в в таблице выше, а также изменив "checkout existing | 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 = input
Это означает, что Git обработает все текстовые файлы и обеспечит замену CRLF на LF при записи этого файла в базу данных объектов. Однако обратного не произойдет. Когда вы считываете файлы обратно из объектной базы данных и записываете их в рабочий каталог, они все еще будут иметь LF для обозначения конца строки. Этот параметр обычно используется в Unix / Linux / OS X для предотвращения записи CRLF в репозиторий. Идея состоит в том, что если вы вставили код из веб-браузера и случайно получили CRLF в один из ваших файлов, Git позаботится о том, чтобы они были заменены LF при записи в базу данных объектов.
Статья Тима превосходна, единственное, о чем я думаю, чего не хватает, - это то, что он предполагает, что репозиторий находится в формате LF, что не обязательно верно, особенно для проектов только для Windows.
Сравнение статьи Тима с ответом jmlane, получившим наибольшее количество голосов на сегодняшний день, показывает полное согласие по истинным и входным настройкам и несогласие с ложными настройками.
autocrlf
в false;) stackoverflow.com/questions/2333424/ - person VonC   schedule 08.07.2010