2011-12-28 35 views
40

Tôi mới tham gia git và tôi cần trợ giúp. Tôi đang sử dụng msysgit trên cửa sổ.Git, thêm tệp vào kho lưu trữ cung cấp lỗi nghiêm trọng cho LF -> CRLF

Khi tôi thực hiện lệnh git add [folderName] tôi nhận được câu trả lời:

fatal: LF would be replaced by CRLF in [.css file or .js file] 

và sau đó nếu bạn cố gắng làm một cam kết có gì xảy ra.

$ git commit 
# On branch master 
# 
# Initial commit 
# 
# Untracked files: 
# (use "git add <file>..." to include in what will be committed) 
# 
#  so01/ 
nothing added to commit but untracked files present (use "git add" to track) 

Một số tệp css/js này đã được tải xuống từ mạng nên tôi đoán đó là lý do tại sao có LF. Nếu tôi mở tệp và cắt/dán nội dung, sau đó tôi gặp lỗi trên tệp tiếp theo, v.v.

Mọi trợ giúp sẽ được đánh giá cao.

Sửa

Thiết core.autocrlf false dường như giải quyết vấn đề, nhưng tôi đọc trên nhiều bài viết không đặt tùy chọn này thành false.

Ai đó có thể chỉ cho tôi nơi tôi có thể tìm ra những vấn đề có thể phát sinh trong tình huống này?

+0

Bạn đang làm việc với những người khác có môi trường không phải cửa sổ? –

+2

No. Tôi đang làm việc trên một ứng dụng nhỏ mà tôi sẽ đưa vào appharbor. Cho đến nay mọi thứ đều tốt, nhưng tôi muốn biết sự khác biệt trong những lựa chọn đó là gì. Sau khi tôi hoàn thành các ứng dụng tôi làm kế hoạch để làm một số reasrch nhưng trong thời gian có nghĩa là tôi mặc dù tôi sẽ sử dụng SO cho một giải pháp nhanh chóng. – user619656

+0

Sau đó, tất cả các lý do khác để đặt autocrlf thành false. Bạn không cần đau đầu. Có các tập tin cam kết như là. Nó quá xấu mà các thiết lập mặc định khi cài đặt msysgit có tùy chọn tồi tệ nhất. –

Trả lời

22

Tin tưởng các trình chỉnh sửa mã để thao tác các kết thúc dòng của bạn. Auto crlf phải là false. Đừng để kiểm soát nguồn quá thông minh. Nếu không cần phải có công cụ kiểm soát nguồn của bạn để thay đổi kết thúc dòng của bạn, thì đừng. Điều này sẽ làm tổn thương.

Để nhắc lại câu trả lời được chấp nhận: "Trừ khi bạn có thể xem điều trị cụ thể phải đối phó với eol gốc, bạn nên tắt autocrlf thành false".

Cũng từ cuốn sách progit ở phần cuối của phần trên autocrlf:

"Nếu bạn là một lập trình viên của Windows làm một dự án Windows chỉ, sau đó bạn có thể tắt chức năng này, ghi lại những kí tự xuống dòng trong kho bằng cách thiết lập giá trị cấu hình để false"

duy nhất giúp đỡ khác tôi có thể cung cấp cho là nếu bạn đi theo con đường khác, làm quen với vim -b đó sẽ hiển thị ký tự đặc biệt như CR trong MSysGit, và git show HEAD:path/to/your/file.txtnên hiển thị cho bạn tệp theo cách mà git đã lưu trữ tệp đó.

Đặt core.whitespace cr-at-eol để có các bản vá lỗi và khác biệt không làm nổi bật CRs là khoảng trắng có thể có vấn đề.

Không đáng lo ngại. Lưu trữ dưới dạng.

+0

Auto crlf phải là false <- Điều này không đúng trên windows – prusswan

+2

có nó đúng trên các cửa sổ. Một lần nữa, không làm bất cứ điều gì nhưng autocrlf = false. Tôi đã làm điều này trong 4 năm qua với nhiều đội trong windows/.net. Bạn có thể làm những thứ khác để rơi và làm tổn thương bản thân. Cuối cùng, bạn sẽ đặt autocrlf thành false. –

+3

Tại sao bằng chứng giai thoại của bạn cụ thể cho windows/.net quan trọng hơn những người khác và những gì được đề nghị trong http://progit.org/book/ch7-1.html? – prusswan

6

Sự cố có thể xảy ra do bạn đặt Git lưu trữ tệp nội bộ bằng crlf với cài đặt core.eol. Khi bạn thêm một tập tin, Git cảnh báo bạn rằng nó sẽ thay đổi nó thành định dạng nội bộ.

Git hoạt động tốt nhất với lf kết thúc dòng, vì vậy nếu có thể, hãy luôn làm việc với core.eol = lf.

này nên giải thích khi sử dụng core.autocrlf, Why should I use core.autocrlf=true in Git?

Bạn cũng có thể muốn sử dụng core.safecrlf. Kiểm tra git config --help để biết chi tiết về cài đặt.

+0

Câu trả lời bạn đã liên kết với tiểu bang: "Trừ khi bạn có thể xem điều trị cụ thể phải đối phó với eol bản địa, bạn nên tắt autocrlf thành sai". –

+0

Tôi không chắc tại sao tôi lại nhận được một lời giới thiệu cho điều này? Tôi đã bỏ lỡ một cái gì đó? @AdamDymitruk Nó cũng đưa ra một vài trường hợp nó có thể được sử dụng. Tôi nghĩ rằng nó rất hữu ích để biết lý do tại sao các tùy chọn nó có (nếu tôi không bao giờ nên sử dụng nó, tại sao tôi có thể thiết lập nó?) – m0tive

24

rất mới với điều này để cài đặt core.autocrlf thành false không có ý nghĩa gì đối với tôi. Vì vậy, đối với những người mới khác, hãy chuyển đến tệp cấu hình trong thư mục .git của bạn và thêm:

[core] 
    autocrlf = false 

dưới tiêu đề [lõi].

+11

hoặc từ dòng lệnh ... git config core.autocrlf false – petercoles

0

Tự động dò tìm các định dạng hoạt động khá tốt. Do đó, core.autocrlf=true là một ý tưởng thực sự tốt trên Windows.

Nói git config --global core.safecrlf=false nói với git: Hey, vui lòng chuyển đổi sai kết thúc dòng (chỉ LF) thành kết thúc dòng Windows (CRLF) và đừng làm phiền tôi.

Do đó, bạn thực sự nên vô hiệu hóa core.safecrlf.

Câu trả lời dài hơn tại: https://stackoverflow.com/a/15471083/873282

+0

@downvoters: Vui lòng giải thích lý do tại sao bạn downvote câu trả lời này. Điều này giúp (i) những người khác hiểu tại sao câu trả lời này không có phiếu và (ii) để cải thiện câu trả lời. – koppor

Các vấn đề liên quan