Chuyển CRLF ↔ LF giữa Windows và Linux
17 tháng 11, 2024
Vì sao phải chuẩn hóa newline?
- Windows dùng cặp ký tự
CRLF(\r\n), Linux/macOS dùngLF(\n). - Khi cộng tác đa hệ điều hành, Git có thể tự động đổi newline dẫn tới diff ảo.
- Chuẩn hóa giúp tránh xung đột, CI chạy ổn định và tooling hoạt động nhất quán.
Kiểm tra nhanh newline hiện tại
bash
git ls-files -z | xargs -0 file | grep -E "CRLF|with CRLF line terminators"
hoặc mở file trong VS Code: góc dưới phải sẽ hiển thị CRLF / LF.
Phần 1: Windows → Linux (CRLF sang LF)
1. Vô hiệu hóa chuyển đổi tự động
bash
git config --global core.autocrlf false
git config --global core.eol lf
Nếu chỉ áp dụng cho repo hiện tại thì thay
--globalbằng--local.
2. Làm sạch cache và áp newline mới
bash
git rm --cached -r .
git reset --hard
3. Khóa theo từng loại file (khuyến nghị)
Thêm .gitattributes:
gitattributes
*.sh text eol=lf
*.ts text eol=lf
*.md text eol=lf
Những file cần CRLF (ví dụ .bat) có thể thiết lập riêng:
gitattributes
*.bat text eol=crlf
Phần 2: Linux → Windows (LF sang CRLF)
Nếu dự án chạy trên Windows thuần (ví dụ batch script), làm ngược lại:
bash
git config --global core.autocrlf true
git config --global core.eol crlf
Sau đó áp dụng lại quy trình cache:
bash
git rm --cached -r .
git reset --hard
core.autocrlf truekhiến Git tự chuyển file text sang CRLF khi checkout, nhưng giữ LF trong repo. Chỉ bật nếu chắc chắn app cần CRLF lúc chạy.
Checklist triển khai an toàn
- Đảm bảo working tree sạch (
git status). - Thiết lập
.gitattributestrước để tránh người khác revert newline. - Chạy lệnh chuyển đổi trên branch riêng, kiểm tra diff chỉ chứa newline.
- Thông báo cho team sau khi merge để họ
git pull --rebasehoặc reclone nếu cần.
Chuẩn hóa newline ngay từ đầu giúp repo của bạn đồng nhất khi build trên Linux, chạy script trên Windows và tránh diff khó đọc trong tương lai.
