I code, therefore I exist.

웹 프론트 엔드 개발을 공부하고 있는 Ocean이라고 합니다. 만나서 반갑습니다.

ETC/Git

[Git warning] LF will be replaced by CRLF the next time Git touches it

Ocean 2023. 9. 26. 16:40

평소와 다름 없이 CRA로 생성한 React 프로젝트를 git add 했는데 갑자기 마주한 Warning

warning: in the working copy of '.gitignore', LF will be replaced by CRLF the next time Git touches it
warning: in the working copy of 'package-lock.json', LF will be replaced by CRLF the next time Git touches it
warning: in the working copy of 'package.json', LF will be replaced by CRLF the next time Git touches it
warning: in the working copy of 'public/index.html', LF will be replaced by CRLF the next time Git touches it
warning: in the working copy of 'public/robots.txt', LF will be replaced by CRLF the next time Git touches it
warning: in the working copy of 'src/App.js', LF will be replaced by CRLF the next time Git touches it
warning: in the working copy of 'src/index.css', LF will be replaced by CRLF the next time Git touches it
warning: in the working copy of 'src/index.js', LF will be replaced by CRLF the next time Git touches it

처음 보는 경고 메세지이기 때문에 열심히 찾아봤더니 나름의 이유가 있었다.

 

간단하게 요약하자면,

Windows 운영체제에서는 줄바꿈을 CRLF로 사용하고,

(CRLF : Carriage Return + Line Feed, \r\n : 커서를 앞으로 옮기고 줄을 바꾼다)

Mac, Linux 계열의 운영체제에서는 줄바꿈을 LF로 사용하는데

(LF : Line Feed, \n : 줄바꿈)

현재 프로젝트에서 사용하고 있는 로컬 Git에,

상이한 줄바꿈을 어떻게 처리할 지 설정이 안되어있어 경고창이 뜨는 것이다.

 

이는 예를 들어, 이러한 상황을 방지하기 위한 경고창이다.

 

1. 팀원 A가 Window에서 React 프로젝트를 생성 후 Git에 Push를 했다.

2. 팀원 B가 Mac Os에서 해당 Git을 Pull한 후, 소스 코드는 건들지 않고, 줄바꿈만 살짝 건드렸다.

3. 팀원 B의 Git이 소스코드는 변하지 않았지만, 줄바꿈 CRLF가 LF로 변경 되었기 때문에, File Changes로 인식하게 된다.

 

만약 해당 프로젝트를 하나의 운영체제에서 개발한다면 이러한 경고 메세지는 무시해도 무방하지만

Mac 사용자, Window 사용자가 모두 참여하는 프로젝트라면

줄바꿈, 즉 개행 문자에 대한 Git 설정을 하는 것이 추 후에 발생할 여지가 있는 문제를 방지하는 것이다.

 

해결법

1. Default

git config --global core.autocrlf false

Default 설정. CRLF, LF 변경 없이 Git에 그대로 반영한다.

앞서 말한 문제가 발생할  수 있다.

 

 

2. Windows 설정

git config --global core.autocrlf true

 

해석하자면, check-in 할 때는 CRLF를 LF로 변경하고, check-out 할 때는 반대로 LF를 CRLF로 변경하란 뜻이다.

CRLF를 사용하는 운영체제, 즉 Windows에서 사용하면 된다.

만약 Global이 아닌 로컬에서만 적용하고 싶으면, --global을 빼면 된다.

 

 

3. Mac, Linux 설정

git config --global core.autocrlf input

check-in 시킬 때, CRLF가 있다면 LF로 변경하며 check-out할 때는 변경 없이 LF 그대로 가져오도록 하는 설정이다.

 

 


 

사소한 경고 메세지라도

무시하지 않고,

온전히 이해하고 넘어가는 게

좋은 프로그래머가 되는 조건이지 않을까 싶다.

 

앞으로도 다양한 경고 메세지를 마주할텐데,

꼭 하나 하나 잊지 않고 이해하고 넘어가고 싶다.