Git commit получить фатальную ошибку "фатальный: CRLF будет заменен LF в"

Я использую Ubuntu 13.10 x64, и я работаю над проектом, который некоторые разработчики используют Windows, я недавно изменил git config core.eol на "lf" и core.autocrlf на "input" и core.safecrlf до "true". С тех пор, когда я пытаюсь передать файл в свой локальный репозиторий, я получаю эту ошибку:
fatal: CRLF would be replaced by LF in ......
Из того, что я понимаю, если я установил core.eol в "lf" и core.autocrlf на "input", git будет автоматически конвертировать CRLF в LF, но почему эта ошибка появляется? Как я могу исправить эту проблему?

Спасибо.

Ответ 2

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

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

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

Ответ 3

$ git config core.autocrlf false

Ответ 4

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

dos2unix [filename]

Ответ 5

Это случилось со мной на тысячах файлов. Поэтому я написал быстрый скрипт bash, чтобы dos2unix его для меня. Кто-то еще в Linux или Mac может найти это полезным.

#!/usr/bin/env bash

unwindows() {

  local errmsg
  local fpath

  # 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

  fpath="${errmsg#*fatal: CRLF would be replaced by LF in }"
  fpath="${fpath%.*}"

  if [[ "${fpath}" == "${errmsg}" ]]; then
    err 'Regex failed. Could not auto-generate filename from stderr.'
    return 1
  fi

  if [[ ! -e "${fpath}" ]]; then
    err "Regex failed. '${fpath}' does not exist."
    return 1
  fi

  if ! dos2unix "${fpath}"; then
    err "Failed to run \"dos2unix '${fpath}'\"."
    return 1
  fi

  # recursive case
  unwindows
}

err() {
  local -r msg="$1"
  echo "${msg}" >&2
}

unwindows

В основном, он пытается сделать git add. , Если команда не выполняется, она извлекает имя несовместимого файла из вывода об ошибке. Затем он запускает dos2unix для этого файла. Он продолжает повторять этот процесс, пока git add. работает.

Если вы запустите это, вы должны увидеть dos2unix: converting file xxx to Unix format... несколько раз. Если это не так, это не работает, поэтому просто нажмите ctrl + c или command + c, чтобы остановить его.

Ответ 6

Вам нужно добавить все файлы, которые git status отображает как измененные:

git add file1
git add file2

И затем зафиксируйте свои изменения:

git commit

Это сохранит ваши локальные файлы как есть, но будет autocrlf их в удаленном репозитории.

Ответ 7

Я столкнулся с той же проблемой и исправил редактирование .gitattributes как .gitattributes ниже.

$ vim .gitattributes

закомментируйте 2 строки в .gitattributes

-* text=auto
-* text eol=lf
+# * text=auto
+# * text eol=lf

Ответ 8

К вашему сведению, я не уверен, относится ли это к вам, но я получал эту ошибку, когда случайно пытался добавить все node_modules к поэтапным изменениям. Так что на самом деле .gitignoring node_modules решил мою проблему.