Git 줄 시퀀스 충돌

곽태욱·2020년 10월 8일
2

왜 발생할까

맥이나 리눅스에서 작업한 파일은 기본적으로 줄 시퀀스가 LF로 설정되어 있고 윈도우에서 작업한 파일은 CRLF로 설정되어 있다. 그리고 로컬에서 작업한 파일을 외부 Git 저장소(repository)에 push할 때 기본적으로 줄 시퀀스가 변경되지 않고 운영체제 설정대로 push된다. 그리고 외부 저장소를 클론해 로컬 저장소에 저장할 땐 파일의 줄 시퀀스가 해당 운영체제에 맞는 줄 시퀀스로 설정된다.

하지만 LF로 설정된 파일이 있는 저장소를 클론해서 윈도우에서 작업하려고 하면 기본적으로 모든 파일의 줄 시퀀스가 CRLF로 변경된 후 로컬 저장소에 저장된다. 이러면 파일 내용은 변경되지 않았는데 줄 시퀀스가 LF에서 CRLF로 바뀌었다는 이유만으로 커밋이 생성될 수 있다.

autocrlf

그래서 Git은 저장소에 push하기 전에 모든 파일의 줄 시퀀스를 LF로 자동 변경해주는 autocrlf 옵션을 제공한다. autocrlf = true로 설정하면 로컬 저장소에 있는 파일을 외부 저장소로 push할 때 모든 파일의 줄 시퀀스를 LF로 자동 변경해준다.

eol

하지만 Prettier나 Eslint를 사용하면 윈도우 환경에서 CRLF로 작업할 때 Delete ␍ eslint (prettier/prettier) 오류가 발생한다. Prettier나 Eslint는 파일 편집할 때도 LF로 작업하는 것을 권장하기 때문이다. 따라서 윈도우 환경에선 Git 설정을 아래와 같이 바꿔줘야 한다.

해결 방법

## 설정
> git config --global core.autocrlf input
> git config --global core.eol lf

## 설정 확인
> git config --global --list

이렇게 하면 모든 파일의 줄 시퀀스를 무조건 LF로 설정할 수 있다. 즉, 외부 저장소를 클론하면 모든 파일의 줄 시퀀스가 LF로 변경된 후 로컬 저장소에 저장되고, 로컬 저장소 파일을 외부 저장소로 push할 때도 모든 파일의 줄 시퀀스가 LF로 변경된 후 push된다. 따라서 윈도우에서 Prettier나 Eslint의 오류 없이, 운영체제 별 줄 시퀀스 충돌 없이 작업할 수 있다.

vscode는 LF 파일 편집도 지원하기 때문에 vscode를 사용하면 윈도우 환경에서 추가 설정 없이 그대로 작업할 수 있다.

자세한 Git 설정 방법
https://www.lesstif.com/gitbook/git-crlf-20776404.html

profile
이유와 방법을 알려주는 메모장 겸 블로그. 블로그 내용에 대한 토의나 질문은 언제나 환영합니다.

0개의 댓글