창에서 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.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를 얻습니다).하지만 엉망이되어 작업에서 일부 CRLF를 도입해야합니다. 어떻게 든 복사하면 그들은 리포로 들어 가지 않을 것입니다.
'Programing' 카테고리의 다른 글
각 '언제'블록에 여러 값이있는 사례 설명 (0) | 2020.03.18 |
---|---|
Visual Studio 코드에서 모든 메서드 축소 (0) | 2020.03.18 |
C #의 문을 사용하여 중첩 (0) | 2020.03.18 |
Webpack으로 디렉토리를 빌드하기 위해 정적 파일을 복사하는 방법은 무엇입니까? (0) | 2020.03.18 |
Linux에서 자동으로 명령 반복 (0) | 2020.03.18 |