git commit get fatal error “fatal : CRLF will be replace by LF in” CRLF로 대체 될 것이다

저는 Ubuntu 13.10 x64를 사용하고 있으며 일부 개발자가 Windows를 사용하는 프로젝트를 진행 중입니다. 최근에 git 구성 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로 변환하지만이 오류가 발생하는 이유 밖? 이 문제를 어떻게 해결할 수 있습니까?

감사합니다.



답변

이것은 고전적인 문제입니다.

http://toub.es/sites/toub.es/files/styles/standard_article/public/field/image/firstcommit.png
( Luis Tubes블로그 게시물 사진 )

일반적인 수정은 dos2unix 또는 Swiss File Knife를 사용 하여 해당 파일을 직접 변환하는 것 입니다.

나는 항상 선호 한 유지 core.autocrlffalse 어떤 수단 :

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]


답변

이것은 수천 개의 파일에서 나에게 일어났습니다. 그래서 나는 dos2unix그것을 고치기 위해 빠른 bash 스크립트를 작성 했습니다. 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를 눌러 중지하십시오.


답변

git status수정 된 것으로 표시되는 모든 파일을 추가해야합니다 .

git add file1
git add file2

그런 다음 변경 사항을 커밋하십시오.

git commit

이렇게하면 로컬 파일이 그대로 유지되지만 autocrlf원격 저장소에 저장됩니다.


답변

나는 같은 문제에 직면 .gitattributes하고 아래와 같이 편집하여 수정 했습니다.

$ vim .gitattributes

.gitattributes에서 2 줄 주석 처리

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