в Git коммит сделать фатальную ошибку "фатальная ошибка: переводы строк будут заменены LF в"
Я использую Ubuntu 13.10 x64, и я работаю над проектом, который некоторые разработчики используют Windows, я недавно изменил конфигурацию git core.eol к "lf" и core.autocrlf на "вход" и core.safecrlf в "true". С тех пор, когда я пытаюсь зафиксировать файл в моем локальном репозитории, я получаю эту ошибку:fatal: CRLF would be replaced by LF in ......
Из того, что я понимаю, если я установил core.eol к "lf" и core.autocrlf чтобы "input", git автоматически преобразует CRLF в LF, но почему эта ошибка выходит? Как я могу это исправить проблема?
спасибо.
6 ответов:
Это классический вопрос:
(фото из Луис Трубы ' s блоге)обычное исправление заключается в том, чтобы конвертировать эти файлы самостоятельно, с dos2unix или Швейцарский Нож Для Файлов.
Я всегда предпочитал сохранить
core.autocrlftofalse, что означает:git config --global core.autocrlf false
У меня была та же проблема, и я попробовал предложенное решение без успеха.
мне пришлось выполнить вторую команду, чтобы заставить его работать:
$ git config --global core.autocrlf false $ git config --global core.safecrlf false
это случилось со мной на тысячи файлов. Поэтому я написал небольшой bash-скрипт, чтобы сделать
dos2unixисправить это для меня. Кто-то другой на Linux или Mac может найти это полезным.#!/usr/bin/env bash _unwindows() { local errmsg; local filepath; # base case errmsg="$(git add . 2>&1)"; if [ $? -eq 0 ]; then echo "Successfully converted CRLF to LF in all files."; echo "Successfully ran `git add .`."; echo "Done."; return 0; fi; filepath="${errmsg#*fatal: CRLF would be replaced by LF in }"; filepath="${filepath%.*}"; if [ "${filepath}" = "${errmsg}" ]; then echo "Regex failed. Could not auto-generate filename from stderr."; return 1; fi; if [ ! -e "${filepath}" ]; then echo "Regex failed. '${filepath}' does not exist."; return 1; fi; dos2unix "${filepath}"; if [ $? -ne 0 ]; then echo "Failed to run \`dos2unix '${filepath}'\`."; return 1; fi; # recursive case _unwindows; }; _unwindows;в основном, он пытается сделать
git add .. Если команда завершается неудачно, она захватывает имя несовместимого файла из вывода ошибки. Затем он работаетdos2unixв этом файле. Он продолжает повторять этот процесс, покаgit add .строительство.если вы запустите это, вы должны увидеть
dos2unix: converting file xxx to Unix format...неоднократно. Если вы этого не сделаете, это не работает, так что просто нажмите ctrl+c или команда+c чтобы остановить его.
нужно добавить все файлы, которые
git statusотображается как изменено:git add file1 git add file2а затем зафиксируйте свои изменения:
git commitэто сохранит ваши локальные файлы как есть, но будет
autocrlfих в удаленном репозитории.

Comments