2011-09-20 33 views
21

Kịch bản: Tôi có một tệp vá áp dụng cho các tệp đang hoạt động của mình một cách rõ ràng, nhưng tôi không muốn tất cả các thay đổi từ bản vá.Làm cách nào để chỉnh sửa tệp diff/patch một cách rõ ràng? Có bất kỳ trình chỉnh sửa tệp bản vá nào không?

Thông thường, tôi làm vim example.patch, xóa các thay đổi không mong muốn và áp dụng patch -p0 -i example.patch nhưng đôi khi bản vá không áp dụng rõ ràng và tôi phải bắt đầu lại.

Có trình chỉnh sửa tệp bản vá cho phép người dùng chỉnh sửa và xóa một phần của bản vá và vẫn có thể áp dụng sạch không?

+0

Tại sao không tạo bản vá thứ hai? – Johnsyweb

+2

Xem http://stackoverflow.com/questions/242646/use-vimdiff-with-a-diff-file – dmedvinsky

+0

Tôi cần ở đây. Tôi cần phải chỉnh sửa các tập tin vá lỗi trước khi áp dụng và không có cách nào để tạo ra các bản vá khác. Vì vậy: Có một trình chỉnh sửa tệp bản vá cho phép người dùng chỉnh sửa và/hoặc xóa một phần của bản vá và vẫn có thể áp dụng một cách rõ ràng không? –

Trả lời

1

Không chỉnh sửa tệp vá theo cách thủ công. Trong trường hợp của bạn, bạn có thể thử một số công cụ tương tác để áp dụng miếng vá của bạn bằng hunk, như ipatch

14

Nếu bạn mở một tệp diff trong emacs và đặt trình chỉnh sửa ở chế độ "diff" bạn thực sự có thể chỉnh sửa các bản vá và nó sẽ cập nhật các dấu hunk một cách thông minh. Hoạt động thực sự tốt cho tôi!

+0

Có! Cảm ơn! Điều này làm nó hoàn hảo! –

2

Bạn sử dụng SCM nào? nếu sử dụng Git bạn có thể:

  • Trước khi tạo ra các bản vá thực tế sử dụng git add -p chỉ thêm phần thay đổi của bạn. Đó là thực hành tốt để tạo ra các cam kết nhỏ hơn chỉ với những thay đổi có liên quan (tuy nhiên một số tổ chức không thích điều này và chỉ cho phép một cam kết lớn).

  • Nếu bạn đã có bản vá áp dụng, sau đó sử dụng git add -p để thêm các phần của mã bạn muốn giữ cho chỉ mục của mình. Bạn có thể cam kết và vứt bỏ phần còn lại (git co .) hoặc giấu nó (git stash).

chỉnh sửa (dựa trên git add comment -p)

  • git add -p cho phép bạn chia một hunk thành từng miếng nhỏ bằng cách sử dụng tùy chọn này, trong trường hợp khi bạn cần biết thêm chi tiết bạn cần phải sử dụng tùy chọn e để chỉnh sửa, sẽ đưa bạn đến trình soạn thảo gitconfig của bạn và nó sẽ có hướng dẫn về cách chỉnh sửa đoạn.
+0

Tôi có vấn đề này chính xác khi sử dụng 'git add -p' (tức là trong" Manual hunk edit mode ") vì đôi khi không thể phân biệt diff thành hunks sạch và một số chỉnh sửa diff thủ công là cần thiết. – Jawa

+0

Vấn đề với 'git add -p' là nó chỉ cung cấp một phần nhỏ của chức năng mà' git diff' (và trình điều khiển cơ bản của nó) cung cấp. Ví dụ, nếu tôi muốn hiểu các thay đổi mà tôi đã thực hiện trước khi cam kết, sử dụng cờ '-w' để' git diff' để bỏ qua khoảng trắng, điều đó sẽ giúp tôi không nếu tôi muốn 'git add -p' một số thay đổi này tương tác, bởi vì không có '-w' cho' git add'. Những gì mọi người làm là họ tạo tệp vá bằng 'git diff -w ...' và sau đó sử dụng 'git apply', nhưng lại đưa họ trở lại trình chỉnh sửa bản vá - vì' git add' không có ở đó để trợ giúp chúng. – amn

5

Nếu bạn đang tìm kiếm giải pháp không tương tác, rediff từ patchutils là trợ giúp.

Dưới đây là mô tả của nó man:

Bạn có thể sử dụng rediff để sửa chữa một khác biệt thống nhất hiệu chỉnh bằng tay. Hãy lấy một bản sao của ngôn ngữ khác mà bạn muốn chỉnh sửa và chỉnh sửa nó mà không thay đổi bất kỳ số bù nào hoặc đếm (các dòng bắt đầu “@@”). Sau đó chạy rediff, cho nó biết tên của tệp diff gốc và tên của tệp bạn đã chỉnh sửa và nó sẽ xuất ra tệp diff đã chỉnh sửa nhưng không được sửa đổi số và số đếm.

Một tập lệnh nhỏ, editdiff, được cung cấp để chỉnh sửa tệp khác tại chỗ.

Các loại thay đổi hiện đang xử lý là:

  • Sửa đổi văn bản của bất kỳ dòng nội dung tập tin (tất nhiên).
  • Thêm chèn hoặc xóa dòng mới.
  • Thêm, thay đổi hoặc xóa các dòng ngữ cảnh. Các dòng ở chân trời bối cảnh được xử lý bằng cách điều chỉnh độ lệch và/hoặc đếm.
  • Thêm một đoạn duy nhất (@@ - phần có tiền tố).
  • Xóa nhiều thư mục (@@ - các phần có tiền tố).

Dựa trên mô tả của nó, recountdiff cũng có thể là một ứng cử viên tiềm năng để sửa chữa diffs thống nhất.

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