TL;DR — Sửa Nhanh
Chạy lệnh này một lần để tắt cảnh báo và xử lý line endings đúng cách trên Windows:
git config --global core.autocrlf true
Làm việc trong team đa nền tảng? Hoặc cảnh báo cứ xuất hiện lại từ một số file cụ thể? Dùng file .gitattributes — hướng dẫn bên dưới.
Tại Sao Cảnh Báo Này Xuất Hiện
Line endings trên Windows là CRLF (\r\n). Linux và macOS dùng LF (\n). Khi bạn clone hoặc stage các file chỉ có LF trên Windows, Git cảnh báo rằng nó đang chuyển đổi sang CRLF cho thư mục làm việc của bạn.
Cảnh báo này không gây hại — không có dữ liệu nào bị mất. Nhưng nó rất ồn ào. Tệ hơn, nếu autocrlf được cấu hình sai, các file sẽ hiển thị là "đã thay đổi" mỗi lần chạy git status dù bạn không chạm vào dòng nào.
Cài đặt cốt lõi là core.autocrlf:
true— Git chuyển đổi LF→CRLF khi checkout, CRLF→LF khi commit (cài đặt chuẩn cho Windows)input— chỉ chuyển đổi CRLF→LF khi commit, không chuyển đổi khi checkout (phù hợp cho dev dùng WSL hoặc nhắm đến Linux trên Windows)false— không chuyển đổi gì cả (bạn tự quản lý line endings)
Cách 1: Đặt core.autocrlf Toàn Cục (đơn giản nhất)
Hầu hết lập trình viên Windows làm việc trên dự án Windows-native sẽ muốn:
git config --global core.autocrlf true
Nhắm đến server Linux, hoặc làm việc bên trong WSL? Dùng input thay thế:
git config --global core.autocrlf input
Để xem giá trị hiện tại:
git config --global core.autocrlf
Cách 2: Dùng .gitattributes (khuyến nghị cho team)
Cấu hình toàn cục giải quyết vấn đề trên máy bạn. Nhưng mỗi thành viên trong team cũng cần cài đặt đúng — và đó là lúc mọi thứ đổ vỡ. File .gitattributes thực thi line endings ở cấp repo, bất kể ai đó có gì trong cấu hình toàn cục của họ.
Tạo file .gitattributes ở thư mục gốc của repo:
# Auto-detect text files and normalize to LF in the repo
* text=auto
# Force LF for scripts and source files
*.sh text eol=lf
*.py text eol=lf
*.js text eol=lf
*.ts text eol=lf
*.json text eol=lf
*.md text eol=lf
*.yml text eol=lf
*.yaml text eol=lf
# Force CRLF for Windows-only files
*.bat text eol=crlf
*.cmd text eol=crlf
*.ps1 text eol=crlf
# Binary files — no conversion
*.png binary
*.jpg binary
*.gif binary
*.ico binary
*.zip binary
*.exe binary
Commit file này và push lên. Git sẽ thực thi các line endings này cho toàn bộ team — không cần cài đặt riêng lẻ cho từng developer.
Cách 3: Chuẩn Hóa Repo Đang Tồn Tại
Repo của bạn đã có line endings lẫn lộn? Dọn dẹp bằng hai bước:
# Step 1: Add .gitattributes first
git add .gitattributes
git commit -m "Add .gitattributes for line ending normalization"
# Step 2: Remove all cached files and re-add with correct endings
git rm --cached -r .
git reset --hard
git add .
git commit -m "Normalize line endings across repo"
Bước 2 buộc Git xử lý lại mọi file đang được theo dõi thông qua các quy tắc .gitattributes mới. Line endings trong lịch sử repo trước commit này không bị ảnh hưởng — nhưng mọi thứ về sau sẽ nhất quán.
Cách 4: Tắt Cảnh Báo Mà Không Thay Đổi Hành Vi
Đã xử lý line endings qua .gitattributes và chỉ muốn output gọn gàng hơn? Bạn có thể tắt cảnh báo trực tiếp:
git config --global core.safecrlf false
Hoặc giữ ở warn (mặc định) thay vì true — cái sau sẽ chặn các commit chứa line endings hỗn hợp:
git config --global core.safecrlf warn
Chỉ dùng cách này sau khi bạn đã xử lý xong line endings ở nơi khác. Đây là nút tắt âm thanh, không phải cách sửa thực sự.
Kiểm Tra Sau Khi Sửa
Xem cấu hình toàn cục của bạn:
git config --global --list | grep -i crlf
Kết quả mong đợi (với cài đặt true):
core.autocrlf=true
Muốn kiểm tra line endings thực tế của một file?
# Git Bash
file yourfile.txt
# Output: yourfile.txt: ASCII text, with CRLF line terminators
# PowerShell
(Get-Content yourfile.txt -Raw) -match "\r\n"
Sau khi stage các file với cấu hình đã cập nhật, chạy git status. Nếu không có gì hiển thị là đã sửa đổi — và bạn thực sự không thay đổi nội dung nào — thì line endings đã ổn định.
Khi Cảnh Báo Vẫn Xuất Hiện Sau Khi Sửa
- Cấu hình cấp repo ghi đè cấu hình toàn cục — Chạy
git config --local core.autocrlfbên trong repo. Cài đặt local trong.git/configsẽ âm thầm ghi đè bất cứ thứ gì bạn đặt toàn cục. - Xung đột .gitattributes — Một quy tắc với
eol=lftrên file vẫn còn CRLF trong thư mục làm việc sẽ tiếp tục kích hoạt. Buộc chuẩn hóa lại bằnggit rm --cached <file>, rồigit add <file>. - Editor ghi CRLF khi lưu — VS Code: thêm
"files.eol": "\n"vào settings. Notepad++ có tùy chọn tương tự trong Edit → EOL Conversion.
Cài Đặt Khuyến Nghị Cho Hầu Hết Các Team
- Thêm file
.gitattributesvới* text=autolàm quy tắc nền tảng. - Lập trình viên Windows đặt
git config --global core.autocrlf true. - Lập trình viên Mac/Linux đặt
git config --global core.autocrlf input.
Kết quả cuối cùng: repo luôn lưu trữ LF. Lập trình viên Windows nhận được CRLF trong thư mục làm việc. Lập trình viên Mac và Linux nhận được LF. Không có bất ngờ nào giữa các nền tảng.

