Git 줄바꿈 설정: .gitattributes의 text·eol과 core.autocrlf는 어떻게 다른가
git diff에 ^M이 보일 때 확인할 설정을 Git 공식 문서 기준으로 정리했습니다. core.autocrlf와 .gitattributes의 text·eol이 각각 무엇을 정하는지, 이미 CRLF로 커밋된 파일은 어떻게 고치는지 다룹니다.
Windows에서 작업한 파일을 git diff로 보면 새로 추가된 줄 끝에 ^M이 찍힐 때가 있습니다. Git FAQ에 따르면 Git은 기본적으로 Unix 줄바꿈(LF)을 기대하고, Windows 줄바꿈(CRLF)의 CR을 줄 끝 공백으로 취급해 ^M으로 보여 줍니다. 줄 끝 공백은 기본적으로 새로 추가된 줄에서만 표시됩니다.
줄바꿈을 다루는 설정은 core.autocrlf와 .gitattributes 두 군데에 있고, 역할이 다릅니다.
변환이 일어나는 두 지점
줄바꿈 변환은 파일이 텍스트로 취급될 때만 일어납니다. 인덱스에 추가할 때 줄 끝이 LF로 정규화되고, 작업 디렉터리로 꺼낼 때는 설정에 따라 LF가 CRLF로 바뀔 수 있습니다.
텍스트 여부는 text 속성이 정합니다. 속성이 없는 파일은 core.autocrlf를 따릅니다.
core.autocrlf
core.autocrlf=true는 모든 파일에 text=auto를 주고 core.eol을 crlf로 둔 것과 같습니다. input이면 작업 디렉터리로 꺼낼 때 변환하지 않습니다.
gitattributes 문서는 이 설정을 어떤 저장소에서든 자신의 작업 디렉터리를 CRLF로 두고 싶을 때 쓰는 것으로 소개합니다. 내가 추가하는 텍스트 파일은 LF로 정규화하지만, 저장소의 모든 텍스트 파일에 정규화를 강제하지는 않습니다. 누가 파일을 추가하든 같은 규칙을 적용하려면 text 속성을 저장소에 지정해야 합니다.
.gitattributes
커밋된 .gitattributes는 저장소와 함께 공유됩니다. 다만 각 클론의 $GIT_DIR/info/attributes가 더 높은 우선순위를 가지므로 로컬 설정은 다를 수 있습니다.
* text=auto
*.sh text eol=lf
*.bat text eol=crlf
*.jpg -text
text=auto: 파일 내용을 보고 Git이 텍스트 여부를 판단합니다.text: 파일을 텍스트로 취급합니다.-text: 줄바꿈 변환을 시도하지 않습니다.eol=lf,eol=crlf: 작업 디렉터리의 줄바꿈을 고정합니다.
eol은 text나 text=auto일 때 효과가 있습니다. text를 지정하지 않았다면 eol 지정이 text도 자동으로 설정합니다.
eol이 없는 텍스트 파일은 core.autocrlf나 core.eol을 따릅니다. 둘 다 설정되어 있지 않으면 Windows에서는 CRLF, 그 밖의 플랫폼에서는 LF로 꺼냅니다. core.eol의 기본값은 native이며, core.autocrlf가 true나 input이면 무시됩니다.
Git FAQ는 텍스트 파일을 LF로 저장하고 텍스트와 바이너리를 .gitattributes에 명시하라고 권합니다. 셸 스크립트는 LF, 배치 파일은 CRLF여야 한다는 예도 듭니다.
이미 CRLF로 커밋된 파일
text=auto는 인덱스에 이미 CRLF로 저장된 파일을 변환하지 않습니다. 따라서 .gitattributes만 추가해서는 기존 파일이 그대로 남습니다.
Git 문서의 절차는 깨끗한 작업 디렉터리에서 .gitattributes를 만든 뒤 다음 명령을 실행하고, git status로 대상을 확인해 커밋하는 것입니다.
git add --renormalize .
--renormalize는 단독으로 있는 CR은 건드리지 않습니다.
현재 줄바꿈 상태는 git ls-files --eol로 확인할 수 있습니다. 이 사이트 저장소에서 Git 2.39.5(Apple Git-154)로 실행한 결과 중 한 줄은 다음과 같습니다.
i/lf w/lf attr/text=auto eol=lf .gitattributes
i/는 인덱스, w/는 작업 디렉터리의 줄바꿈, attr/는 적용된 속성입니다.
주의할 점
git-config 문서는 CRLF 변환이 데이터를 손상시킬 가능성이 조금 있다고 설명합니다. LF와 CRLF가 섞인 파일은 커밋 후 원래 상태를 재현할 수 없고, 텍스트로 잘못 분류된 바이너리는 깨질 수 있습니다. 그런 파일에는 -text를 지정합니다.
core.safecrlf=true이면 되돌릴 수 없는 변환을 거부하고, warn이면 경고만 표시합니다.
이 글은 Git 2.56.0 문서를 기준으로 했습니다. 에디터의 줄바꿈 설정과 Git for Windows 설치 프로그램의 선택지는 다루지 않았습니다.
참고한 문서
모두 Git 프로젝트의 문서입니다. 줄바꿈 변환은 독립된 표준이 아니라 Git의 구현 동작입니다.
- gitattributes:
text,eol, 줄바꿈 변환, 속성 파일 우선순위. - git-config: Git 2.56.0 설정 문서.
- gitfaq:
^M, LF·CRLF, 크로스 플랫폼 권장 사항. - Documentation/config/core.adoc:
core.autocrlf,core.eol,core.safecrlf원문. - git-add:
--renormalize. - git-ls-files:
--eol,i/,w/,attr/.
링크와 내용은 2026년 9월 30일에 확인했습니다.