창에서 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파일에 있습니다.

# 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.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가 표시됩니다). 어떻게 든 복사하면 그들은 리포로 들어 가지 않을 것입니다.


답변

이 문제에 대한 해결책은 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

행운을 빌어 요