Chủ yếu là .gitattributes
tập tin có * text=auto
. Mục đích của text=auto
tập tin đó là gì?
Chủ yếu là .gitattributes
tập tin có * text=auto
. Mục đích của text=auto
tập tin đó là gì?
Câu trả lời:
Từ các tài liệu :
Mỗi dòng trong
.gitattributes
(hoặc.git/info/attributes
) tệp có dạng:pattern attr1 attr2 ...
Vì vậy, ở đây, mẫu là *
, có nghĩa là tất cả các tệp và thuộc tính là text=auto
.
Không gì text=auto
làm gì? Từ tài liệu:
Khi văn bản được đặt thành "tự động", đường dẫn được đánh dấu để chuẩn hóa tự động cuối dòng. Nếu Git quyết định rằng nội dung là văn bản, các kết thúc dòng của nó sẽ được chuẩn hóa thành LF khi đăng ký.
Hành vi mặc định là gì nếu nó không được kích hoạt?
Không xác định
Nếu thuộc tính văn bản không được chỉ định, Git sử dụng biến cấu hình core.autocrlf để xác định xem tệp có nên được chuyển đổi không.
Không gì core.autocrlf
làm gì? Từ các tài liệu:
core.autocrlf
Đặt biến này thành "true" gần giống như đặt thuộc tính văn bản thành "tự động" trên tất cả các tệp ngoại trừ các tệp văn bản không được đảm bảo để được chuẩn hóa: các tệp có chứa CRLF trong kho lưu trữ sẽ không bị chạm. Sử dụng cài đặt này nếu bạn muốn có các kết thúc dòng CRLF trong thư mục làm việc của mình mặc dù kho lưu trữ không có các kết thúc dòng được chuẩn hóa. Biến này có thể được đặt thành đầu vào, trong trường hợp đó không có chuyển đổi đầu ra nào được thực hiện.
Nếu bạn nghĩ tất cả rõ ràng như bùn, bạn không đơn độc.
Đây là những gì * text=auto
tôi nói: khi ai đó thực hiện một tệp, Git đoán xem tệp đó có phải là tệp văn bản hay không và nếu có, nó sẽ cam kết một phiên bản của tệp trong đó tất cả các byte CR + LF được thay thế bằng các byte LF. Nó không ảnh hưởng trực tiếp đến các tệp trông như thế nào trong cây làm việc, có các cài đặt khác sẽ chuyển đổi byte byte thành byte CR + LF khi kiểm tra tệp.
Tôi không khuyên bạn nên đưa * text=auto
vào .gitattributes
tập tin. Thay vào đó, tôi muốn giới thiệu một cái gì đó như thế này:
*.txt text
*.html text
*.css text
*.js text
Điều này chỉ định rõ ràng tệp nào là tệp văn bản, được chuyển đổi CRLF thành LF trong cơ sở dữ liệu đối tượng (nhưng không nhất thiết phải trong cây làm việc). Chúng tôi đã có một repo với * text=auto
, và Git đã đoán sai cho một tệp hình ảnh rằng đó là một tệp văn bản, khiến nó bị hỏng khi nó thay thế các byte CR + LF bằng các byte LF trong cơ sở dữ liệu đối tượng. Đó không phải là một trò vui để gỡ lỗi.
Nếu bạn phải sử dụng * text=auto
, hãy đặt nó làm dòng đầu tiên .gitattributes
, để các dòng sau có thể ghi đè lên nó. Điều này dường như đang trở thành một thực tế ngày càng phổ biến.
everyone
đề cập đến git-scm
, có lẽ vì họ đang phát triển gói * nix và do đó sử dụng ký tự dòng * nix là bình thường .
git-scm
đến từ * nix. MacOS sử dụng LF. Chỉ Windows (chỉ xem xét các hệ điều hành luồng chính) đang sử dụng CRLF. Điều này làm cho các nhà phát triển sử dụng các công cụ * nix trên Windows và mọi người khi trao đổi tệp khó khăn hơn. Xem thêm Tại sao CRLF .
*.txt text=auto
và *.txt text
xin vui lòng? Tôi nghĩ rằng tất cả 4 dòng trong ví dụ của bạn ở trên nên có text=auto
, không chỉ text
sau phần mở rộng tập tin. Chẳng hạn, các tệp dấu chân KiCad (phần mở rộng ".kicad_mod"), được chuẩn hóa bằng cách sử dụng dòng này trong tệp gitattribut của chúng: *.kicad_mod text=auto
( kicad-pcb.org/lologists/klc/G1.7 ).
Nó đảm bảo kết thúc dòng được chuẩn hóa. Nguồn: Kernel.org
Khi văn bản được đặt thành "tự động", đường dẫn được đánh dấu để chuẩn hóa tự động cuối dòng. Nếu git quyết định rằng nội dung là văn bản, các kết thúc dòng của nó sẽ được chuẩn hóa thành LF khi đăng ký.
Nếu bạn muốn tương tác với hệ thống quản lý mã nguồn thực thi chuẩn hóa cuối dòng hoặc đơn giản là bạn muốn tất cả các tệp văn bản trong kho lưu trữ của mình được chuẩn hóa, thay vào đó, bạn nên đặt thuộc tính văn bản thành "tự động" cho tất cả các tệp.
Điều này đảm bảo rằng tất cả các tệp mà git coi là văn bản sẽ có các kết thúc dòng được chuẩn hóa (LF) trong kho lưu trữ.
When a text file is normalized, its line endings are converted to LF in the repository.
LF
, ngay cả trên các cửa sổ?
Cấu hình đó liên quan đến cách xử lý kết thúc dòng. Khi được bật, tất cả các kết thúc dòng được chuyển đổi thành LF trong kho lưu trữ. Có các cờ khác để xử lý cách kết thúc dòng được chuyển đổi trong thư mục làm việc của bạn. Thông tin đầy đủ về vấn đề chúng tôi ở đây: https://www.kernel.org/pub/software/scm/git/docs/gitattribut.html