문제 상황
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)
- 저장소에 저장할 때: CRLF → LF로 변환
- 체크아웃할 때: 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 문제는 개발자라면 한 번쯤 마주치는 흔한 상황입니다. 중요한 것은:
- 경고 메시지는 대부분 안전합니다 (Git이 알아서 처리)
- 팀 프로젝트라면 .gitattributes로 통일하는 것이 좋습니다
- 일관성이 가장 중요합니다
Windows에서 개발하더라도 걱정하지 마세요. Git이 우리를 위해 복잡한 일을 대신 처리해주고 있으니까요! 😊
'개발 & IT > 개발 라이프 & 팁' 카테고리의 다른 글
| 화면 뒤에 있는 것들 (0) | 2025.12.08 |
|---|---|
| SSH 키 인증으로 비밀번호 없이 안전하게 서버 접속하기 (0) | 2025.10.23 |
| 🔐 GitHub SSH 인증 설정하기 - 비밀번호 없이 Git 사용하는 방법 (1) | 2025.09.28 |
| Git에서 'Permission denied' 오류 해결 방법 (0) | 2025.02.19 |
| 윈도우에서 하위 폴더 파일 일괄 이름 변경하는 방법 (3) | 2025.01.29 |