# 문제 인식
ci관련 yaml을 만들고, push했는데 lint에서 아래와 같이 오류 메세지를 출력합니다.
해당 파일에 위치에 가도 에러날 곳은 전혀 보이지 않습니다.
알고 보았더니, CRLF, LF차이에 따르는 개행 에러 였습니다.
그러니까 os마다 개행방식이 조금씩 다릅니다!
CRLF에서 LF으로 개행방식을 수정하고 git diff로 바뀐부분을 비교해서 살펴보았더니 개행쪽에 수정이 있다 라고 표시해 둔 것을 보니, 컴퓨터 내부적으로 무언가가 바뀐 것 같습니다.
# 정보통신기술용어에 따른 CRLF와 LF 그리고 CR
정보통신기술용어해설집에 따르면 CRLF와 LF은 둘다 라인 종료 개행 문자(Line Termination)이라고 정의하고 있습니다.
- 한 줄이 종료되어 새로이 줄바꿈을 지시하는 특수문자 또는 확장열
운영체제 마다 라인 종료 처리 방식에 차이가 있다고 설명하고 있는데요.
컴퓨터 IDE툴에는 보이지 않지만, 컴퓨터 내부적으로 이런식의 처리를 하고 있습니다. CR과 LF, 두개가 사용되는 이유는 옛날에 타자기를 사용할 때도 썼던 방식입니다.
- CR (Carriage Return) \r : 커서를 현재 줄의 맨 왼쪽(맨 앞)으로 이동 (Home과 비슷)
- LF (LineFeed) \n : 현재 커서 위치를 변하지 않고 새로이 줄바꿈만 함 (Enter와 비슷)
- CRLF \r\n : 위에 두개를 같이 쓰는 것. 커서를 맨 앞으로 보내고, 커서를 아랫줄로 보낸다.
# OS별 줄 바꿈
- Unix/Linux 계열 : < LF >\n, 2bit
- DOS/window 계열 : <CR> + <LF> (ASCII 13 + ASCII 10) \r\n , 4bit
- Max OS 계열 : <CR> \r
그런데 요즘에는 CR을 무시하는 추세라고 합니다. vscode에서는 오른쪽 하단에 LF를 쓸건지, CRLF를 쓸건지 설정할 수 있습니다.
보통은 LF로 통일해줄 것을 권장합니다. 그 이유는 협업측면때문인데요. CRLF와 LF의 바이트 코드가 다르기 때문에 형상관리 툴에서 다른 코드로 인식합니다. commit할 때 줄바꿈 타입이 다른 경우 변경하지 않은 파일에 대해서도 변경된 것으로 인식하기 때문에 LF로 통일하는 것을 추천합니다.
# git에서 auto CRLF 혹은 LF 설정
앞서 문제인식목차에서 보았듯이 수정사항이 없음에도 lint에러에 걸리는 경우가 있습니다.
이를 방지하고자 git bash에서 core.autoclf를 설정하면 이를 미연에 방지할 수 있습니다.
여기에 설정가능한 옵션은 true, input, false(Default)가 있습니다.
- git config -global core.autocrlf true
- commit할 때, CRLF를 LF로 자동 변환하고, checkout하면 반대로 LF를 CRLF로 변환하여 리턴합니다. 따라서, window에서만 사용해야합니다.
- git config -global core.autocrlf input
- commit할 때, CRLF를 LF로 변환합니다. 보통 Linux나 Max에서 사용합니다.
- git config -global core.autocrlf false
- Windows에서만 개발할 경우, 자동변환이 필요없으니 false로 설정하시면 됩니다. 하지만 false로 하시면 저의 경우와 같이 에러가 걸릴 수 있으니 해당 옵션은 비추천합니다!
만약 해당 옵션을 취소하고 싶으시다면, .git/config파일을 열어서 autocrlf = false 해당 줄을 삭제하시면 됩니다! LF와 CRLF가 서로 byte수가 다르기 때문에 End of Line값을 동일시할 경우, byte수가 동일해지게 됩니다.
# reference
'Github' 카테고리의 다른 글
git push할 때마다 password 입력하라고 나올 때 해결법! (0) | 2023.12.14 |
---|---|
git conventional commit에 대해 살펴보기 (0) | 2023.12.14 |
Git 원격저장소에 있는 내가 원하는 PR commit만 gh로 가져오기~! (0) | 2023.12.14 |
현재 commit과 이전 commit 기록까지 전부 반영되는 branch꼬임현상 해결하기 (1) | 2023.12.05 |
나만의 git정리 (0) | 2023.11.05 |