최근 컴퓨터를 새로 장만했다. 기존 윈도우 10 --> 윈도우 11로 장착하고, cpu와 gpu 등등 업그레이드 하였다. 그리고, 기존 github에 있던 내 레포지토리들을 클론하여 새 컴퓨터에 다운받았다. 그리고, 하나의 레포지토리에서 작업을 시작하려던 찰나 의문의 현상이 발생했다.
이 프로젝트에 있는 모든 파일들이 changes 상태로 인식되어있던 것이다.
순간 흠칫했다. 원래 클론을 받으면 파일 전체가 changes 였던것이었나..? 내가 잘못알고 있었나..? 생각했지만, 그럴리는 없었다.
커밋하면 해결되려나..? 싶어서 git add . 후 commit 을 시도해보았는데, 다음과 같은 경고다 떴다.
LF? CRLF 가 무엇일까? 해당 경고를 자세히 알아보기로 하였다.
컴퓨터에서 텍스트 파일을 저장할 때, 한 줄이 끝났다는 것을 표시하는 문자(제어 문자) 를 줄바꿈 문자라 한다. 줄바꿈을 표현하는 방식은 운영체제마다 다르게 정의되어있다고 한다. 생각해보니, 기존 레포지토리의 작업은 mac 에서 진행했고, 새로 구매한 컴퓨터는 window 이니 발생한 문제였다.
윈도우는 줄바꿈을 두개의 문자로 표현한다.
\r (Carriage Return) : 커서를 맨 앞으로 이동
\n (Line Feed) : 다음 줄로 이동
줄바꿈에 두개가 필요한 이유는 오래된 전통에 엮여있다. 옛날 타자기로 컴퓨터를 하던 시절에, 줄을 바꾸르면 두번 입력해야했었다고 한다. 이 개념이 현재까지 넘어와서 윈도우는 \r\n 방식을 사용하게 되었던 것이다.
첫 번째 줄\r\n
두 번째 줄\r\n
세 번째 줄\r\n
mac과 리눅스는 한개의 문자 (\n) 만 사용한다. 윈도우에서 사용하는 불필요한 \r 을 제거했다.
첫 번째 줄\n
두 번째 줄\n
세 번째 줄\n
Git 에서 이 문제가 발생한 이유는, windows 에서 LF
파일을 체크아웃하면 CRLF로 변환되기 때문이다. 줄바꿈 변환이 다르다면 git이 파일 변경으로 감지하고, LF
인 모든 파일들을 changes로 감지하는 것이다. 참으로 억울하지 않는가? 바뀌었다고해서 이 모든 것을 다시 커밋할 수도 없는 노릇이다.
git에서의 해결 방안은 다음과 같다.
윈도우에서 LF
를 유지하려면 아래의 명령어 실행시켜주면 된다.
체크아웃할 때는 원본을 유지하면서, 커밋할 때는 LF
형식으로 변환시켜주는 방법이다.
git config --global core.autocrlf input