아시다시피 윈도우즈에서는 캐리지 리턴(Carriage Return, CR, \r)과 라인 피드(Line Feed, LF, \n)를 개행문자로 사용해 \r\n이 개행문자가 되고, 리눅스 계열과 MacOS에서는 라인 피드만 사용해 \n이 개행문자가 됩니다.

여러 OS에서 작업하거나 협업을 하는 경우 개행문자가 달라서 커밋 내역이 이상해지는 경우가 있습니다. 특히 윈도우와 리눅스에서 동시에 작업할 때 문제가 가끔 생깁니다.

git autocrlf 설정을 통해 개행문자를 통일시키는 법을 알아보겠습니다.

git autocrlf 설정으로 개행문자 통일하는 방법

 

git autocrlf 설정

먼저 깃에서 core.autocrlf는 파일을 git object에 체크인할 때 개행문자를 처리하는 옵션인데요, 3가지 설정이 가능합니다.

  • core.autocrlf = false (default)
    • Line ending에 상관 없이 git object에 파일 내용을 그대로 반영합니다
  • core.autocrlf = true
    • git object에 체크인할 때 CRLF를 LF로 변경합니다. 체크아웃할 때 LF를 CRLF로 변경합니다.
  • core.autocrlf = input
    • 체크인 시킬때 CRLF가 있으면 LF로 변경합니다. 체크아웃할 때는 리포지토리 텍스트 그대로 받아옵니다.

윈도우즈 운영체제는 true로, 리눅스 계열 운영체제는 input으로 설정하는게 가장 적합해보입니다.

# Windows
$ git config --global core.autocrlf true

# Linux, MacOS
$ git config --global core.autocrlf input

git diff에서 확인할 수 있는 캐리지 리턴 개행문자

git diff에서 줄 끝에 있는 ^M이 바로 CR(\r)입니다.

autocrlf를 input으로 설정했을 때 CRLF 파일을 체크인하면 나오는 메시지

autocrlf=input으로 설정한 뒤 CRLF로 개행문자가 설정된 파일을 체크인했을 때 "CRLF가 LF로 수정될 것이다"라는 warning 메시지를 확인할 수 있습니다.