Git CRLF·LF 차이로 전체 파일이 변경될 때 안전하게 정리하기
내용을 수정하지 않았는데 Git이 파일 전체를 변경으로 표시할 때 줄바꿈 정책을 확인하고 .gitattributes로 재발을 막는 방법입니다.
GitWindows · macOS · Linux
짧은 요약
운영체제별 기본 줄바꿈이 섞이면 Git이 실제 내용은 같아도 모든 줄을 변경으로 볼 수 있습니다. 작업 내용을 먼저 보존한 뒤 .gitattributes로 저장소 정책을 정하고 한 번만 정규화하세요.
증상과 환경
파일을 열어 저장했을 뿐인데 수백 줄이 삭제·추가로 표시되거나 셸 스크립트에서 bad interpreter 오류가 발생합니다.
원인
Windows의 CRLF와 Unix 계열의 LF가 파일 또는 체크아웃 설정에서 변환되면서 저장소 상태가 달라졌습니다. core.autocrlf 값만 팀원마다 다르게 설정해도 반복될 수 있습니다.
재현 예시
git diff --ignore-space-at-eol
git config --show-origin --get core.autocrlf첫 명령에서 차이가 사라진다면 줄바꿈 차이일 가능성이 큽니다.
단계별 해결법
1. 작업 내용 보존
커밋하지 않은 실제 수정이 있다면 별도 브랜치나 패치로 먼저 보존합니다.
git diff > before-line-ending-fix.patch2. 저장소 정책 추가
.gitattributes 예시입니다.
* text=auto eol=lf
*.bat text eol=crlf
*.cmd text eol=crlf
*.png binary
*.jpg binary3. 인덱스 정규화
git add --renormalize .
git status
git diff --cached --stat변경 범위가 예상과 일치할 때만 별도 커밋으로 저장합니다.
확인법
새로 체크아웃한 작업 디렉터리에서 git status가 깨끗한지, Linux에서 실행할 셸 스크립트가 LF인지 확인합니다.
주의사항
사용자 변경이 있는 상태에서 파일 전체를 일괄 변환하지 마세요. 줄바꿈 정규화 커밋과 기능 수정 커밋을 분리해야 리뷰와 복구가 쉽습니다.
관련 이슈
- executable bit 변경
- UTF-8 BOM으로 인한 스크립트 오류
- 편집기별 end-of-line 설정 차이