2010-01-02 19 views
14

Có cách nào để áp dụng một đoạn duy nhất từ ​​một diff đến một tập tin? Ví dụ, nói tôi làm một diff từ file A và B, và điều đó tạo ra ba khối của sự khác biệt, mỗi ký hiệu với một cái gì đó giống như ...Làm thế nào để vá chỉ một hunk cụ thể từ một khác

@@ -971,30 +977,28 @@ 

... (trong trường hợp của thống nhất diffs) . Sau đó tôi muốn để có thể cho ăn khác biệt đó vào stdin, và yêu cầu vá chỉ áp dụng hunk N.

Phương pháp thủ công là cắt và dán các khối thú vị, nhưng tôi không sau đó một loại giải pháp.

+0

Trong kinh nghiệm trước đây của tôi, nó không phải là rất khó để đọc một ngữ cảnh khác biệt vào một trình soạn thảo và cắt nó xuống. Tôi không thực sự thấy lợi thế của một cấu trúc đối số phức tạp cho bản vá trên đó. Có điều gì đó đặc biệt mà bạn đang cố gắng làm điều đó khiến cho điều này trở nên khó hiểu không? – bmargulies

+0

Hãy đặt nó theo cách này - nếu patch * đã * hỗ trợ nó - tôi * sẽ * sử dụng nó. Tôi có một số macro vim mà loại bỏ cú pháp khác vì vậy nó không phải là quá xấu, nhưng nó sẽ được dễ dàng hơn để chỉ cần gõ một lệnh duy nhất. – Cyrus

Trả lời

0

Một số công cụ khác biệt/vá GUI có cách để chọn các khối hoặc thậm chí các dòng riêng lẻ. Tôi biết TortoiseDiff từ TortoiseSVN có thể hoạt động theo cách này. Tôi nghĩ rằng tôi đã nhìn thấy windiff làm điều đó, nhưng nó đã được một thời gian kể từ khi tôi đã phải sử dụng nó.

Theo như các công cụ dòng lệnh, tôi chưa thấy bất kỳ điều gì sẽ làm những gì bạn đang yêu cầu.

+0

Tôi không thể tìm thấy bất cứ điều gì trong trang người đàn ông, nhưng cảm thấy rằng nó phải tồn tại - và nó chỉ là không có khả năng của tôi để tìm thấy nó. Vì vậy, bản thân bản vá không có hỗ trợ riêng cho việc này - điều đó có chính xác không? – Cyrus

7

filterdiff có thể hữu ích.

Nó cho phép khai thác tập con của các bản vá lỗi phù hợp với nhiều yêu cầu khác nhau, từ một/nhiều tệp bản vá. Ví dụ, ở đây chúng tôi trích xuất từ ​​file unified_diff.patch, các bản vá lỗi áp dụng đối với các file có tên phù hợp với one_file.c, chỉ để dòng 950-1050 của tập tin gốc:

filterdiff -i *one_file.c --lines=950,1050 unified_diff.patch 

Để trích xuất cụ thể/loạt các hunks:

filterdiff --hunks=1,3,5-8,15 file.patch 

bản vá lỗi Extracting từ mail:

filterdiff message-with-diff-in-the-body > file.patch 

, vv

+0

Đẹp, rất tiện dụng. – Nelson

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