2013-01-11 47 views
41

Tôi gặp lỗi sau khi chạy make và tôi không biết ý nghĩa của nó hoặc phải làm gì với nó. Bất cứ ai có thể thắp sáng tôi hoặc chỉ cho tôi đi đúng hướng?Hunk # 1 FAILED at 1. Điều đó có nghĩa là gì?

(cd libdvdnav-git && patch -p1) < ../../contrib/src/dvdnav/dvdnav.patch 
patching file Makefile.am 
Hunk #1 FAILED at 1. 
1 out of 1 hunk FAILED -- saving rejects to file Makefile.am.rej 
make: *** [dvdnav] Error 1 

Tôi đang cố gắng biên dịch VLC cho win32 (sử dụng linux).

Trả lời

43

Đó là lỗi do patch tạo. Nếu bạn mở tệp .patch, bạn sẽ thấy rằng tệp được sắp xếp theo một loạt các phân đoạn, được gọi là "khối". Mỗi hunk xác định các đoạn mã tương ứng (theo số dòng) trong phiên bản cũ và mới, sự khác biệt giữa các đoạn mã và sự giống nhau giữa chúng ("ngữ cảnh").

Một đoạn có thể bị lỗi nếu các điểm tương đồng của một đoạn không khớp với những gì trong tệp gốc. Khi bạn thấy lỗi này, hầu như luôn luôn vì bạn đang sử dụng bản vá cho phiên bản sai của mã bạn đang vá. Có một số cách để giải quyết vấn đề này:

  • Nhận phiên bản cập nhật libdvdnav đã bao gồm bản vá (tùy chọn tốt nhất).
  • Tải tệp .patch cho phiên bản libdvdnav bạn đang vá.
  • Vá theo cách thủ công. Đối với tất cả các đoạn trong bản vá, hãy thử định vị tệp và đường tương ứng trong libdvdnav và sửa chúng theo hướng dẫn trong bản vá.
  • Lấy phiên bản libdvdnav gần hơn với bất kỳ phiên bản nào mà tệp .patch dành cho (có thể là một ý tưởng tồi).
+0

Cảm ơn. Bởi vì tôi đang biên soạn chéo và sử dụng một kịch bản lớn để có được các libs, tôi nghĩ rằng tôi muốn chỉnh sửa các tập tin vá lỗi. Bạn có thể cho tôi biết ý nghĩa của dòng với các ký hiệu '@@' không? – JellicleCat

+1

Bản vá của bạn ở [định dạng thống nhất] (http://en.wikipedia.org/wiki/Diff#Unified_format). Bạn có thể bỏ qua phần sau '@@' thứ hai. Giữa '@@' s, có hai thuật ngữ: thuật ngữ '-l, s' chỉ ra độ lệch (' l' là một số dòng) và kích thước ('s' là một số dòng) của phần tử trong tập tin gốc, trong khi '+ l, s' chỉ ra độ lệch và kích thước trong tệp sau khi vá. Khi có nhiều khối, xác định phần '+ l, s' bằng tay có thể khá là một chút. –

+0

Cảm ơn bạn đã giải thích từ "hunk" và để được tư vấn vá theo cách thủ công. – datv

-1

Tôi nhận được thông báo "không thành công" khi tôi không áp dụng bản vá trong thư mục trên cùng của dự án git được liên kết. Tôi đã áp dụng các miếng vá (nơi tôi tạo ra nó) trong một thư mục con.

Có vẻ như các bản vá có thể được tạo từ các thư mục con trong một dự án git, nhưng không được áp dụng.

+1

Điều này không đúng. Tuy nhiên, bạn cần phải cung cấp đối số '-p' để cho biết có bao nhiêu phần dẫn đầu của đường dẫn sẽ bị bỏ qua khi sử dụng bản vá. 'Patch' không biết về kho lưu trữ. 'git am' là. – JonnyJD

3

Debugging Mẹo

  1. Thêm CRLF đến cuối của tập tin vá lỗi và kiểm tra xem nó hoạt động
  2. thử lệnh --ignore-trắng giống như trong: [email protected]:~$ patch -Np1 --ignore-whitespace -d software-1.0 < fix-bug.patch thấy tutorial by markus
+0

--không gian trống được lưu trong ngày của tôi. cảm ơn ! – Strudle

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