스프링 공부를 미루고 미루다가 발등에 불이 떨어진 지금 시점, 부랴부랴 인프런 강의 들으면서 git commit도 오랜만에 해보려고 했다.
근데 이게 웬걸, 커밋을 날렸더니 워닝이 뜨네! 얘는 무엇인고 하니..
CRLF line seperators 란?
CRLF는 new line으로 바꾸는 방법의 조합을 의미한다.
CRLF = CR(Carrige Return, \r) + LF(Line Feed, \n)
얘네는 과거 타자기가 있었을 시절부터 사용되었던 용어들로, 타자기를 연상해서 이해하면 쉽다.
CR (Carrige Return, \r)
커서를 줄 바꿈 없이 해당 line의 가장 앞으로 갖다놓는것을 의미한다.
타자기에서 한 줄을 올리지 않고 그대로 입력만 맨 앞으로 다시 갖다놓는 것이다.
LF (Line Feed, \n)
직역(?)하자면 줄을 먹여주는.. 말 그대로 종이를 한 줄 올려서 새로운 줄에 커서를 갖다놓는다고 생각하면 된다.
단, 새로운 줄(행)에 커서를 갖다놓을 뿐이지 커서의 위치(열)은 직전과 동일하다.
OS별 line seperator 차이
OS 종류 | line seperator |
MS | CRLF (\r\n) |
Linux (+ MacOS) | LF (\n) |
여기서 문제가 발생한다.
같은 문장을 입력하고 엔터를 때려도, byte 단위로 인식하는 컴퓨터의 세계에서는 MS에서 입력한 엔터와 Linux에서 입력한 엔터를 다르게 받아들일 수 있다는 말!
자칫하면 코드 바꾼거 없고 엔터만 새로 쳤을 뿐인데 코드 수정이 있다고 뜨거나, 맥에서 commit한 여러줄의 commit message를 윈도우에서 띄울때 '\r\n'이 없다고 줄바꿈이 안되어서 표시될 수도 있는 것이다.
git에는 이러한 불상사..를 막기 위한 옵션이 존재하는데, 그것이 바로 core.autocrlf 이다.
git config --globe core.autocrlf ?
git config 파일에,
그것도 내가 지금 일하는 현 프로젝트 뿐만 아니라 내 컴퓨터에서 일어나는 모~든 프로젝트에서 global하게,
core.autocrlf 옵션을 적용하겠다는 의미이다.
git config --globe
git docs - config globe 에 따르면,
--globe 옵션을 주고 config 파일을 건들 경우, 내 working directory에 있는 .git/config 파일이 아닌,
내 시스템에 걸려있는 git 그 자체의 config 파일인 ~/.gitconfig에 해당 옵션이 들어가는 것으로 쓰여있다.
인텔리제이에서 애초에 --globe 옵션을 주고 core.autocrlf를 물어본 이유는 아무래도 맥 <-> 윈도우 환경이라면 꼭 이 working directory에만 한정적으로 저 옵션을 줘서 될게 아니기 때문에, 물어본게 아닐까 싶다.
core.autocrlf
git docs - config core.autocrlf 에 따르면,
core.autocrlf = true 로 하는 것은 모~든 파일에 대해서 eol(end-of-line)을 'crlf'로 맞춘다는 것이다.
따라서, 내 working directory나 repository에 'lf' eol이 있는데, 이를 모두 'crlf'로 맞추고 싶다면 이 값을 true로 지정하면 된다.
나는 노트북은 맥북인데 데스크탑은 윈도우인 혼종을 쓰고 있기 때문에,
의 경우에는 true로 지정하면 되는 것이다. (왜? 윈도우에서는 'crlf'를 기본으로 사용하기 때문)
결론
나처럼 CRLF 옵션이 다른 두 OS를 모두 쓰고 있다면, LF를 쓰는 쪽에서 core.autocrlf = true 옵션을 주면 된다.
인텔리제이가 물어봐서 나는 Fix and commit을 눌렀고, ~/.gitconfig 파일을 확인해보면 해당 옵션이 잘 들어가 있는 것을 확인할 수 있다.
끝.
'잡다한 시리즈 > 개발' 카테고리의 다른 글
TDD를 배우고 경험해보며 쌓아가는 이야기 (0) | 2023.03.20 |
---|---|
[Java] 테스트 코드 생성하고 돌리기 (0) | 2023.02.12 |
Apple M1 macOS Gradle 설치하기 (0) | 2021.12.15 |
Apple M1 macOS Oracle Java 17 또는 OpenJDK 설치하기 (10) | 2021.12.14 |