Tôi đã đọc rất nhiều câu hỏi và câu trả lời khác nhau trên Stack Overflow cũng như tài liệu git về cách cài đặt core.autocrlf hoạt động.
Đây là sự hiểu biết của tôi từ những gì tôi đã đọc:
Các máy khách Unix và Mac OSX (tiền OSX sử dụng CR) sử dụng các kết thúc dòng LF.
Máy khách Windows sử dụng kết thúc dòng CRLF.
Khi core.autocrlf được đặt thành true trên máy khách, kho git luôn lưu trữ các tệp ở định dạng kết thúc dòng LF và kết thúc dòng trong các tệp trên máy khách được chuyển đổi qua lại khi kiểm tra / cam kết cho các máy khách (ví dụ Windows) không sử dụng Kết thúc dòng -LF, bất kể định dạng nào các tệp kết thúc dòng trên máy khách (điều này không đồng ý với định nghĩa của Tim Clem - xem cập nhật bên dưới).
Dưới đây là một ma trận cố gắng ghi lại tài liệu giống nhau cho các cài đặt 'đầu vào' và 'sai' của core.autocrlf với các dấu hỏi mà tôi không chắc chắn về hành vi chuyển đổi kết thúc dòng.
Câu hỏi của tôi là:
- Các dấu hỏi nên là gì?
- Ma trận này có đúng với "dấu hỏi không" không?
Tôi sẽ cập nhật các dấu hỏi từ các câu trả lời khi sự đồng thuận dường như được hình thành.
giá trị core.autocrlf đúng đầu vào sai -------------------------------------------------- -------- cam kết | đổi ? ? mới | sang LF (chuyển đổi thành LF?) (không chuyển đổi?) cam kết | chuyển đổi sang? Không hiện có | Chuyển đổi (chuyển đổi sang LF?) kiểm tra | chuyển đổi sang? Không hiện có | Chuyển đổi CRLF (không chuyển đổi?)
Tôi không thực sự tìm kiếm ý kiến về ưu và nhược điểm của các cài đặt khác nhau. Tôi chỉ tìm kiếm dữ liệu cho thấy rõ cách mong đợi git hoạt động với mỗi trong ba cài đặt.
-
Cập nhật 17/08/2012 : Sau khi đọc bài viết của Tim Clem được liên kết bởi JJD trong các bình luận, tôi đã sửa đổi một số giá trị trong các giá trị "không xác định" trong bảng trên, cũng như thay đổi "thanh toán hiện có | true để chuyển đổi sang CRLF thay vì chuyển đổi sang máy khách ". Dưới đây là những định nghĩa anh ta đưa ra, rõ ràng hơn bất cứ điều gì tôi thấy ở nơi khác:
core.autocrlf = sai
Đây là mặc định, nhưng hầu hết mọi người được khuyến khích thay đổi điều này ngay lập tức. Kết quả của việc sử dụng false là Git không bao giờ gây rối với các kết thúc dòng trên tệp của bạn. Bạn có thể kiểm tra các tệp bằng LF hoặc CRLF hoặc CR hoặc một số kết hợp ngẫu nhiên của ba và Git không quan tâm. Điều này có thể làm cho diffs khó đọc hơn và hợp nhất khó khăn hơn. Hầu hết mọi người làm việc trong thế giới Unix / Linux đều sử dụng giá trị này vì họ không gặp vấn đề về CRLF và họ không cần Git để làm thêm bất cứ khi nào tệp được ghi vào cơ sở dữ liệu đối tượng hoặc được ghi vào thư mục làm việc.
core.autocrlf = đúng
Điều này có nghĩa là Git sẽ xử lý tất cả các tệp văn bản và đảm bảo rằng CRLF được thay thế bằng LF khi ghi tệp đó vào cơ sở dữ liệu đối tượng và biến tất cả các LF trở lại thành CRLF khi ghi vào thư mục làm việc. Đây là cài đặt được đề xuất trên Windows vì nó đảm bảo rằng kho lưu trữ của bạn có thể được sử dụng trên các nền tảng khác trong khi vẫn giữ CRLF trong thư mục làm việc của bạn.
core.autocrlf = đầu vào
Điều này có nghĩa là Git sẽ xử lý tất cả các tệp văn bản và đảm bảo rằng CRLF được thay thế bằng LF khi ghi tệp đó vào cơ sở dữ liệu đối tượng. Nó sẽ không, tuy nhiên, làm ngược lại. Khi bạn đọc các tập tin ra khỏi cơ sở dữ liệu đối tượng và ghi chúng vào thư mục làm việc, chúng vẫn sẽ có các biểu thức để biểu thị cuối dòng. Cài đặt này thường được sử dụng trên Unix / Linux / OS X để ngăn CRLF không được ghi vào kho lưu trữ. Ý tưởng là nếu bạn dán mã từ trình duyệt web và vô tình có CRLF vào một trong các tệp của bạn, Git sẽ đảm bảo rằng chúng đã được thay thế bằng các tệp LF khi bạn viết vào cơ sở dữ liệu đối tượng.
Bài viết của Tim rất tuyệt vời, điều duy nhất tôi có thể nghĩ là còn thiếu là anh ta giả định rằng kho lưu trữ ở định dạng LF, điều này không nhất thiết đúng, đặc biệt là đối với các dự án chỉ dành cho Windows.
So sánh bài viết của Tim với câu trả lời được bình chọn cao nhất từ trước đến nay của jmlane cho thấy sự đồng ý hoàn hảo về cài đặt đúng và đầu vào cũng như sự bất đồng về cài đặt sai.
autocrlf
sai có vẻ dễ dàng hơn nhiều;) stackoverflow.com/questions/2333424/