Git, добавление файлов в репозиторий дает фатальную ошибку для LF ->CRLF

Я новичок в git, и мне нужна помощь. Я использую msysgit на окнах.

Когда я выполняю команду git add [folderName], я получаю ответ:

fatal: LF would be replaced by CRLF in [.css file or .js file]

и тогда, если вы попытаетесь сделать коммит, ничего не произойдет.

$ git commit
# On branch master
#
# Initial commit
#
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#       so01/
nothing added to commit but untracked files present (use "git add" to track)

Некоторые из этих файлов css/js были загружены из сети, поэтому я думаю, поэтому у них есть LF. Если я открою файл и вырежу/вставлю содержимое, я получу ошибку в следующем файле и так далее.

Любая помощь будет высоко ценится.

Изменить

Установка core.autocrlf в false, кажется, решает проблему, но я читал много сообщений, чтобы не устанавливать для этой опции значение false.

Может кто-нибудь указать мне, где я могу узнать, какие проблемы могут возникнуть в этой ситуации?


person user619656    schedule 28.12.2011    source источник
comment
Вы работаете с другими пользователями, работающими в среде, отличной от Windows?   -  person Adam Dymitruk    schedule 29.12.2011
comment
Нет. Я работаю над небольшим приложением, которое я поставлю на appharbor. Пока все хорошо, но хотелось узнать в чем разница в тех вариантах. После того, как я закончу приложение, я планирую провести некоторые исследования, но в то же время я буду использовать SO для быстрого решения.   -  person user619656    schedule 29.12.2011
comment
Тогда тем больше причин установить для autocrlf значение false. Тебе не нужна головная боль. Зафиксируйте файлы как есть. Жаль, что настройки по умолчанию при установке msysgit берут худший вариант.   -  person Adam Dymitruk    schedule 29.12.2011


Ответы (4)


Доверьте редакторам кода манипулировать окончаниями строк. Auto crlf должен быть ложным. Не позволяйте системе управления версиями стать слишком умной. Если вам не нужен инструмент управления версиями для изменения окончаний строк, не делайте этого. Это будет больно.

Чтобы повторить принятый ответ: «Если вы не видите конкретного лечения, которое должно иметь дело с собственным eol, вам лучше оставить для autocrlf значение false».

Также из progit book в конце раздела по autocrlf:

«Если вы программист Windows, выполняющий проект только для Windows, вы можете отключить эту функцию, записывая возврат каретки в репозиторий, установив для параметра конфигурации значение false»

Единственная другая помощь, которую я могу дать, заключается в том, что если вы выберете другой маршрут, ознакомьтесь с vim -b, который будет отображать специальные символы, такие как CR в MSysGit, и git show HEAD:path/to/your/file.txt, который должен показать вам файл в пути что git сохранил его.

Установите core.whitespace cr-at-eol, чтобы исправления и различия не выделяли CR как возможные проблемные пробелы.

Не стоит хлопот. Хранить как есть.

