Tôi đang cố lấy git để không thay đổi bất kỳ kết thúc dòng nào cho bất kỳ hoạt động nào. Thật không may, nó dường như làm như vậy không có vấn đề gì. Tôi đã giảm nó xuống trường hợp thử nghiệm sau, có nhiều cơ chế khác nhau để vô hiệu hóa hành vi này mà tôi có thể tìm thấy.
- Bắt đầu với hai máy (máy tính Windows = A, máy tính Linux = B)
- Trên cả hai máy:
git config --global core.autocrlf false
- Trên cả hai máy:
git config --global core.eol crlf
(chỉ trong trường hợp)
- Tạo kho lưu trữ mới trên A. Từ một thư mục trống:
git init --shared
(sau đó bỏ ẩn.git
thư mục đã tạo )- Tạo một tệp mới
.gitignore
trong kho lưu trữ - Tạo một tệp mới
.gitattributes
trong kho lưu trữ với một dòng:* -text
git add .
, sau đógit commit -m "initial commit"
để làm việc xung quanh, ví dụ như điều này .git branch master_recv
- Thêm điều khiển từ xa
- Tạo một tệp mới
document.txt
trong kho chứa CRLF - Cam kết:,
git add -A
sau đógit commit -m "<something>"
- Lưu ý rằng A
document.txt
vẫn chứa CRLF (và xóa nó và đặt lại với--hard
trả về phiên bản vẫn có CRLF)
- SCP toàn bộ thư mục vào máy tính B
- Thêm tệp mới
new file
chứa CRLF - Cam kết:,
git add -A
sau đógit commit -m "<something>"
- Lưu ý rằng B's
document.txt
và B'snew file
đều vẫn chứa CRLF
- Kéo chủ nhân của B đến A:
git pull <remote> master:master_recv
- A
document.txt
đã thay đổi thành LF. Tệp được thêm vàonew file
cũng chứa LF.
Sự cố không xảy ra nếu B là máy Windows.
core.autocrlf
luôn luôn được sai? Có vẻ như bạn đã có\n
kết thúc dòng trong kho lưu trữ của mình? Không có cài đặt nào để thay đổi\n
trong kho lưu trữ của bạn thành\r\n
trong thư mục làm việc của bạn.