git warning: LF will be replaced by CRLF in ’filename’
Git을 사용하다 보면 파일을 추가할 때 위의 경고 메세지를 본 적이 있을 것이다. 내가 모르는 경고나 오류 메세지는 항상 무서워해야한다. LF와 CRLF의 뜻을 몰랐기 때문에 이것부터 먼저 알아보도록 하자
캐리지 리턴(CR)과 라인 피드(LF)란?
아주 익숙한 '\n' 이 이스케이프 문자는 보통은 Enter로 기억되어있다. 줄넘김, 줄내림 정도?
근데 '\r' 이 이스케이프 문자가 익숙한사람은 개발자 지망생들 중에선 내생각엔 아주 적을 것 같다.
각 문자의 뜻은
'\r' : Carriage Return(CR), 맨 앞으로 이동
'\n' : Line Feed(LF), New Line 줄 넘김
위에서 등장한 CRLF는 바로 이 두개의 문자를 합친 내용이다. '\r\n'
캐리지 리턴이 타자기랑 관련이 있다고?
캐리지 리턴은 사실은 타자기에서 생긴 말이다.
타자기의 기본 사용 원리는 사실 글자가 써지는 물리적 위치는 가운데로 고정이 되어있는데, 실제로는 종이가 움직이면서 멋진 글이 써지는 원리이다. 이 때 종이를 움직이는 부품을 캐리지 라고 부른다!
캐리지 리턴을 직역하면 종이를 운반해서 되돌려놓는다 라는 뜻이 되는것이다.
만약 한줄을 다 치면, 종이를 한 줄 간격만큼 위로 올려주고, 다시 맨 앞부터 글씨를 쓰기 위해 종이를 오른쪽 끝으로 이동시켜야 한다.
종이를 한줄 위로 올리는 것을 LF(Line Feed)라고 하고, 종이를 오른쪽 끝으로 보내 입력될곳이 왼쪽 끝이 되도록 하는 것을 CR(Carriage Return) 이라고 한다.
물론 코딩할땐 \n 하면 충분하지 \r\n 와 같은 방식으로 줄넘김을 수행하지는 않는다.
git warning: LF will be replaced by CRLF in ’filename’
git이 경고하고 싶은 것은 “네가 {filename} 파일에서 그냥 엔터만 쳐서 줄넘김 한것 같은데, 그냥 내 매뉴얼대로 캐리지 리턴 까지 같이 하겠다.” 라는 말이다.
그럼 왜 저렇게 해야하나?
개행 문자라고 알고있는 \\n 은 End Of Line(EOL)이라고도 불린다. 근데 이 End Of Line, 즉 엔터키를 코드에 입력하면, OS별로 End of Line이 그냥 LF인경우도 있고 CRLF인 경우도 있어서, Git 입장에서 헷갈릴 수가 있다.
윈도우즈는 '\n' 문자가 CRLF 기능을 수행하지만 다른 OS의 경우는 LF만 수행하는 경우가 있다는 것.
그래서 위의 경고문이 보기 싫었던 사람은 보통 아래의 config 설정을 통해서 저 경고가 뜨지 않도록 설정했을 것이다.
(Windows) git config --global core.autocrlf true
(Linux) git config --global core.autocrlf input
Git에서 autocrlf란, Checkout 시에 LF → CRLF, Commit 시에 CRLF → LF로 변환해주는 기능이며,
윈도우는 crlf가 엄청 많이 쓰였을 테니까, 자동으로 바꾸고(true)
리눅스, 유닉스 계열은 원래가 LF를 사용하지만, 사용자가 실수로라도 입력했을수 있는 crlf를 바꾼다.(input)