문제 상황
다른 로컬 컴퓨터에서 AI 관련 작업한 코드를 받아서 필자의 리포지토리에 한꺼번에 commit 하려고 했다.
staging area에 올릴려고 git add . 명령어를 치는데 아래 사진과 같은 오류가 발생했다.
주요 오류 메시지는 'LF will be replaced by CRLF' 가 있거나 반대로 'CRLF will be replaced by LF' 가 있는 경우이다.
문제 원인
Windows 쓰는 개발자와 Mac/Linux을 쓰는 개발자가 Git으로 협업을 할 때 생기는 문제이다.
이 에러를 Whitespace 에러 라고 한다.
[한 줄의 끝을 처리하는 방식]
Windows : CR(Carriage Return)와 LF(Line Feed)인 CRLF로 이루어져 있다.
Unix : LF(Line Feed)인 LF로 이루어져 있다.
Git 입장에서 이 두개가 혼합되어 있는 경우 어느 것을 선택할지가 혼란이 온 것이다.
[오류 문구]
Unix 사용자 : CRLF will be replaced by LF in ~
Windows 사용자 : LF will be replaced by CRLF in ~
문제 해결
core.autocrlf 기능을 키면 Git이 CRLF와 LF을 자동으로 변환해준다.
예를 들어,
- commit 과 같이 개발자가 깃(Git)에 코드를 추가할 때는 CRLF -> LF 로 변환
- clone 과 같이 깃(Git)의 코드를 개발자가 조회할 때는 LF -> CRLF 로 변환
[Windows OS 사용자]
git config --global core.autocrlf true
* 변환이 항상 실행되도록 한다.
* 단, 시스템 전체가 아닌 현재 프로젝트에만 적용하고 싶은 경우 --global 옵션을 뺀다.
[Linux/MAC OS 사용자]
git config --global core.autocrlf true input
* 조회 시 LF->CRLF로 변환하는 것을 원치 않을거기 때문에 input 명령어를 추가해 단방향으로만 변환이 되도록 한다.
[core.autocrlf 기능 끄기]
core.autocrlf 기능을 끄고 싶다면 아래 명령어를 사용한다.
git config --global core.safecrlf false
참고자료 : https://git-scm.com/book/en/v2/Customizing-Git-Git-Configuration#Formatting-and-Whitespace