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로 변환하지만 오류가 발생하는 이유 밖에서? 이 문제를 어떻게 해결합니까?
감사합니다.
이것은 고전적인 문제입니다.
( Luis Tubes 의 블로그 게시물 사진 )
일반적인 수정은 dos2unix 또는 Swiss File Knife를 사용 하여 해당 파일을 직접 변환하는 것 입니다.
나는 항상 선호하는 유지 core.autocrlf
에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]
이것은 수천 개의 파일에서 나에게습니다. 그래서 나는 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
단계를 단계적 변경에 추가하려고 할 때이 오류가 발생했습니다 . 그래서 실제로 .gitignoring
은 node_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
'ProgramingTip' 카테고리의 다른 글
Picasso에서 캐시 무효화 (0) | 2020.10.22 |
---|---|
Objective-C의 제거에서 공백 제거 (0) | 2020.10.22 |
오류 : ORA-65096 : 오라클의 공용 사용자 또는 역할 이름이 잘못되었습니다. (0) | 2020.10.22 |
Xcode 4.1 치명적인 오류 : 미리 빌드 된 헤더 수정 된 stdlib (0) | 2020.10.22 |
TabControl 내에서 탭을 선택해야합니까? (0) | 2020.10.22 |