person Adam Dymitruk    schedule 28.12.2011
comment
Auto crlf должно быть ложным ‹-- Это неверно для Windows - person prusswan; 28.12.2011
comment
да, это правда на окнах. Опять же, не делайте ничего, кроме autocrlf = false. Я занимаюсь этим последние 4 года с несколькими командами в windows/.net. Вы можете делать другие вещи, чтобы упасть и пораниться. В конечном итоге вы установите для autocrlf значение false. - person Adam Dymitruk; 29.12.2011
comment
Почему ваши анекдотические свидетельства, относящиеся к windows/.net, более важны, чем другие, и что рекомендуется в progit. org/book/ch7-1.html? - person prusswan; 29.12.2011
comment
Это все еще анекдотично, моя точка зрения как основного пользователя Windows, работающего в командах, где используется несколько операционных систем, заключается в том, что документация верна и очень сильно зависит от репозитория. Слепая установка для core.autocrlf значения false — это не тот совет, который вам следует давать, это просто дезинформация. - person prusswan; 29.12.2011
comment
читайте его комментарии. Он единственный, кто использует свое решение и работает только с окнами. Ему совершенно не нужно, чтобы для него проводились какие-либо преобразования. Кроме того, кроссплатформенная разработка является исключением, а не правилом, особенно для тех, кто использует msysgit. Вряд ли это дезинформация. - person Adam Dymitruk; 29.12.2011
comment
+1, чтобы противостоять отрицательному голосу: этот ответ имеет смысл. @prusswan: пожалуйста, перечитайте страницу Pro Git, на которую вы сами ссылались. В нем конкретно говорится, что если вы программист Windows, выполняющий проект только для Windows, вы можете отключить эту функцию, записав возврат каретки в репозиторий, установив для параметра конфигурации значение false. Если вы не можете указать на некоторые конкретные примеры случаев, когда autocrlf=false действительно вызывала проблемы в среде только для Windows, любая инструкция установить для него значение true — это просто совет карго-культа. - person jammycakes; 29.12.2011
comment
ОП, утверждающий, что это проект только для Windows, не является веской причиной для отстаивания того, что core.autocrlf=false следует всегда использовать. Я с трудом понимаю ваши рассуждения о том, что кроссплатформенная разработка является исключением из правила, многие разработчики будут участвовать в проектах с разными архитектурами, особенно в мире Java, где неиспользование core.autocrlf=false становится проблематичным, поскольку редакторы борются за окончание строки. Visual Studio также раздражает тем, что изменяет окончания строк только в тех частях файлов, которые вы редактируете, а не во всем файле. - person Brett Ryan; 04.07.2012

очень новичок в этом, поэтому установка для core.autocrlf значения false не имела для меня особого смысла. Итак, для других новичков, перейдите в файл конфигурации в вашей папке .git и добавьте:

[core]
    autocrlf = false

под заголовком [основной].

person sigmapi13    schedule 26.07.2012

Проблема, вероятно, возникает из-за того, что вы настроили Git для внутреннего хранения файлов с помощью crlf с настройкой core.eol. Когда вы добавляете файл, Git предупреждает вас, что он изменит его на внутренний формат.

Git лучше всего работает с окончаниями строк lf, поэтому, если возможно, всегда используйте core.eol = lf.

Это должно объяснить, когда использовать core.autocrlf, Почему я должен использовать core. autocrlf=true в Git?

Вы также можете использовать core.safecrlf. Подробнее о настройках см. git config --help.

person m0tive    schedule 28.12.2011
comment
Ответ, на который вы ссылаетесь, гласит: если вы не видите конкретного лечения, которое должно иметь дело с собственным eol, вам лучше оставить для autocrlf значение false. - person Adam Dymitruk; 29.12.2011
comment
Я не уверен, почему я получил отрицательный голос за это? Я что-то пропустил? @AdamDymitruk Это также дает пару случаев, когда его можно использовать. Я думаю, полезно знать, почему этот параметр существует (если я никогда не должен его использовать, почему я могу его установить?) - person m0tive; 29.12.2011

Автоопределение форматов git работает очень хорошо. Поэтому core.autocrlf=true — действительно хорошая идея для Windows.

Выражение git config --global core.safecrlf=false говорит git: Эй, пожалуйста, преобразуйте мои неправильные окончания строк (только LF) в окончания строк Windows (CRLF) и не беспокойте меня этим.

Поэтому вам действительно следует отключить core.safecrlf.

Более длинный ответ по адресу: https://stackoverflow.com/a/15471083/873282

person koppor    schedule 02.06.2015
comment
@downvoters: Пожалуйста, кратко объясните, почему вы отрицаете этот ответ. Это помогает (i) другим понять, почему у этого ответа нет голосов, и (ii) улучшить ответ. - person koppor; 05.03.2017