
평소와 같이 커밋을 위해 git add .을 하는 순간 에러가 발생했다.
에러 전문은 아래와 같다.
warning: LF will be replaced by CRLF in 파일경로.
The file will have its original line endings in your working directory
파일경로에서 LF가 CRLF로 대체됩니다...
례..? 머선소리죠?
저희 사이 좋았자나여.. 제발 .. plz..
알아보니 LF(Line Feed)와 CRLF(Carriage Return Line Feed)는 줄을 바꾸는 방식을 의미했다.
이 용어는 아래 사진에 보이는 타자기에서 유래한 용어라고 한다.
LF(Line Feed)는 타자기 시절 페이퍼 롤을 한 줄씩 아래로 이동시키는 명령어였고
CR(Carriage Return)은페이퍼 롤을 우측으로(=커서는 맨 앞으로)이동시키기 위한 명령어였다. 현재 키보드의 Home키 정도로 생각하면 쉬울 것 같다.
정리하자면,
LF(\n)는 커서는 그대로 있는 상태에서 줄만 바꾸는 동작,
CR(\r)은 현재 키보드로 Home키 : 현재 커서를 맨 앞으로,
CRLF(\r\n)는 두 가지를 모두 수행하여 현재 키보드의 엔터키 정도가 되겠다.
타자기 시절부터 사용되어온 방식들을 컴퓨터 체제에도 그대로 적용되었는데,
기술이 발전되면서 효율과 성능을 최우선시 하다보니
줄바꿈을 할 때도 적은 자원을 활용하고 싶어 했다.
풀어서 말하자면, \n만 써도 줄바꿈이 되는데
굳이 4byte\r\n을 사용하면서 할 필요가 없어진 것이다.
하지만 운영체제별로 줄바꿈을 하는 방식이 달랐다.
윈도우는 기본 포맷인 CRLF를, 유닉스 계열은 LF를 채택하여 사용하고 있다.
이 둘은 바이트코드가 다르기에 다른 코드로 인식한다.
그래서 커밋할 때 줄바꿈 타입이 다르면 변경하지 않은 파일에 대해서도
변경된 거라고 잘못 인식하기에 한 가지로 통일해줘야만 하는 것이다.
(통상적으로 LF통일을 권장하고 있다고 한다.)
core.autocrlf 설정을 통해 개행문자를 통일해주면 된다.
default값이 false인데 true로 바꿔주면 CRLF를---> LF로 변경해준다.
따라서 윈도우즈에서는 true로ㅡ
리눅스 계열은 input으로 설정하는 게 가장 적합하다고 한다.
// 해당 프로젝트에만 적용할 경우
윈도우 $git config core.autocrlf ture
Mac $git config core.autocrlf input
시스템 전체에 적용할 것이라면 --global 옵션을 추가해줘야 한다.
// 시스템 전체에 적용할 경우
윈도우 $git congig --global core.autocrlf ture
Mac $git congig --global core.autocrlf input
바뀐 설정을 적용시키고 나니까
문제가 되었던 git add . 부터
git commit -m "커밋메시지",
git origin main과정까지 무사히 마칠 수 있었다!!
야호!