2013-06-03 23 views
8

tôi muốn hợp nhất hai tập tin bằng cách làm như sau:thủ hợp nhất hai tập tin sử dụng diff

  1. Output diff của hai tập tin vào một tập tin tạm thời và
  2. thủ chọn những dòng tôi muốn sao chép/lưu.

Vấn đề ở đây là diff -u chỉ cung cấp cho tôi dòng tệp ngữ cảnh, trong khi tôi muốn xuất toàn bộ tệp theo định dạng thống nhất.

Có cách nào khác có thể thực hiện việc này không?

+0

Tôi biết có rất nhiều người như sử dụng vim trong chế độ khác để thực hiện việc này và có một số plugin tạo ba bộ đệm (cũ, hợp nhất, 'mới') hoạt động tốt hơn. – demure

+0

Có vấn đề gì? Chỉ cần xóa các phần của bản vá mà bạn không muốn có và sau đó vá tệp. Cũng lưu ý về [git cherry pick] (https://www.kernel.org/pub/software/scm/git/docs/git-cherry-pick.html). Đây chính là điều bạn muốn làm – hek2mgl

Trả lời

6

"Tôi muốn xuất toàn bộ tệp theo định dạng hợp nhất. Có cách nào khác có thể thực hiện việc này không?"

Có.

diff -U 9999999 file1.txt file2.txt > diff.txt 

Điều này sẽ hiệu quả, với điều kiện tệp của bạn dài hơn 10 triệu dòng.

10

Một lựa chọn mà có thể phù hợp với những hóa đơn cho bạn,

sdiff: side-by-side diff của tập tin.

sdiff -o merged.file left.file right.file

Khi đó, nó sẽ nhắc bạn với những gì dòng bạn muốn giữ lại để từ đó tập tin. Nhấn ? và sau đó enter để được trợ giúp một chút. Ngoài ra man sdiff với các chi tiết hàng hóa.

(Trong distro của tôi, những đến đóng gói trong gói "diffutils" [fedora, centos])

Nếu bạn cần để tự động hóa quá trình này, bạn có thể muốn thử util merge, mà sẽ đánh dấu cuộc xung đột ở Tập tài liệu. Tuy nhiên, điều đó có thể đưa bạn trở lại hình vuông.

0

Câu trả lời dễ dàng là sử dụng cờ -D để hợp nhất các tệp và bao quanh sự khác biệt với câu lệnh #ifdef kiểu C.

Từ các tài liệu:

-D NAME --ifdef=NAME 
      Output merged file to show `#ifdef NAME' diffs. 

Bạn có thể sử dụng nó như sau:

$ diff -D NEWSTUFF file1 file2 > merged_file 

Tôi thường sau đó chỉ cần mở file sáp nhập trong một trình soạn thảo và giải quyết các xung đột nhập bằng tay.

Bạn cũng có thể sử dụng tùy chọn để ra một kịch bản ed vv

0

Bạn có thể sáp nhập/kết hợp hai tập tin với diff sử dụng -

diff --line-format %L file1 file2 
Các vấn đề liên quan