Сделать Git "LF будет заменен CRLF" предупреждения уходят

У меня есть установка Git, поэтому она не фиксирует несогласованные окончания строк. Проблема с этим - целая куча файлов, которые изменяются, хотя они и не являются. Что я набираю, чтобы эти файлы имели окончание строк на локальной стороне?

# git checkout dev
M   src/au/policy/dao/EmailQueue.java
M   src/au/policy/dao/EmailQueueFactory.java
M   src/au/policy/dao/PolicyPublisher.java
Already on 'dev'

# git diff
warning: LF will be replaced by CRLF in src/au/policy/dao/EmailQueue.java
warning: LF will be replaced by CRLF in src/au/policy/dao/EmailQueueFactory.java
warning: LF will be replaced by CRLF in src/au/policy/dao/PolicyPublisher.java

Это то, что я добавил в мой конфигурационный файл Git, который, похоже, делает то, что я думал, помимо этой проблемы:

autocrlf = true

Ответ 1

Вы можете просто удалить и переустановить повреждающие файлы из индекса следующим образом:

rm <files>
git checkout -- <files>

Или, если они являются только модифицированными файлами (будьте осторожны с этой командой), вы можете script сделать это следующим образом:

git diff --name-only --diff-filter=M | xargs rm --
git checkout -- .

В системе GNU вы можете использовать немного более безопасную трубу, но в любом случае у вас не должно быть пробелов или других разделительных символов в ваших именах.

git diff -z --name-only --diff-filter=M | xargs -0 rm --

Ответ 2

Это может произойти, если вы измените переменную core.autocrlf config (если я правильно понимаю вашу проблему).

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

Приведенная ниже команда git reset --hard HEAD заставит вашу текущую ветку указывать на последнюю фиксацию, и весь незафиксированный код будет потерян. Обязательно зафиксируйте код или возьмите резервную копию

$ rm .git/index
$ git reset --hard HEAD

Это, я думаю, будет синхронизировать файлы рабочей области и индекс (промежуточную область), чтобы следовать настройкам crlf.

Ответ 3

У меня возникла эта проблема при создании нового проекта Xcode. Мое решение для этой проблемы:

В терминальной записи

$: git config --global --edit

Затем в файле git config измените safecrlf на false. Мои настройки:

[core]
    autocrlf = input
    safecrlf = false

Я знаю, что git имеет для этого инструменты командной строки cmd, но они не работают для меня. А затем Xcode без проблем создает git repos.

Ответ 4

Единственное, что я могу придумать, это проверить, установлен ли core.safecrlf на warn.

git config --get core.safecrlf

Я думаю, что возможные значения true, false и warn. Я считаю, что настройка на false решит предупреждение, хотя это может быть не очень хорошая идея.

Ответ 5

Попробуй, это сработало для меня:

cd src/au/policy/dao
dos2unix

Если в этой папке есть другие файлы, вы захотите разбить ее на следующие (в противном случае она будет пытаться сделать это для каждого файла в любых подкаталогах, что может занять некоторое время):

cd src/au/policy/dao
dos2unix EmailQueue.java
dos2unix EmailQueueFactory.java
dos2unix PolicyPublisher.java

Он быстро работал на моей машине и фиксировал все окончания строки, и это немного проще и проще, чем некоторые из этих других исправлений.