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
파일에 있습니다.
# 2010
*.txt -crlf
# 2020
*.txt text eol=lf
(같은 코멘트에 주목 하여 손자 를 참조하여, .gitattributes
최종의 온라인 변환 어떤 피하기 위해) CRLF
올바른 인 파일을 변환 eol
.
그리고 항상 모든 버전의 파일에 git config --global core.autocrlf false
적용되는 변환을 비활성화하는 것이 좋습니다.
크로스 플랫폼 git 구성에 대한 모범 사례를 참조하십시오 .
Git 2.16 (2018 년 1 분기) 이후로git add --renormalize .
해당 .gitattributes
설정을 즉시 적용 할 수 있습니다 .
그러나 두 번째로 강력한 단계는 gitattribute 필터 드라이버를 포함 하고 얼룩 단계를 추가합니다.
작업 트리를 업데이트 할 때마다 스크립트는에서 지정한 파일에 대해서만 .gitattributes
강제 LF eol
및 다른 형식 옵션을 적용 할 수 있습니다.
” clear
“스크립트가 아무 작업도 수행하지 않으면 파일을 변환 한 후 (커밋 한 후에) 따라야하는 형식을 정확하게 적용하게됩니다.
답변
Windows에서 LF 엔딩을 얻는 올바른 방법은 먼저 다음 core.autocrlf
과 false
같이 설정 하는 것입니다 .
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와 같이 대량으로 작업을 수행 할 수있는 편집기를 가져 오는 것이 좋지만 좋은 사람이이를 지원할 것이라고 확신합니다.
답변
문맥
만약 너라면
- 모든 사용자가 텍스트 파일에 대해 LF 줄 끝을 갖도록하고
- 모든 사용자가 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
설정하면 input
git은 체크 아웃시 줄 바꿈 변환을 적용하지 않습니다 (따라서 리포지토리에 LF가 있으면 LF가 표시됩니다). 어떻게 든 복사하면 그들은 리포로 들어 가지 않을 것입니다.
답변
이 문제에 대한 해결책은 https://help.github.com/en/github/using-git/configuring-git-to-handle-line-endings 에서 찾을 수 있습니다.
Windows에서이 문제를 해결하는 방법에 대한 간단한 설명 :
줄 끝에 대한 전역 설정 git config core.autocrlf 명령은 Git에서 줄 끝을 처리하는 방법을 변경하는 데 사용됩니다. 단일 인수가 필요합니다.
Windows에서는 구성에 true를 전달하기 만하면됩니다. 예를 들면 다음과 같습니다. C :> git config –global core.autocrlf true
행운을 빌어 요