Cách khắc phục cảnh báo Git 'LF will be replaced by CRLF' trên Windows

cơ bản📦 Git2026-04-04| Hệ điều hành Windows, Git Bash, CMD, hoặc PowerShell sử dụng Git for Windows.

Error Message

warning: LF will be replaced by CRLF in file.txt. The file will have its original line endings in your working directory
#git#devops#crlf#lf#meo-windows#git-config

Khắc phục nhanh trong 5 giây

Bạn đã chán ngấy khi thấy cảnh báo này? Đa số các nhà phát triển Windows chỉ cần yêu cầu Git tự động xử lý việc chuyển đổi. Hãy chạy lệnh này trong terminal của bạn:

git config --global core.autocrlf true

Nếu bạn muốn giữ nguyên định dạng kết thúc dòng (thường chỉ khi bạn làm việc trong môi trường thuần Windows), hãy sử dụng lệnh này thay thế:

git config --global core.autocrlf false

Điều gì đang thực sự xảy ra?

Cảnh báo này bắt nguồn từ sự khác biệt kéo dài hàng thập kỷ giữa các hệ điều hành về cách kết thúc một dòng văn bản. Mỗi khi bạn nhấn 'Enter', một ký tự ẩn sẽ được lưu lại.

  • Windows sử dụng CRLF (Carriage Return + Line Feed, \r\n). Cách này tốn 2 byte cho mỗi lần xuống dòng.
  • Linux và macOS sử dụng LF (Line Feed, \n). Cách này chỉ tốn 1 byte.

Git ban đầu được xây dựng cho Linux, vì vậy nó ưu tiên LF. Khi bạn thêm một tệp được tạo trên máy Mac vào máy tính Windows, Git sẽ nhận thấy sự khác biệt. Nó cảnh báo rằng nó sẽ hoán đổi các ký tự LF đó thành CRLF cục bộ để các trình soạn thảo trên Windows không bị lỗi. Tuy nhiên, "nguồn sự thật" (source of truth) trong kho lưu trữ vẫn là LF để đảm bảo tính tương thích cho mọi người.

Các giải pháp tốt nhất cho lập trình viên

1. Cấu hình Global "Thiết lập một lần là xong"

Thiết lập core.autocrlf thành true là lựa chọn tiêu chuẩn cho người dùng Windows. Cấu hình này đóng vai trò như một cầu nối. Nó chuyển đổi LF sang CRLF khi bạn tải mã về (checkout) và chuyển ngược lại thành LF khi bạn đẩy mã lên (commit). Kho lưu trữ của bạn sẽ luôn sạch sẽ và các công cụ trên Windows vẫn hoạt động tốt.

# Áp dụng cấu hình này trên toàn hệ thống cho tài khoản của bạn
git config --global core.autocrlf true

2. Cách chuyên nghiệp: Sử dụng .gitattributes

Các thiết lập global cá nhân rất khó để bắt buộc áp dụng cho cả nhóm. Nếu một thành viên có cấu hình khác, bạn sẽ gặp rắc rối với các kiểu kết thúc dòng bị trộn lẫn. Để ngăn chặn điều này, hãy tạo tệp .gitattributes ở thư mục gốc của dự án. Tệp này sẽ ghi đè các thiết lập cục bộ và áp dụng cùng một quy tắc cho mọi người tham gia.

Tạo tệp và thêm các quy tắc sau:

# Coi tất cả các tệp là văn bản và tự động xử lý kết thúc dòng
* text=auto

# Đảm bảo các shell script luôn sử dụng LF (CRLF của Windows sẽ làm lỗi bash script)
*.sh text eol=lf

# Đảm bảo các tệp batch luôn sử dụng CRLF
*.bat text eol=crlf

Commit tệp này vào kho lưu trữ của bạn. Giờ đây, dù lập trình viên sử dụng Mac hay PC, Git sẽ tuân theo đúng các quy tắc này.

3. Tắt thông báo cảnh báo

Có thể bạn không muốn Git can thiệp vào các tệp của mình. Nếu bạn chắc chắn rằng các trình soạn thảo mã (như VS Code hoặc Notepad++) xử lý LF tốt, bạn có thể tắt tính năng chuyển đổi và kiểm tra an toàn.

git config --global core.autocrlf false
git config --global core.safecrlf false

Sửa các tệp đã có trong kho lưu trữ

Việc thay đổi cài đặt sẽ không tự động sửa các tệp bạn đã commit với định dạng sai. Bạn cần "chuẩn hóa lại" (renormalize) chúng. Quá trình này bao gồm việc xóa chỉ mục (index) của Git và để Git đọc lại mọi tệp theo quy tắc mới của bạn.

  • Commit hoặc stash các công việc hiện tại để thư mục của bạn sạch sẽ.
  • Chạy ba lệnh sau theo thứ tự:
# 1. Xóa chỉ mục đã lưu trong cache
git rm --cached -r .

# 2. Thêm lại tất cả (Git sẽ áp dụng các quy tắc kết thúc dòng mới ngay bây giờ)
git add .

# 3. Hoàn tất việc khắc phục
git commit -m "Style: Chuẩn hóa tất cả kết thúc dòng về LF"

Cách xác minh thay đổi

Kiểm tra thiết lập hiện tại bằng cách chạy:

git config --get core.autocrlf

Nếu bạn sử dụng VS Code, hãy nhìn vào góc dưới bên phải của thanh trạng thái. Nó sẽ hiển thị CRLF hoặc LF cho tệp bạn đang chỉnh sửa. Sau khi thực hiện các bước chuẩn hóa ở trên, một tệp trước đó hiển thị LF bây giờ sẽ hiển thị CRLF trên máy Windows của bạn, với điều kiện autocrlf được đặt thành true.

Bảng so sánh nhanh

  Cài đặt
  Khi Commit
  Khi Checkout
  Phù hợp nhất cho




  `true`
  Chuyển sang LF
  Chuyển sang CRLF
  Người dùng Windows


  `input`
  Chuyển sang LF
  Không thay đổi
  Người dùng Mac/Linux


  `false`
  Không thay đổi
  Không thay đổi
  Nhóm chỉ dùng Windows

Related Error Notes