“1 dòng thêm lỗi khoảng trắng” nghĩa là gì khi áp dụng bản vá?


105

Tôi đang chỉnh sửa một số tệp đánh dấu của một kho lưu trữ từ xa được sao chép và muốn thử nghiệm việc tạo và áp dụng các bản vá từ nhánh này sang nhánh khác. Tuy nhiên, mỗi khi tôi thực hiện bất kỳ thay đổi nào, tôi đều nhận được thông báo sau trong thời gian git apply:

0001-b.patch:16: trailing whitespace.
warning: 1 line adds whitespace errors.

(Điều này đang xảy ra trên máy Mac của tôi và tôi không biết mã gốc được tạo ở đâu.)

Thông báo cảnh báo có nghĩa là gì và tôi có cần quan tâm không?


Câu trả lời:


126

Bạn không cần quan tâm.

Cảnh báo ban hành một tiêu chuẩn về độ sạch của các tệp văn bản liên quan đến khoảng trắng, loại điều mà nhiều lập trình viên có xu hướng quan tâm. Như sách hướng dẫn giải thích:

Những gì được coi là lỗi khoảng trắng được kiểm soát bởi cấu hình core.whitespace. Theo mặc định, các khoảng trắng ở cuối (bao gồm các dòng chỉ chứa khoảng trắng) và một ký tự khoảng trắng ngay sau ký tự tab bên trong thụt lề đầu tiên của dòng được coi là lỗi khoảng trắng.

Theo mặc định, lệnh xuất ra các thông báo cảnh báo nhưng áp dụng bản vá.

Vì vậy, "lỗi" có nghĩa là sự thay đổi giới thiệu một khoảng trắng ở cuối, một dòng chỉ khoảng trắng hoặc một khoảng trắng đứng trước một tab. Ngoài thực tế đó, không có gì sai sót về sự thay đổi và nó sẽ được áp dụng một cách rõ ràng và chính xác. Nói cách khác, nếu bạn không quan tâm đến khoảng trắng "không chính xác", hãy bỏ qua cảnh báo hoặc tắt nó đi với git config apply.whitespace nowarn.


12
Nhìn vào cam kết với git show- nếu git của bạn có màu sắc, bạn sẽ thấy khoảng trắng vi phạm xuất hiện với màu đỏ tức giận. Ngoài ra, git show --word-diffnó sẽ hiển thị cho bạn không chỉ sự thay đổi dòng, mà còn cho biết các phần chèn ở giữa dòng, điều này sẽ cho biết liệu bản vá thực sự chỉ thêm một từ ở giữa hay nó cũng thêm một khoảng trắng ở cuối.
user4815162342

12
Bạn không cần quan tâm. Nhưng bạn nên. Khoảng trắng theo sau cần được xóa bỏ.
funroll

1
Ngoại trừ OP không thêm khoảng trắng theo sau mới, chỉ sửa đổi những gì đã tồn tại.
user4815162342

4
Tôi đã thấy điều này hỗ trợ trong một tình huống tương tự khi kết thúc dòng là CRLF kiểu Windows thay vì Unix.
Ezequiel Muns

1
@Yarin Nếu bạn thêm một từ ở giữa dòng và dòng đã có khoảng trắng ở cuối, điều đó có thể kích hoạt cảnh báo.
Warren Dew

4

Một trường hợp mà bạn có thể quan tâm một cách hợp pháp là khi bạn muốn phân biệt giữa lỗi khoảng trắng "cũ" (bạn có thể muốn giữ lại vì lý do kế thừa) và lỗi khoảng trắng "mới" (bạn muốn tránh).

Do đó, Git 2.5+ (Quý 2 năm 2015) sẽ đề xuất một tùy chọn cụ thể hơn để phát hiện khoảng trắng.

Xem các cam kết 0e383e1 , 0ad782fd55ef3e [26 tháng 5 năm 2015] của Junio ​​C Hamano ( gitster) .
(Được hợp nhất bởi Junio trong cam kết 709cd91 , ngày 11 tháng 6 năm 2015)

diff.c: --ws-error-highlight=<kind>tùy chọn

