Cách thay đổi cài đặt kết thúc dòng


582

Có tập tin hoặc menu nào cho phép tôi thay đổi cài đặt về cách xử lý kết thúc dòng không?

Tôi đọc có 3 lựa chọn:

  1. Thanh toán theo kiểu Windows, cam kết theo kiểu Unix

    Git sẽ chuyển đổi LF sang CRLF khi kiểm tra các tệp văn bản. Khi cam kết các tệp văn bản, CRLF sẽ được chuyển đổi thành LF. Đối với các dự án đa nền tảng, đây là cài đặt được đề xuất trên Windows ("core.autocrlf" được đặt thành "true")

  2. Thanh toán theo nguyên trạng, cam kết theo kiểu Unix

    Git sẽ không thực hiện bất kỳ chuyển đổi nào khi kiểm tra các tệp văn bản. Khi cam kết các tệp văn bản, CRLF sẽ được chuyển đổi thành LF. Đối với các dự án đa nền tảng, đây là cài đặt được đề xuất trên Unix ("core.autocrlf" được đặt thành "đầu vào").

  3. Thanh toán nguyên trạng, cam kết nguyên trạng

    Git sẽ không thực hiện bất kỳ chuyển đổi nào khi kiểm tra hoặc cam kết các tệp văn bản. Việc chọn tùy chọn này không được khuyến nghị cho các dự án đa nền tảng ("core.autocrlf" được đặt thành "false")



3
Cái nào trong số này là mặc định?
Stephen

2
Mặc dù có vẻ như mặc định là đúng, mà tôi nghĩ là phù hợp.
Stephen

19
Tôi thực sự thấy rằng tùy chọn 3-hoạt động tốt hơn. Mặt khác, tôi thường gặp phải tình huống khi tôi chỉnh sửa cả tập lệnh bó và tập lệnh sh trên cùng một nền tảng (Windows / Linux) và sau đó cam kết chúng và Git tự động "sửa" kết thúc dòng cho một nền tảng ... Không, tôi thích tự làm ý thức về kết thúc dòng và cam kết / kiểm tra chúng chính xác như chúng là.
JustAMartin

1
@Neutrino Tôi ước điều này là đúng, nhưng một ví dụ về IDE gây rối với các kết thúc dòng của bạn (và không cung cấp tùy chọn cấu hình hợp lý để tắt tính năng này) là Visual Studio.
Cássio Renan

Câu trả lời:


530

Cách thông thường để kiểm soát điều này là với git config

Ví dụ

git config --global core.autocrlf true

Để biết chi tiết, cuộn xuống trong liên kết này đến Pro Git đến phần có tên "core.autocrlf"


Nếu bạn muốn biết tập tin này được lưu trong đó, bạn có thể chạy lệnh:

git config --global --edit

và tệp cấu hình toàn cầu git sẽ mở trong trình soạn thảo văn bản và bạn có thể xem tệp đó được tải từ đâu.


17
truehoặc falsechỉ có hai tùy chọn, trình cài đặt có ba
qwertymk

49
inputlà tùy chọn thứ 3 (như đã nêu trong liên kết tôi cung cấp). 3 tùy chọn là true| false| input
Mã hóaWithSpike

2
Đây là một câu hỏi SO hay khác về chủ đề này: stackoverflow.com/questions/3206843/NH
CodingWithSpike

31
Trên thực tế, nếu bạn đọc lại câu hỏi của riêng bạn, trong đoạn trích sao chép / dán: "1 ... ("core.autocrlf" is set to "true") ... 2 ... ("core.autocrlf" is set to "input") ... 3 ... ("core.autocrlf" is set to "false")"vậy về cơ bản bạn đã trả lời câu hỏi của riêng bạn? :)
Mã hóaWithSpike

2
Đây là cách cũ để đi xung quanh nó. Nhìn vào tập tin .gitattribut.
erafthift0

176

Định dạng kết thúc dòng được sử dụng trong HĐH

  • Windows: cặp CR(Vận chuyển trở lại \r) và LF(LineFeed \n)
  • OSX, Linux: LF(LineFeed \n)

Chúng tôi có thể định cấu hình git để tự động sửa các định dạng kết thúc dòng cho mỗi HĐH theo hai cách.

  1. Cấu hình toàn cầu Git
  2. Sử dụng .gitattributestập tin

Cấu hình Toàn cầu

Trong Linux / OSX
git config --global core.autocrlf input

Điều này sẽ sửa chữa bất kỳ CRLFđể LFkhi bạn cam kết.

Trong Windows
git config --global core.autocrlf true

Điều này sẽ đảm bảo khi bạn thanh toán trong windows, tất cả LFsẽ chuyển đổi thànhCRLF

