Quy trình của tôi để xử lý các kết thúc dòng như sau (trận chiến được thử nghiệm trên nhiều repos):
Khi tạo một repo mới:
- đưa
.gitattributes
vào cam kết đầu tiên cùng với các tệp điển hình khác như .gitignore
vàREADME.md
Khi giao dịch với một repo hiện có:
- Tạo / sửa đổi cho
.gitattributes
phù hợp
git commit -a -m "Modified gitattributes"
git rm --cached -r . && git reset --hard && git commit -a -m 'Normalize CRLF' -n"
-n
( --no-verify
là bỏ qua các hook pre-commit)
- Tôi phải làm điều đó thường xuyên đủ để tôi xác định nó là bí danh
alias fixCRLF="..."
- lặp lại lệnh trước
- vâng, đó là voodoo, nhưng nói chung tôi phải chạy lệnh hai lần, lần đầu tiên nó bình thường hóa một số tệp, lần thứ hai thậm chí nhiều tệp hơn. Nói chung, có lẽ tốt nhất để lặp lại cho đến khi không có cam kết mới được tạo :)
- đi qua lại giữa cái cũ (ngay trước khi bình thường hóa) và nhánh mới một vài lần. Sau khi chuyển nhánh, đôi khi git sẽ tìm thấy nhiều tệp hơn nữa cần được chuẩn hóa lại!
Trong .gitattributes
tôi tuyên bố tất cả các tệp văn bản rõ ràng là có LF EOL vì nhìn chung công cụ Windows tương thích với LF trong khi công cụ không phải Windows không tương thích với CRLF (thậm chí nhiều công cụ dòng lệnh của nodejs giả định là do đó có thể thay đổi EOL trong các tệp của bạn).
Nội dung của .gitattributes
Tôi .gitattributes
thường trông như:
*.html eol=lf
*.js eol=lf
*.json eol=lf
*.less eol=lf
*.md eol=lf
*.svg eol=lf
*.xml eol=lf
Để tìm ra những phần mở rộng khác biệt được theo dõi bởi git trong repo hiện tại, xem tại đây
Các vấn đề sau khi bình thường hóa
Một khi điều này được thực hiện, có một cảnh báo phổ biến hơn mặc dù.
Giả sử bạn master
đã cập nhật và bình thường hóa, sau đó bạn thanh toán outdated-branch
. Khá thường xuyên ngay sau khi kiểm tra chi nhánh đó, git đánh dấu nhiều tệp như đã sửa đổi.
Giải pháp là thực hiện một cam kết giả ( git add -A . && git commit -m 'fake commit'
) và sau đó git rebase master
. Sau khi nổi loạn, các cam kết giả sẽ biến mất.