"Bản vá bất ngờ kết thúc ở giữa dòng" nghĩa là gì?


14

Đây là đầu ra của lệnh vá của tôi:

Hunk #11 merged at 4184,4190.
Hunk #12 merged at 4444.
Hunk #13 merged at 4944.
Hunk #14 NOT MERGED at 5106-5116.
Hunk #15 merged at 5290.
Hunk #16 merged at 5448.
patch unexpectedly ends in middle of line
Hunk #17 merged at 5608,5611.

Lệnh là

patch -d ~/SOME_DIR -p1 --merge --verbose -u

Bản vá được sản xuất bằng git:

git --git-dir ~/SOME_DIR/.git diff -U8 bb1ee538982957b421a4c0e78f30428e73c9a072 HEAD -- malloc.c

Điều đó patch unexpectedly ends in middle of linecó nghĩa là gì , và nó có phải là một vấn đề không? Là nó đề cập đến hunk 16 hoặc 17? Tôi có thể tìm kiếm gì trong tệp vá để tìm ra nguyên nhân gây ra điều này?

Câu trả lời:


11

Thông điệp đề cập đến Hunk 16.

Cuộc thảo luận GitHub này có lẽ liên quan đến vấn đề của bạn.

Đó là về bản vá bất ngờ kết thúc ở giữa các thông báo dòng vì các vấn đề CRLF (trả lại vận chuyển, cho ăn theo dòng) khi git tạo khác biệt được sử dụng với bản vá.

Để trích dẫn kết luận:

[..] git có thể rất kén chọn về kết thúc dòng. Bạn có trên windows hay không? Ở bất kỳ giá nào, có lẽ bạn nên đặt autocrlf trong cấu hình git. Nếu bạn đang ở trên windows, bạn muốn "true", nếu bạn đang dùng mac hoặc linux, bạn nên sử dụng "input" [..]

Trong bài viết Xử lý kết thúc dòng GitHub nêu chi tiết tuyên bố trên.


1
Cần lưu ý, người hỏi đã hỏi điều này là xấu - kết thúc ở giữa một dòng không phải là một vấn đề - chỉ là một cảnh báo.
Ross

3

Nếu bạn không sử dụng git(nhận xét của @ maxslepzig là về việc sử dụng bản vá trong ngữ cảnh git), hãy thử thêm trả lại vận chuyển ở cuối tệp của bạn. Tôi đã làm điều đó và patchchấp nhận bản vá của tôi.


2

Để thêm vào cuộc thảo luận rất cũ này:

Vấn đề dẫn đến cảnh báo mà OP lưu ý thường được gây ra bởi các vấn đề với kết thúc dòng.

patch muốn một nguồn cấp dữ liệu theo dõi (LF) để xác định phần cuối của tệp (và cảnh báo về một sự khác biệt hợp nhất có thể đã bị cắt ngắn một cách tình cờ)

  1. Nối nguồn cấp dữ liệu phù hợp mà không cần mở tệp lên để chỉnh sửa (có thể sửa đổi kết thúc dòng của bạn hoặc dải dòng / dấu cách tùy thuộc vào cài đặt của trình soạn thảo của bạn), bạn có thể thực hiện một số thao tác đơn giản như:

    echo -e "\n" >> YOURPATCHFILE

    Điều này sẽ thêm một ký tự linefeed vào cuối tệp mà không thực hiện bất kỳ thay đổi nào khác.

  2. Nếu tệp vá của bạn đã lạ hoặc bạn muốn thực hiện một số bản sửa lỗi có thể cùng một lúc, bạn có thể sửa nhiều vấn đề với mã hóa (thành ascii) bao gồm cả kết thúc dòng (CR hoặc CRLF sang LF):

    dos2unix -k YOURPATCHFILE

    Bạn có thể phải cài đặt nhị phân dos2unix từ trình quản lý gói của hệ điều hành; I E

    • Dựa trên Debian / Ubuntu: sudo apt install dos2unix
    • Fedora / RHEL / CentOS: sudo yum install dos2unix
    • MacOS (với bia): brew install dos2unix
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.