오랜만에 복습 차원으로 git add 했더니 전에 git을 연습할 때는 나오지 않았던 위와 같은 에러 메시지가 출력되었습니다. 물론 git status로 상태를 확인했을 때에 문제될 것은 없었지만, 경고 메시지가 뜨는 것이 찝찝하여 해결방법을 한번 정리해보고자 합니다.
warning: LF will be replaced by CRLF in hello.txt.
The file will have its original line endings in your working directory
경고문을 직역해보면
경고: hello 텍스트 파일 안에 LF는 CRLF로 대체될 것입니다.
해당 파일은 작업 디렉토리에 원래 줄 끝에 있습니다.
????
LF는 무엇이며, CRLF는 또 무엇인가??
컴퓨터가 등장하기 전 사람들은 처음에 펜을 이용하여 종이에 글을 적었고, 다음으로 타자기를 활용해 종이에 글을 찍어내었습니다. 이 때 이 타자기에서 유래한 것이 LF와 CRLF라고 하는데요.
| LF(Line Feed)
개행 문자를 뜻하는 말로, 저희가 키보드에서 enter를 입력하면 줄이 바뀌는 것처럼 타자기에서 해당 장치를 이용해 줄바꿈을 합니다.
문자열 표기: \n
ASCII 코드: 10
| CR(Carriage Return)
키보드에서 Home과 같은 기능을 합니다. 즉, 해당 줄에서 커서를 앞으로 이동하거나 맨앞으로 이동하는 기능을합니다.
문자열 표기: \r
ASCII 코드: 13
따라서 위 영상에서 보시는 바와 같이 타자기를 사용시 LF와 CR을 동시에 진행하면서 작성하는 것을 보실 수 있습니다.
| 문제 발생 원인
협업할 때 겪는 소스 포맷(Formatting)과 공백 문제는 미묘하고 난해하다. 동료 사이에 사용하는 플랫폼이 다를 때는 특히 더 심하다. 다른 사람이 보내온 Patch는 공백 문자 패턴이 미묘하게 다를 확률이 높다. 편집기가 몰래 공백문자를 추가해 버릴 수도 있고 크로스-플랫폼 프로젝트에서 Windows 개발자가 라인 끝에 CR(Carriage-Return) 문자를 추가해 버렸을 수도 있다. Git에는 이 이슈를 돕는 몇 가지 설정이 있다.
core.autocrlf
Windows에서 개발하는 동료와 함께 일하면 라인 바꿈(New Line) 문자에 문제가 생긴다. Windows는 라인 바꿈 문자로 CR(Carriage-Return)과 LF(Line Feed) 문자를 둘 다 사용하지만, Mac과 Linux는 LF 문자만 사용한다. 아무것도 아닌 것 같지만, 크로스 플랫폼 프로젝트에서는 꽤 성가신 문제다. Windows에서 사용하는 많은 편집기가 자동으로 LF 스타일의 라인 바꿈 스타일을 CRLF로 바꾸거나 Enter 키를 입력하면 CRLF 스타일을 사용하기 때문이다.
| 에러 메시지 해결방법, autocrlf 비활성화
autocrlf란?
git에서 check-in, check-out을 할 때 파일을 어떻게 처리할지 설정하는 변수를 말합니다.
Git은 커밋할 때 자동으로 CRLF를 LF로 변환해주고 반대로 Checkout 할 때 LF를 CRLF로 변환해 주는 기능이 있습니다. core.autocrlf 설정으로 이 기능을 켤 수 있습니다. Windows에서 이 값을 true로 설정하면 Checkout 할 때 LF 문자가 CRLF 문자로 변환됩니다.
$ git config --global core.autocrlf true
라인 바꿈 문자로 LF를 사용하는 Linux와 Mac에서는 Checkout 할 때 Git이 LF를 CRLF로 변환할 필요가 없습니다. 게다가 우연히 CRLF가 들어간 파일이 저장소에 들어 있어도 Git이 알아서 고쳐주면 좋을 것입니다. core.autocrlf 값을 input으로 설정하면 커밋할 때만 CRLF를 LF로 변환합니다.
$ git config --global core.autocrlf input
이 설정을 이용하면 Windows에서는 CRLF를 사용하고 Mac, Linux, 저장소에서는 LF를 사용할 수 있습니다.
Windows 플랫폼에서만 개발하면 이 기능이 필요 없습니다. 이 옵션을 false 라고 설정하면 이 기능이 꺼지고 CR 문자도 저장소에도 저장됩니다.
$ git config --global core.autocrlf false
| 결론
경고창이 뜬 이유는 위와 같이 변환을 해준다는 것을 알려주기 위함이었고, 해당 경고창을 보고 싶지 않다면 false로 설정해주면 됩니다.
| 참고문헌
https://git-scm.com/book/ko/v2/Git%EB%A7%9E%EC%B6%A4-Git-%EC%84%A4%EC%A0%95%ED%95%98%EA%B8%B0
'코딩 | 개념 정리 > Git & GitHub' 카테고리의 다른 글
GIT 기초 사용법 2_브랜치 (0) | 2021.07.13 |
---|---|
Git 기초 사용법 1_버전 관리와 커밋 (0) | 2021.07.05 |
Github 디렉토리, repositories 삭제하는 방법 (0) | 2021.02.15 |
Git 기본 명령어 모음 (0) | 2021.02.13 |
Git bash의 홈 디렉토리 변경하는 방법 (2) | 2021.02.13 |