본문 바로가기
Programming/IDE

[git] warning: LF will be replaced by CRLF in smth

by peter paak 2020. 10. 5.
728x90

윈도우에서 작업을 하다보면 git commit 시 위와 같은 warning 메세지를 볼 때가 있습니다.
이는 Linux기반의 OS에서는 보이지 않는데 윈도우에서는 종종 보곤 합니다.

에러메세지를 살펴보면 아래와 같습니다.

LF는 package-lock.json에서 CRLF로 바뀔 것이다
파일은 working directory의 오리지널 라인 엔딩을 가질 것이다

즉, LF는 CRLF로 바뀔 것이다 라고 나옵니다. 여기서 LF와 CRLF에 대해 알아야 합니다

  • LF : Line Feed = \n = 줄바꿈
  • CR : Carriage Return = \r = 제일 첫줄로 커서 보내기

윈도우에서 라인 변경 시(엔터 효과) CRLF를 따르고 리눅스에서는 LF 방식을 따르게 됩니다.
즉, 윈도우는 제일 첫줄로 커서를 이동한 후 다음 줄로 이동하고
리눅스는 바로 다음 줄로 이동하게 됩니다.

윈도우에서 작성한 코드의 줄바꿈 규칙과 리눅스 계열에서 작성한 코드의 줄바꿈 규칙이 다르기 때문에 git에 올라온 코드를 git이 CRLF에서 LF로 LF에서 CRLF로 변경해주는 작업을 해줍니다.

이를 자동으로 조절할 것인지 아닌지를 git의 autocrlf라는 옵션으로 조절할 수 있습니다.

git config core.autocrlf true

위의 에러메세지는 윈도우에서 autocrlf 설정이 true로 되어있기 때문에 발생하는 현상입니다.
아래 명령으로 현재 git이 가지고 있는 옵션을 한번 보도록 하겠습니다

git config --list

저는 core.autocrlf=true로 되어 있습니다.
core.autocrlf=true이면 git에서 CRLF가 LF로 LF가 CRLF로 자동으로 변경해주는 옵션이 됩니다.
그외에 input,false 옵션이 있는데 이는 git 공식문서에 자세히 나와있으니 참고하시기 바랍니다.

저같은 경우는 window에서 작업할 때도 있고 mac에서 작업할 때도 있어서 해당 옵션을 true로 맞춰 놓았습니다.
하지만 계속 저 warning 메세지가 나와서 뭔가 찝찝했었는데요. 아래의 명령어로 autocrlf 옵션을 그대로 놔둔 채 warning만 없앨 수 있었습니다.

git config --global core.safecrlf false

safecrlf 옵션은 true, warning, false가 있습니다. true의 경우는 autocrlf=true일 때, CRLF에서 LF, LF에서 CRLF로 변환을 자유롭게 하도록 하는 옵션이고, warning은 warning만 없애고 변환을 자연스럽게 못하게 막는 옵션이 됩니다. 저희가 설정한 falsewarning 메세지만 없애는 옵션이 됩니다. 자세한 내용은 git 공식문서를 참조하시면 될 것 같습니다.

해당 명령어를 실행하고 다시 git config --list 명령어로 옵션을 확인해보면 다음과 같이 변경되게 됩니다.

이후 commit을 하면 설정을 유지한채로 warning이 없이 잘 커밋이 됩게 됩니다.

728x90