Не удалось обновить индекс Git, LF будет заменен на CRLF?

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

введите здесь описание изображения

Updating the Git index failed.  A rescan will be automatically started to resynchronize git-gui.

warning: LF will be replaced by CRLF in bin/jarlist.cache.
The file will have its original line endings in your working directory.
warning: LF will be replaced by CRLF in gen/com/click4tab/pustakalpha/BuildConfig.java.
The file will have its original line endings in your working directory.
warning: LF will be replaced by CRLF in proguard-project.txt.
The file will have its original line endings in your working directory.
warning: LF will be replaced by CRLF in project.properties.
The file will have its original line endings in your working directory.
warning: LF will be replaced by CRLF in res/layout/start_test.xml.
The file will have its original line endings in your working directory.
warning: LF will be replaced by CRLF in res/menu/start_test.xml.
The file will have its original line endings in your working directory.
warning: LF will be replaced by CRLF in src/com/click4tab/pustakalpha/StartTestActivity.java.
The file will have its original line endings in your working directory.

person Ayush Goyal    schedule 20.09.2012    source источник
comment
возможный дубликат Почему отображается сообщение "Ошибка обновления индекса Git"   -  person T.Todua    schedule 31.03.2014


Ответы (4)


Решение состоит в том, чтобы принять такое поведение. Вы работаете в Windows, поэтому у вас должно быть autocrlf как true. Это сделано для того, чтобы окончания строк во внутренних записях Git были согласованными. Предупреждения есть, поэтому вы можете увидеть, собираетесь ли вы случайно повредить двоичные файлы во время фиксации.

Нажмите Продолжить. Если вы хотите, чтобы это не повторилось с этими файлами, вам нужно удалить эти файлы, затем исправить окончания строк и снова подготовить их. Сделайте это, изменив окончание строки файла на CRLF/Windows в редакторе или перетащите эти инструменты командной строки в свой каталог system32, чтобы вы могли выполнять unix2dos some_file.java с такими файлами в любой командной строке.

person Walf    schedule 20.08.2014

Я столкнулся с похожими проблемами и решил поближе взглянуть на свою конфигурацию.

Символы новой строки в Windows/Linux/MAC:

  1. MAC OS до X: \r = CR (возврат каретки)
  2. MAC OS X / UNIX: \n = LF (перевод строки)
  3. Windows: \r\n = CR + LF

Не паникуйте. Git может выполнить преобразование между платформами за вас.

Git должен сохранить строку, оканчивающуюся на LF, в репо.

Установите его;

TRUE — если вы работаете в Windows:

git config --global core.autocrlf true

Это преобразует окончания LF в CRLF, когда вы проверяете код.

ВВОД. Если вы используете MAC/LINUX:

Вам не нужно ничего конвертировать, Git использует LF, а ваш MAC использует LF.

Но вы можете указать git преобразовать любой CRLF, если он пройдет:

git config --global core.autocrlf input

Неверно — не рекомендуется

Я не рекомендую это, но только ради этого объяснения:

Если вы являетесь разработчиком Windows, работающим только на компьютере с Windows, и вы на 100% уверены, что никогда не будете работать с людьми на MAC:

git config --global core.autocrlf false

ОБНОВЛЕНИЕ:

Как указано ниже, я не упомянул .gitattributes, где можно использовать эти настройки по умолчанию для проекта.

Если у вас есть время, вот документ: http://git-scm.com/docs/gitattributes

