페어프로그래밍 후 가져온 코드에서 eslint의 Delete cr 경고가 확인되었다.
깃허브에 커밋된 내용을 살피던 중 파일의 마지막 줄에 개행(EOL)이 되어 있지 않아 빨간색 경고 아이콘이 표시되어 있음을 확인하였다.
문제를 해결하기 전에 일단 EOL이 무엇인지 다시 확인해보자.
EOL(end-of-line)은 개행문자 또는 줄바꿈문자라고 불리며, 새줄문자(newline)라고 칭하기도 한다. 텍스트의 한 줄이 끝남을 표시하는 문자(문자열)이다.
파일마다 EOL, 즉, 개행을 해야 하는 이유는 무엇일까?
이유는 POSIX 명세가 그러하기 때문이다.
많은 시스템과 프로그램이 이 표준을 따라 구현되어 있으며, 이를 위반 시 예기치 않은 동작이 일어날 수 있다고 한다. 또한, EOL이 있으면 파일을 구분하는 데에도 도움이 된다. 만약 파일의 끝에 개행이 되어 있지 않다면 깃허브에 커밋 시 경고 메시지를 볼 수도 있다
파일마다 직접 매번 개행을 꼼꼼히 해주거나...
.prettierrc (또는 .prettierrc.json) 파일(객체 내부)의 "endOfLine"프로퍼티를 "auto"로 설정한다.
'prettier/prettier': [
'error',
{
'endOfLine': 'auto',
}
]
기종이나 운영 체제에 따라 EOL을 나타내는 코드가 다를 수도 있다.
이 용어들은 예전에 타자기에서 새 줄을 바꾸는 방식을 의미한다.
ASCII 시스템에서는 EOL로 LF(line feed, '\n')와 CR(carriage return,'\r')이 주로 사용된다.
페어프로그래밍 및 협업 시 운영체제가 서로 다르면 EOL이 다를 수 있다.
Git에는 이 문제를 해결하기 위한 설정이 있다.
윈도우로 개발하는 분과 협업하면 EOL이 다른 문제가 생긴다. 위에서 살펴본 것처럼 윈도우는 EOl로 CR과 LF를 다 사용하지만, 맥과 유닉스는 LF만 사용하기 때문이다.
Git은 Checkout(저장소에서 가져올 때)할 때 LF를 CRLF로 변환해주고, Commit(저장소로 보낼 때) 시 자동으로 CRLF를 LF로 변환해주는 autocrlf 기능이 있다.
Windows
윈도우에서는 아래처럼 autocrlf를 true로 설정하여 위와 같은 효과를 기대한다.
git config --global core.autocrlf true
Linux, Mac OS
리눅스, 맥, 유닉스는 LF 만 사용하므로 autocrlf 값을 input 으로 설정하여 Commit할 때만 (혹시나 있을 수도 있는) CRLF를 LF로 변환하도록 설정한다.
git config --global core.autocrlf input
git global config 구성 후에는 코드를 다시 pull해와야 한다.
참고
파일 끝에 개행을 추가해야 하는 이유
파일마다 EOL(End Of Line)을 왜 넣어야 할까
Formatting and Whitespace
git 에서 CRLF 개행 문자 차이로 인한 문제 해결하기
새줄문자