Как изменить настройки окончания строки


582

Есть ли файл или меню, которые позволят мне изменить настройки работы с окончаниями строк?

Я читал, есть 3 варианта:

  1. Оформить заказ в Windows-стиле, зафиксировать Unix-стиль

    Git преобразует LF в CRLF при проверке текстовых файлов. При фиксации текстовых файлов CRLF будет преобразован в LF. Для кроссплатформенных проектов это рекомендуемый параметр в Windows («core.autocrlf» имеет значение «true»)

  2. Оформить заказ как есть, принять Unix-стиль

    Git не будет выполнять никаких преобразований при проверке текстовых файлов. При фиксации текстовых файлов CRLF будет преобразован в LF. Для кроссплатформенных проектов это рекомендуемый параметр в Unix (для «core.autocrlf» установлено значение «input»).

  3. Оформить заказ как есть, зафиксировать как есть

    Git не будет выполнять какие-либо преобразования при проверке или фиксации текстовых файлов. Выбор этой опции не рекомендуется для кроссплатформенных проектов (для "core.autocrlf" установлено значение "false")



3
Какой из них по умолчанию?
Стивен

2
Неважно, похоже, что по умолчанию это правда, что я думаю, уместно.
Стивен

19
Я на самом деле считаю, что 3-й вариант работает лучше. В противном случае я часто бываю в ситуациях, когда я редактирую как пакетные, так и sh-скрипты на одной и той же платформе (Windows / Linux), а затем фиксирую их, и Git автоматически «исправляет» окончания строк для одной платформы ... Нет, я предпочитаю быть самостоятельной осознавать окончания строк и фиксировать / проверять их в точности так, как они есть.
JustAMartin

1
@Neutrino Хотелось бы, чтобы это было правдой, но одним из примеров IDE, который портится в конце вашей строки (и не предлагает разумной опции конфигурации для его отключения), является Visual Studio.
Кассио Ренан

Ответы:


530

Нормальный способ контролировать это с git config

Например

git config --global core.autocrlf true

Для получения подробной информации прокрутите вниз по этой ссылке Pro Pro до раздела с именем "core.autocrlf"


Если вы хотите узнать, в каком файле это сохранено, вы можете запустить команду:

git config --global --edit

и глобальный конфигурационный файл git должен открыться в текстовом редакторе, и вы можете увидеть, откуда этот файл был загружен.


17
trueили falseесть только два варианта, у установщика есть три
qwertymk

49
inputэто третий вариант (как указано в ссылке, которую я предоставил). 3 варианта являются true| false| input
CodingWithSpike

2
Вот еще один хороший вопрос SO на эту тему: stackoverflow.com/questions/3206843/…
CodingWithSpike

31
На самом деле, если вы перечитаете свой вопрос, в выдержках из копии / вставки: "1 ... ("core.autocrlf" is set to "true") ... 2 ... ("core.autocrlf" is set to "input") ... 3 ... ("core.autocrlf" is set to "false")"так вы в основном ответили на свой вопрос? :)
CodingWithSpike

2
Это старый способ обойти это. Посмотрите на файл .gitattributes.
eftshift0

176

Формат окончания строки, используемый в ОС

  • Windows: CR(возврат каретки \r) и LF(LineFeed \n) пара
  • OSX, Linux: LF(LineFeed \n)

Мы можем настроить git для автоматической коррекции форматов окончания строки для каждой ОС двумя способами.

  1. Конфигурация Git Global
  2. Использовать .gitattributesфайл

Глобальная конфигурация

В Linux / OSX
git config --global core.autocrlf input

Это позволит устранить любые CRLFчтобы , LFкогда вы совершаете.

В винде
git config --global core.autocrlf true

Это убедитесь, что при оформлении заказа в Windows все LFбудет преобразовано вCRLF

Файл .gitattributes

Хорошая идея - сохранить .gitattributesфайл, так как мы не хотим, чтобы все в нашей команде устанавливали свои настройки. Этот файл должен храниться в корневом каталоге репо, и, если он существует, git будет его уважать.

* text=auto

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

* text eol=crlf
* text eol=lf

Первый предназначен для проверки, а второй - для фиксации.

*.jpg binary

Обрабатывайте все .jpgизображения как двоичные файлы независимо от пути. Так что конверсия не нужна.

Или вы можете добавить квалификаторы пути:

my_path/**/*.jpg binary

3
Как насчет OS X, которая использует CR(возврат каретки) в одиночку?
17

23
Устаревшие MacOS (то есть MacOS 9 и более ранние версии) используются CRотдельно, но OS X обычно использует LF.
Захари Уэр

2
Могу ли я использовать * text eol=lfдважды, чтобы оформить заказ LFна Windows?
mbomb007

1
Согласно gitattributes документации настройка * text=autoпозволяет мерзавец решить , является ли содержание текста или нет. Принудительно все файлы должны быть текстовыми * text.
Адриан W

Как установить eol=crфайлы для Mac OS 9 и других устаревших платформ?
NobleUplift

36

Для решения по настройке репозитория, которое можно распространять среди всех разработчиков, проверьте атрибут text в файле .gitattributes . Таким образом, разработчикам не нужно вручную устанавливать свои собственные окончания строк в репозитории, а поскольку разные репозитории могут иметь разные стили окончания строк, глобальный core.autocrlf не самый лучший, по крайней мере, на мой взгляд.

Например, сброс этого атрибута по заданному пути [ . - текст] заставит git не касаться концов строк при регистрации и выписке. На мой взгляд, это лучшее поведение, так как большинство современных текстовых редакторов могут обрабатывать оба типа окончаний строк. Кроме того, если вы, как разработчик, все еще хотите выполнять преобразование конца строки при регистрации, вы все равно можете установить путь для соответствия определенным файлам или установить атрибут eol (в .gitattributes) в своем хранилище.

Также ознакомьтесь с этой публикацией, в которой более подробно описан файл .gitattributes и текстовый атрибут: Какова лучшая стратегия обработки CRLF (возврат каретки, перевод строки) с Git?


. - textдает is not a valid attribute name: .gitattributes:1пожалуйста положитеcat .gitattributes
jangorecki

3

Для меня, что сделал трюк с командой

git config auto.crlf false

внутри папки проекта, я хотел это специально для одного проекта.

Эта команда изменила файл в пути {имя_проекта} /. Git / config (fyi .git - скрытая папка), добавив строки

[auto]
    crlf = false

в конце файла. Я полагаю, что изменение файла делает то же самое.


1

Если вы хотите преобразовать обратно форматы файлов, которые были изменены в формат UNIX из формата ПК.

(1) Вам необходимо переустановить GIT с черепахой и в разделе «Концовка строк» ​​убедиться, что вы выбрали опцию «Получить как есть» - «Проверить как есть».

(2) и сохранить оставшиеся конфигурации как есть.

(3) после завершения установки

(4) записать все расширения файлов, которые конвертированы в формат UNIX, в текстовый файл (extensions.txt).

ex:*.dsp
   *.dsw

(5) скопируйте файл в свой клон. Выполните следующую команду в GITBASH.

while read -r a;
do
find . -type f -name "$a" -exec dos2unix {} \;
done<extension.txt
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.