person Andrew    schedule 28.08.2015
comment
Вместо того, чтобы быть на 100% уверенным в чем-либо, почему бы вам просто не проверить .gitattributes файл? Таким образом, не всем нужно настраивать какие-то загадочные вещи. - person Edward Thomson; 28.08.2015
comment
Я не думаю, что .gitattributes скажет вам, кто ваши коллеги и работаете ли вы над проектом в одиночку. Прочитайте предложение дважды, прежде чем отвечать таким ответом. Имейте в виду, что люди здесь, чтобы помочь или должны помочь. - person Andrew; 28.08.2015
comment
Нет, .gitattributes расскажет всем, кто работает над одним и тем же проектом, как обрабатывать окончания строк, вместо того, чтобы пытаться обеспечить одинаковые настройки конфигурации для всех. Используйте .gitattributes, не используйте core.autocrlf. - person Edward Thomson; 28.08.2015
comment
Люди свободны в выборе решения, которое они предпочитают. Опубликуйте ответ, объясняющий, как настроить .gitattributes и каковы плюсы. Это будет намного эффективнее. Мне нравится иметь четкую локальную конфигурацию, независимо от того, есть ли .gitattributes в текущем проекте или нет. - person Andrew; 28.08.2015

В системах Unix конец строки обозначается переводом строки (LF). В окнах строка представляется с возвратом каретки (CR) и переводом строки (LF), таким образом (CRLF). когда вы получаете код из git, который был загружен из системы unix, у них будет только LF.

Если вы хотите отключить это предупреждение, введите его в командной строке git.

git config core.autocrlf true

Если вы хотите принять разумное решение, как git должен справиться с этим, прочитайте документацию.

Вот фрагмент

Форматирование и пробелы

Проблемы с форматированием и пробелами — одни из самых неприятных и тонких проблем, с которыми сталкиваются многие разработчики при совместной работе, особенно кроссплатформенной. Для исправлений или другой совместной работы очень легко внести тонкие изменения пробелов, потому что редакторы вносят их молча, и если ваши файлы когда-либо касаются системы Windows, их окончания строк могут быть заменены. В Git есть несколько параметров конфигурации, которые помогут решить эти проблемы.

core.autocrlf

Если вы программируете для Windows и работаете с людьми, которые этого не делают (или наоборот), вы, вероятно, в какой-то момент столкнетесь с проблемами окончания строки. Это связано с тем, что Windows использует как символ возврата каретки, так и символ перевода строки для новой строки в своих файлах, тогда как системы Mac и Linux используют только символ перевода строки. Это малозаметный, но невероятно раздражающий факт кроссплатформенной работы; многие редакторы в Windows молча заменяют существующие окончания строк в стиле LF на CRLF или вставляют оба символа конца строки, когда пользователь нажимает клавишу ввода.

Git может справиться с этим, автоматически преобразовывая окончания строк CRLF в LF, когда вы добавляете файл в индекс, и наоборот, когда он извлекает код в вашу файловую систему. Вы можете включить эту функцию с помощью параметра core.autocrlf. Если вы работаете на компьютере с Windows, установите для него значение true — это преобразует окончания LF в CRLF при проверке кода:

$ git config --global core.autocrlf true

Если вы работаете в системе Linux или Mac, в которой используются окончания строк LF, вы не хотите, чтобы Git автоматически преобразовывал их при извлечении файлов; однако, если случайно появляется файл с окончаниями CRLF, вы можете захотеть исправить это с помощью Git. Вы можете указать Git конвертировать CRLF в LF при фиксации, но не наоборот, установив core.autocrlf для ввода:

$ git config --global core.autocrlf input

Эта настройка должна оставить вам окончания CRLF в проверках Windows, но окончания LF в системах Mac и Linux и в репозитории.

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

$ git config --global core.autocrlf false
person Pushpreet Singh Sethi    schedule 27.06.2019

Эта строка кода должна предотвратить это предупреждение:

git config core.autocrlf false

Если вам нужен более подробный ответ о том, как и где вы вводите эту строку кода, посмотрите здесь: https://stackoverflow.com/questions/3841140/git-how-to-get-rid-of-the-annoying-crlf-message-on-msysgit-windows

person Igor    schedule 15.03.2013
comment
Ужасный совет, autocrlf необходим для того, чтобы окончания строк в коммитах были одинаковыми на разных платформах. Вы когда-нибудь пытались разрешать конфликты, когда на самом деле изменилась всего пара строк, но они были скрыты в море изменений окончаний строк? - person Walf; 20.08.2014