.gitattribut File

Đó là một ý tưởng tốt để giữ một .gitattributestệp vì chúng tôi không muốn mọi người trong nhóm của chúng tôi đặt cấu hình của họ. Tập tin này nên giữ trong đường dẫn gốc của repo và nếu tồn tại một, git sẽ tôn trọng nó.

* text=auto

Điều này sẽ coi tất cả các tệp là tệp văn bản và chuyển đổi thành dòng kết thúc của hệ điều hành khi thanh toán và LFtự động trở lại cam kết. Nếu muốn nói rõ ràng, sau đó sử dụng

* text eol=crlf
* text eol=lf

Đầu tiên là để kiểm tra và thứ hai là cho cam kết.

*.jpg binary

Hãy coi tất cả các .jpghình ảnh là các tệp nhị phân, bất kể đường dẫn. Vì vậy, không cần chuyển đổi.

Hoặc bạn có thể thêm vòng loại đường dẫn:

my_path/**/*.jpg binary

3
Còn OS X, chỉ sử dụng CR(trả lại xe) thì sao?
ngày

23
MacOS kế thừa (nghĩa là MacOS 9 trở về trước) được sử dụng CRmột mình, nhưng OS X thường sử dụng LF.
Zachary Ware

2
Tôi có thể sử dụng * text eol=lfhai lần để kiểm tra LFtrên Windows không?
mbomb007

1
Theo cài đặt tài liệu gitattribut* text=auto cho phép git quyết định xem nội dung có phải là văn bản hay không. Buộc tất cả các tệp phải là văn bản chỉ nên * text.
Adrian W

Làm cách nào để đặt eol=crtệp cho Mac OS 9 và các nền tảng cũ khác?
NobleUplift

36

Đối với giải pháp cài đặt kho lưu trữ, có thể được phân phối lại cho tất cả các nhà phát triển, hãy kiểm tra thuộc tính văn bản trong tệp .gitattribut . Theo cách này, các nhà phát triển không phải tự thiết lập các kết thúc dòng riêng của mình trên kho lưu trữ và vì các kho lưu trữ khác nhau có thể có các kiểu kết thúc dòng khác nhau, theo tôi, toàn cầu không phải là tốt nhất.

Ví dụ: bỏ đặt thuộc tính này trên một đường dẫn cụ thể [ . - văn bản] sẽ buộc git không chạm vào kết thúc dòng khi đăng ký và kiểm tra. Theo tôi, đây là hành vi tốt nhất, vì hầu hết các trình soạn thảo văn bản hiện đại có thể xử lý cả hai loại kết thúc dòng. Ngoài ra, nếu bạn là nhà phát triển vẫn muốn thực hiện chuyển đổi kết thúc dòng khi đăng nhập, bạn vẫn có thể đặt đường dẫn khớp với các tệp nhất định hoặc đặt thuộc tính eol (trong .gitattribut) trên kho lưu trữ của bạn.

Ngoài ra, hãy kiểm tra bài đăng liên quan này, mô tả chi tiết tệp và thuộc tính văn bản .gitattribut: Chiến lược xử lý CRLF (trả lại vận chuyển, cung cấp dòng) tốt nhất với Git là gì?


. - textcho is not a valid attribute name: .gitattributes:1xin vui lòng đặtcat .gitattributes
jangorecki

3

Đối với tôi, trò lừa đã chạy lệnh là gì

git config auto.crlf false

Trong thư mục của dự án, tôi muốn nó đặc biệt cho một dự án.

Lệnh đó đã thay đổi tệp trong đường dẫn {project_name} /. Git / config (fyi .git là một thư mục ẩn) bằng cách thêm các dòng

[auto]
    crlf = false

ở cuối tập tin Tôi cho rằng việc thay đổi tập tin cũng thực hiện thủ thuật tương tự.


1

Nếu bạn muốn chuyển đổi lại các định dạng tệp đã được thay đổi thành Định dạng UNIX từ định dạng PC.

(1) Bạn cần cài đặt lại GIT rùa và trong phần "Chuyển đổi kết thúc dòng", đảm bảo rằng bạn đã chọn tùy chọn "Kiểm tra như hiện tại - Kiểm tra nguyên trạng".

(2) và giữ nguyên các cấu hình còn lại.

(3) sau khi cài đặt xong

(4) ghi tất cả các phần mở rộng tệp được chuyển đổi sang định dạng UNIX thành tệp văn bản (extend.txt).

ex:*.dsp
   *.dsw

(5) sao chép tệp vào bản sao của bạn Chạy lệnh sau trong GITBASH

while read -r a;
do
find . -type f -name "$a" -exec dos2unix {} \;
done<extension.txt
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.