Programing

창에서 git이 CR + LF 대신 LF를 사용하도록하려면 어떻게합니까?

lottogame 2020. 3. 18. 08:01
반응형

창에서 git이 CR + LF 대신 LF를 사용하도록하려면 어떻게합니까?


git이 Windows를 사용 LF하지 않고 파일을 체크 아웃하도록 강제하고 싶습니다 CR+LF. 두 가지 구성 옵션을 확인했지만 올바른 설정 조합을 찾을 수 없었습니다.

모든 파일을 변환하고 파일을 LF유지하고 싶습니다 LF.

비고 : 내가 사용 autocrlf = input했지만 파일을 커밋 할 때 파일을 복구합니다. 사용하도록 강제하고 싶습니다 LF.

아마 나는 그렇게 분명하지 않다 : 저장소가 이미 사용하고 LF있지만 파일은 msysgit을 사용하여 체크 아웃 CR+LF내가 그들을 얻을 수 msysgit을 강제 할 LF: 유닉스 라인 엔딩을 강제 .

>git config --list | grep crlf
core.autocrlf=input

그의 질문에 OP가 추가되었습니다.

msysgit을 사용하여 체크 아웃 한 파일을 사용 CR+LF하고 있으며 msysgit을 위조하여LF

첫 번째 간단한 단계는 여전히 .gitattributes파일에 있습니다.

*.txt -crlf

올바른 eol 파일에 대한 crlf 변환을 피하기 위해.

크로스 플랫폼 git 구성에 대한 모범 사례를 참조하십시오 .


그러나 두 번째로 강력한 단계는 gitattribute 필터 드라이버를 포함 하고 얼룩 단계를 추가합니다.

필터 드라이버

작업 트리를 업데이트 할 때마다 스크립트는에서 지정한 파일에 대해서만 .gitattributes강제 LF eol및 다른 형식 옵션을 적용 할 수 있습니다.
" clear"스크립트가 아무 작업도 수행하지 않으면 파일을 변환 한 후 커밋 한 후 따라야하는 형식을 정확하게 적용하게됩니다.


Windows에서 LF 엔딩을 얻는 올바른 방법은 먼저 다음 core.autocrlffalse같이 설정 하는 것입니다 .

git config --global core.autocrlf false

msysgit을 사용하는 경우 true시스템 설정에서 설정하기 때문에이 작업을 수행해야합니다 .

이제 git은 줄 끝 정규화를 수행하지 않습니다. 당신이 파일을 원하는 경우에 당신이 정상화 될 체크인이 수행 세트 text=auto에서 .gitattributes모든 파일에 대해 :

* text=auto

그리고 다음 core.eol으로 설정 하십시오 lf.

git config --global core.eol lf

이제 다음을 실행하여 단일 저장소를 crlf (작업 디렉토리에서!)로 전환 할 수도 있습니다.

git config core.eol crlf

구성을 완료 한 후 git에서 repo의 모든 파일을 정규화 할 수 있습니다 . 이렇게하려면 리포지토리의 루트로 이동하여 다음 명령을 실행하십시오.

git rm --cached -rf .
git diff --cached --name-only -z | xargs -n 50 -0 git add -f

이제 git이 작업 디렉토리 의 파일을 정규화하려면 다음 명령을 실행 하십시오 .

git ls-files -z | xargs -0 rm
git checkout .

나는이 대답에 상당히 자주 되돌아 가지만, 이것들 중 어느 것도 나에게 맞는 것은 아닙니다. 즉, 나에게 맞는 대답은 다른 사람들의 혼합입니다.

내가 찾은 것은 다음과 같습니다.

 git config --global core.eol lf
 git config --global core.autocrlf input

이러한 전역 설정이 설정 한 후 체크 아웃 된 REPOS를 들어, 모든은 (는) REPO에 무엇으로 체크 아웃 할 것이다 - 희망 LF( \n). 체크인시 모든 CRLF것이 변환됩니다 LF.

이미 체크 아웃 한 기존 리포지토리 (리포지토리에는 올바른 줄 끝이 있지만 작업 복사본은 아님)를 사용하여 다음 명령을 실행하여 문제를 해결할 수 있습니다.

git rm -rf --cached .
git reset --hard HEAD

이렇게하면 프롬프트 rm( r)없이 현재 디렉토리 ( ) 에서 -f편집 한 파일 ( )을 제외한 모든 파일이 재귀 적으로 ( ) 삭제됩니다 . 그런 다음 모든 파일을 실제 줄 끝이있는 상태 (리포지토리의 내용과 일치)로 되돌립니다.--cached.reset

리포지토리에서 파일의 줄 끝을 수정 해야하는 경우 IntelliJ 또는 Sublime Text와 같이 대량으로 작업을 수행 할 수있는 편집기를 가져 오는 것이 좋습니다.


문맥

만약 너라면

  1. 모든 사용자가 텍스트 파일에 대해 LF 줄 끝을 갖도록하고
  2. 모든 사용자가 git 구성을 변경하도록 할 수는 없습니다.

git 2.10부터 시작할 수 있습니다. 2.10 이상이 필요합니다. 2.10은 eol = lf와 함께 text = auto 동작을 수정 했기 때문 입니다. 소스 .

해결책

.gitattributes다음 내용을 가진 git 저장소의 루트에 파일을 넣으십시오 .

* text=auto eol=lf

커밋하십시오.

선택적 조정

.editorconfig최신 툴링으로 원하는 줄 끝으로 새 파일을 만들도록 저장소 루트에를 추가 할 수도 있습니다 .

# EditorConfig is awesome: http://EditorConfig.org

# top-most EditorConfig file
root = true

# Unix-style newlines with a newline ending every file
[*]
end_of_line = lf
insert_final_newline = true

core.autocrlf=input원하는 설정에 적합하지만 변경 사항을 적용하려면 a git update-index --refresh및 / 또는 a 를 수행해야 할 수도 있습니다 git reset --hard.

core.autocrlf설정하면 inputgit은 체크 아웃시 줄 바꿈 변환을 적용하지 않습니다 (따라서 리포지토리에 LF가 있으면 LF를 얻습니다).하지만 엉망이되어 작업에서 일부 CRLF를 도입해야합니다. 어떻게 든 복사하면 그들은 리포로 들어 가지 않을 것입니다.

참고 URL : https://stackoverflow.com/questions/2517190/how-do-i-force-git-to-use-lf-instead-of-crlf-under-windows

반응형