в 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, но почему эта ошибка выходит? Как я могу это исправить проблема?



спасибо.

653   6  

6 ответов:

Это классический вопрос:

http://toub.es/sites/toub.es/files/styles/standard_article/public/field/image/firstcommit.png
(фото из Луис Трубы ' s блоге)

обычное исправление заключается в том, чтобы конвертировать эти файлы самостоятельно, с dos2unix или Швейцарский Нож Для Файлов.

Я всегда предпочитал сохранить core.autocrlf to false, что означает:

git config --global core.autocrlf false

У меня была та же проблема, и я попробовал предложенное решение без успеха.

мне пришлось выполнить вторую команду, чтобы заставить его работать:

$ git config --global core.autocrlf false
$ git config --global core.safecrlf false
$ git config core.autocrlf false

можно просто попробовать dos2unix:

dos2unix [filename]

это случилось со мной на тысячи файлов. Поэтому я написал небольшой 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

    Ничего не найдено.