ProgramingTip

git commit get fatal error "fatal : CRLF will be replace by LF in"

bestdevel 2020. 10. 22. 22:16
반응형

git commit get fatal error "fatal : CRLF will be replace by LF in"


저는 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눌러 중지하십시오.


이것이 귀하에게 해당되는지 확실하지 않지만 실수로 모든 node_modules단계를 단계적 변경에 추가하려고 할 때이 오류가 발생했습니다 . 그래서 실제로 .gitignoringnode_modules내 문제를 해결했다.


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

참고 URL : https://stackoverflow.com/questions/20168639/git-commit-get-fatal-error-fatal-crlf-would-be-replaced-by-lf-in

반응형