개요
- 사야매 프로젝트를 하면서, git 협업 중 CRLF 이슈가 발생했다.
- lint 설정을 이용해서 CRLF -> LF로 변경해서 이슈는 해결했지만, LF로 변경하면 변경이 발생한 파일은 모두 커밋이 되는 불상사가 발생한다.
- 이에, CRLF/LF 이슈는 git 협업을 본격적으로 시작하기 전에 세팅해두어야 할 이슈인 듯 하여 이렇게 블로그로 정리하게 됐다.
문제원인: OS가 채택하는 기본 개행문자의 차이
- Window는 기본적으로 CRLF로 라인을 끝내고, Mac, Linux는 LF로 끝낸다고 합니다.
- 그래서 개발 협업에서 lint와 prettier를 쓰는 경우, 이 개행문자 차이가 에러로 인식될 수 있는 것입니다.
문제 해결 방법: git config & IDE setting
1) git config를 이용한 방법
(1) git config core.eol
- git 저장소에서 사용할 개행문자 자체를 특정하는 것이다.
- eol은 세가지 값을 가진다.
native(default값): OS의 기본 개행문자를 따른다.
crlf: crlf를 따른다.
lf: lf를 따른다.
- 예컨대, window 환경에서 core.eol을 lf로 설정했다면, commit으로 로컬 git 저장소에 저장할 때 lf로 저장되는 것이다.
(2) git config core.autocrlf
- 원격 레포지토리로 파일을 전송하거나 전달받을 때 개행문자를 변환하는 옵션이다.
- autocrlf는 세 가지 값을 가진다.
false(default 값): 원격 레포지토리에 있는 파일의 개행문자를 그대로 받는다.
true: window에서 주로 설정하는 값으로, push 시 LF로, pull 시 CRLF로 변경한다.
input: Linx에서 주로 설정하는 값으로, push, pull 모두 LF로 설정한다.
(번외) git config의 수준
- git config에는 저장소 > 전역 > 시스템 수준이 있고, 이 순서대로 우선순위가 적용된다고 한다.
- 예컨대 저장소 config가 전역 config보다 우선한다고 한다.
저장소는 레포지토리 단위로 설정되는 것이라 보면 되겠다.
전역은 사용자 단위인 것으로 보인다.
시스템은 git이 설치된 컴퓨터 단위인 것으로 보인다.
2) IDE setting
- 추측컨대, 만약 git config에서 1) core.eol이 naitve, 2) core.autocrlf가 false로 설정된 경우, IDE 설정 값이 영향을 미칠 것이다.
- IDE setting에서 두 가지 값을 설정함으로써 개행 문자를 세팅할 수 있다.
files.eol: IDE에서 파일을 저장할 때 세팅이다. /n(LF), /r/n(CRLF) 값이 있다.
endOfLine: prettier에서 파일 저장 시, 개행문자를 어떻게 자동완성할 지를 결정하는 key이다. 총 4가지 값이 있다.
if(default): override 키를 부수적으로 가지고, override에 들어가는 값들에 한해 정해진 개행문자로 설정한다. orveride가 없으면 일반적으로 모든 파일에 동일한 개행문자를 적용한다.
auto: 현재 파일의 개행문자를 기준으로 적용한다. 그래서 파일마다 개행문자가 달라질 수도 있다.
crlf: crlf로 통일한다.
lf: lf로 통일한다.
'TIL' 카테고리의 다른 글
git branch 잘 이용하기 | 2. 깔끔한 커밋 관리를 위한 rebase (1) | 2023.06.14 |
---|---|
git branch 잘 이용하기 | 1. git branch는 기점의 형상을 기억한다. (0) | 2023.06.14 |
eslint replace ... 에러 (0) | 2023.05.23 |
class 접근 제한자와 ()=> ({}) 용법 (0) | 2023.02.07 |
Redis X nestJS cache manager (0) | 2023.02.07 |