본문 바로가기

개발 & IT/개발 라이프 & 팁

Git 경고 해결하기: CRLF와 LF, 그게 뭔데?

문제 상황

Windows 환경에서 Flutter 프로젝트를 만들고 Git에 커밋하려는 순간, 이런 경고 메시지를 본 적 있으신가요?

warning: LF will be replaced by CRLF in [파일명]
The file will have its original line endings in your working directory

처음 보면 당황스럽지만, 사실 이 경고는 매우 흔한 상황입니다. 오늘은 CRLF와 LF가 무엇인지, 왜 이런 경고가 뜨는지, 그리고 어떻게 해결할 수 있는지 알아보겠습니다.

CRLF vs LF: 무엇이 다를까?

줄바꿈 문자의 역사

CRLF와 LF는 모두 **줄바꿈(Line Ending)**을 표현하는 방식입니다. 타자기 시대부터 내려온 차이인데요:

  • CR (Carriage Return, \r): 커서를 줄의 맨 앞으로 이동
  • LF (Line Feed, \n): 커서를 다음 줄로 이동

운영체제별 줄바꿈 방식

운영체제마다 줄바꿈을 표현하는 방식이 다릅니다:

운영체제 줄바꿈 방식 표현

Windows CRLF \r\n
Linux/Unix LF \n
Mac (Classic) CR \r
Mac (OSX 이후) LF \n

왜 Git에서 경고가 뜰까?

Git은 크로스 플랫폼 협업을 지원하기 위해 줄바꿈 문자를 자동으로 변환합니다.

Git의 기본 동작 (Windows)

  1. 저장소에 저장할 때: CRLF → LF로 변환
  2. 체크아웃할 때: LF → CRLF로 변환

이 과정에서 발생하는 것이 바로 그 경고 메시지입니다. "네가 작성한 파일의 CRLF를 LF로 바꿔서 저장할게!"라고 알려주는 것이죠.

왜 이렇게 복잡하게?

협업 환경을 생각해보면:

  • 개발자 A: Windows에서 CRLF로 코드 작성
  • 개발자 B: Mac에서 LF로 코드 작성

만약 Git이 이를 관리하지 않으면, 파일을 열 때마다 모든 줄이 변경된 것처럼 보이는 문제가 발생합니다. 실제로는 코드가 하나도 안 바뀌었는데 말이죠!

해결 방법

1. 경고 무시하기 (가장 간단)

경고 메시지일 뿐이므로, 사실 아무것도 하지 않아도 됩니다. Git이 알아서 잘 변환해줍니다.

2. core.autocrlf 설정 조정

Windows 사용자 (권장)

git config --global core.autocrlf true
  • 커밋 시: CRLF → LF 자동 변환
  • 체크아웃 시: LF → CRLF 자동 변환

Linux/Mac 사용자

git config --global core.autocrlf input
  • 커밋 시: CRLF → LF 자동 변환
  • 체크아웃 시: 변환하지 않음 (LF 유지)

3. .gitattributes 파일 활용 (프로젝트 단위 관리)

프로젝트 루트에 .gitattributes 파일을 생성하여 파일 타입별로 줄바꿈을 관리할 수 있습니다.

# 모든 텍스트 파일은 저장소에 LF로 저장
* text=auto

# 특정 파일은 항상 LF 사용
*.sh text eol=lf
*.dart text eol=lf
*.yaml text eol=lf

# 특정 파일은 항상 CRLF 사용
*.bat text eol=crlf

# 바이너리 파일은 변환하지 않음
*.png binary
*.jpg binary

4. Flutter 프로젝트 추천 설정

Flutter/Dart 프로젝트라면, .gitattributes에 다음 내용을 추가하는 것을 권장합니다:

# Auto detect text files and normalize to LF
* text=auto eol=lf

# Dart files
*.dart text eol=lf

# YAML files
*.yaml text eol=lf
*.yml text eol=lf

# Markdown files
*.md text eol=lf

# Shell scripts
*.sh text eol=lf

# Windows batch files
*.bat text eol=crlf

# Binary files
*.png binary
*.jpg binary
*.jpeg binary
*.gif binary
*.ico binary
*.ttf binary
*.otf binary

실전 팁

경고가 싫다면?

경고 메시지를 아예 안 보고 싶다면:

git config --global core.safecrlf false

하지만 이는 권장하지 않습니다. 경고는 문제를 알려주는 신호이기 때문입니다.

이미 커밋된 파일의 줄바꿈 정리하기

# 기존 캐시 삭제
git rm --cached -r .

# 모든 파일 다시 추가
git add .

# 커밋
git commit -m "Normalize line endings"

IDE 설정 통일하기

VSCode 사용자라면 .editorconfig 파일을 추가하는 것도 좋습니다:

root = true

[*]
charset = utf-8
end_of_line = lf
insert_final_newline = true
trim_trailing_whitespace = true

[*.dart]
indent_style = space
indent_size = 2

마무리

CRLF와 LF 문제는 개발자라면 한 번쯤 마주치는 흔한 상황입니다. 중요한 것은:

  1. 경고 메시지는 대부분 안전합니다 (Git이 알아서 처리)
  2. 팀 프로젝트라면 .gitattributes로 통일하는 것이 좋습니다
  3. 일관성이 가장 중요합니다

Windows에서 개발하더라도 걱정하지 마세요. Git이 우리를 위해 복잡한 일을 대신 처리해주고 있으니까요! 😊

반응형