Theo truyền thống, chúng tôi chỉ quan tâm đến các ngắt khoảng trắng được giới thiệu trong các dòng mới.
Một số người cũng muốn vẽ các khoảng trắng ngắt trên các dòng cũ. Khi họ nhìn thấy một khoảng trắng trên một dòng mới, họ có thể phát hiện ra cùng một loại ngắt khoảng trắng trên dòng cũ tương ứng và muốn nói "À, những dấu ngắt đó ở đó nhưng chúng được kế thừa từ dòng gốc, vì vậy đừng chạm vào chúng vì hiện nay."

Giới thiệu --ws-error-highlight=<kind>tùy chọn, cho phép họ vượt qua một dấu phẩy tách ra danh sách old, newcontextđể xác định dòng gì để nổi bật khoảng trắng lỗi trên.

Các tài liệu hiện nay bao gồm :

--ws-error-highlight=<kind>

Đánh dấu lỗi khoảng trắng trên các dòng được chỉ định bằng <kind>màu được chỉ định bởi color.diff.whitespace.
<kind>là một dấu phẩy tách ra danh sách old, new, context.
Khi tùy chọn này không được đưa ra, chỉ các lỗi khoảng trắng trong newcác dòng được đánh dấu.

Ví dụ: --ws-error-highlight=new,oldđánh dấu lỗi khoảng trắng trên cả dòng đã xóa và dòng thêm.
allcó thể được sử dụng như một tay ngắn cho old,new,context.

Ví dụ: cam kết cũ có một lỗi khoảng trắng ( bbb), nhưng bạn chỉ có thể tập trung vào các lỗi mới (ở cuối still bbbccc):

lỗi khoảng trống cũ và mới

(kiểm tra thực hiện sau t/t4015-diff-whitespace.sh)


Với Git 2.26 (Q1 2020), diff-*họ lệnh con của hệ thống ống nước giờ đây chú ý đến diff.wsErrorHighlightcấu hình mà trước đây đã bị bỏ qua; điều này cho phép " git add -p" cũng hiển thị các vấn đề về khoảng trắng cho người dùng cuối.

Xem cam kết da80635 (31 tháng 1 năm 2020) bởi Jeff King ( peff) .
(Được hợp nhất bởi Junio ​​C Hamano - gitster- in cam kết df04a31 , ngày 14 tháng 2 năm 2020)

diff: chuyển diff.wsErrorHighlight sang cấu hình "cơ bản"

Người ký tên: Jeff King

Chúng tôi phân tích cú pháp diff.wsErrorHighlight git_diff_ui_config(), nghĩa là nó không có hiệu lực đối với các lệnh về hệ thống ống nước, chỉ đối với các phần tử như git diffchính nó.
Điều này hơi khó chịu vì nó có nghĩa là các tập lệnh như add--interactive, tạo ra sự khác biệt về màu sắc mà người dùng có thể nhìn thấy, không tôn trọng tùy chọn .

Chúng tôi có thể dạy tập lệnh đó để phân tích cú pháp cấu hình và chuyển nó cùng --ws-error-highlightvới hệ thống ống nước khác. Nhưng có một giải pháp đơn giản hơn.

Sẽ an toàn hợp lý cho hệ thống ống nước nếu tuân theo tùy chọn này, vì nó chỉ hoạt động khi màu được bật. Và bất kỳ ai phân tích cú pháp đầu ra được tô màu đều phải đối phó với thực tế color.diff.*có thể thay đổi đầu ra chính xác mà họ thấy; những tùy chọn đó là một phần của git_diff_basic_config()nó kể từ khi ra đời trong 9a1805a872 (thêm một lệnh gọi lại cấu hình khác biệt "cơ bản", 2008-01-04, Git v1.5.4-rc3).

Vì vậy, chúng tôi chỉ có thể di chuyển nó sang cấu hình "cơ bản", sửa lỗi add--interactive, cùng với bất kỳ tập lệnh nào khác trong cùng một chiếc thuyền, với nguy cơ rất thấp làm tổn thương bất kỳ người dùng hệ thống ống nước nào.



-2

Bởi vì dòng bắt đầu bằng TABistead of SPACE. Đi vào tệp vá và thay thế TABbằng SPACE. Ví dụ: trên vim trên dòng + từ loại tệp vá x để xóa khoảng trắng và không xóa dấu + và chèn khoảng trắng (CTRL) trên eqiv về kích thước ban đầu.


1
-1 Bạn thực sự nghĩ rằng git sẽ phàn nàn về việc thụt lề tab kiểu Linus? Việc sử dụng hợp pháp duy nhất của tab, nếu có, chính xác là đầu dòng.
user2394284
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.