개발관련/Git

LF를 CRLF로 대체하는 Git

Rateye 2021. 12. 1. 09:37
728x90
반응형
질문 : LF를 CRLF로 대체하는 자식

bash를 사용하여 Windows XP 시스템에서 git 실행 SVN에서 프로젝트를 내 보낸 다음 베어 저장소를 복제했습니다.

그런 다음 내보내기를 베어 리포지토리 디렉토리에 붙여넣고 다음을 수행했습니다.

git add -A

그런 다음 다음과 같은 메시지 목록을 받았습니다.

LF는 CRLF로 대체됩니다.

이 전환의 결과는 무엇입니까? 이것은 Visual Studio의 .NET 솔루션입니다.

답변

이 메시지는 Windows core.autocrlf 로 인해 발생합니다.

autocrlf 의 개념은 줄 끝 변환을 투명하게 처리하는 것입니다. 그리고 그렇습니다!

나쁜 소식 : 값을 수동으로 구성해야합니다.
좋은 소식 : git 설치 당 한 번만 수행해야합니다 (프로젝트 설정도 가능).

autocrlf 작동 방식 :

core.autocrlf=true:      core.autocrlf=input:     core.autocrlf=false:
                                             
        repo                     repo                     repo
      ^      V                 ^      V                 ^      V
     /        \               /        \               /        \
crlf->lf    lf->crlf     crlf->lf       \             /          \      
   /            \           /            \           /            \

여기서 crlf = win-style end-of-line 마커, lf = unix-style (및 mac osx)입니다.

(위의 세 가지 옵션에 영향을 미치지 않는 pre-osx cr

이 경고는 언제 표시됩니까 (Windows에서)

autocrlf = 파일 중 하나에 유닉스 스타일 lf true (= 드물게),
autocrlf = 파일 중 하나에 win-style crlf input (= 거의 항상),
autocrlf = false – 절대!

이 경고는 무엇을 의미합니까?

경고 "LF를 CRLF로 대체 될 것"은 (가지고 있다고 autocrlf = true 커밋 체크 아웃주기 (이 창 스타일 CRLF로 대체됩니다) 후 유닉스 스타일의 LF를 잃게됩니다). Git은 Windows에서 유닉스 스타일 LF를 사용할 것으로 기대하지 않습니다.

"CRLF가 LF로 대체 될 것입니다 "라는 경고는 커밋 체크 아웃주기 후에 ( autocrlf = input 을 가짐) Windows 스타일의 CRLF를 잃게 될 것입니다 (유닉스 스타일 LF로 대체 됨). 창 아래에서 input 을 사용하지 마십시오.

autocrlf 작동 방식을 보여주는 또 다른 방법

1) true:             x -> LF -> CRLF
2) input:            x -> LF -> LF
3) false:            x -> x -> x

여기서 x 는 CRLF (windows 스타일) 또는 LF (unix 스타일)이고 화살표는

file to commit -> repository -> checked out file

어떻게 고치는 지

core.autocrlf 기본값은 git 설치 중에 선택되며 시스템 전체 gitconfig ( %ProgramFiles(x86)%\git\etc\gitconfig )에 저장됩니다. 또한 (다음 순서로 계단식) 있습니다.

~/.gitconfig 에있는 "global"(사용자 별) gitconfig, 또 다른
$XDG_CONFIG_HOME/git/config 또는 $HOME/.config/git/config "global"(사용자 별) gitconfig 및
– 작업 디렉토리의 .git/config 에있는 "local"(repo 당) gitconfig.

따라서 git config core.autocrlf 를 작성하여 현재 사용되는 값을 확인하고

– 시스템 전체 gitconfig # 시스템 별 솔루션 autocrlf=false
git config --global core.autocrlf false # 사용자 별 솔루션
git config --local core.autocrlf false # 프로젝트 별 솔루션

경고
git config gitattributes 설정으로 재정의 할 수 있습니다.
crlf -> lf 변환은 새 파일을 추가 할 때만 발생 crlf 파일은 영향을받지 않습니다.

도덕 (Windows 용) :
core.autocrlf true core.autocrlf = true를 사용합니다 (그리고 unix 라인 엔딩을 사용하도록 편집기 / IDE를 구성하지 않으려는 경우).
core.autocrlf = false 를 사용합니다 (또는 편집기 / IDE가 유닉스 줄 끝을 사용하도록 구성한 경우).
-합당한 이유가없는 한 core.autocrlf = input 사용 하지 마십시오 (예 : Windows에서 유닉스 유틸리티를 사용하거나 메이크 파일 문제가 발생한 경우).

추신 Windows 용 git을 설치할 때 무엇을 선택해야합니까?
Unix에서 프로젝트를 사용 하지 않으려 는 경우 기본 첫 번째 옵션에 동의하지 마십시오. 세 번째 항목 (있는 그대로 체크 아웃,있는 그대로 커밋 )을 선택합니다. 이 메시지가 표시되지 않습니다. 이제까지.

PPS 개인적으로 선호하는 것은 Unix 스타일 엔딩을 사용 하도록 편집기 / IDE core.autocrlffalse 설정하는 것입니다.

출처 : https://stackoverflow.com/questions/1967370/git-replacing-lf-with-crlf
728x90
반응형