2013-06-03 80 views
8

手動合併兩個文件,我想通過做合併兩個文件中的以下內容:使用DIFF

  1. 輸出兩個文件的差異到一個臨時文件,並
  2. 手動選擇我想要的行復制/保存。

這裏的問題是,diff -u只給我一個上下文的文件行,而我想輸出統一格式的整個文件。

有沒有什麼辦法比較可以做到這一點?

+0

我知道很多人喜歡在使用vim diff模式來做到這一點,並有幾個插件,使三個緩衝區(舊的,合併,'新')更好地工作。 – demure

+0

有什麼問題?只需刪除不想要的補丁部分,然後修補該文件即可。另請注意[git cherry picking](https://www.kernel.org/pub/software/scm/git/docs/git-cherry-pick.html)。這正是你想要做的 – hek2mgl

回答

6

「我想以統一的格式輸出整個文件。diff有沒有辦法做到這一點?

是的。

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

這應該可行,只要你的文件長度少於1000萬行。

10

一種選擇可能適合該法案對你來說,

sdiff:並排側DIFF文件。

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

一旦出現,它會提示你你想從哪個文件保持什麼線路。點擊?,然後enter獲得一點幫助。還有man sdiff同詳細商品。

(在我的發行,這些都打包在「diffutils的」包[Fedora的,CentOS的])

如果您需要自動化的過程中,你可能會想嘗試UTIL merge,這將標誌着衝突文件。但是,這可能會讓你回到原點。

0

簡單的答案是使用-D標誌合併文件並用C風格#ifdef語句包圍差異。

從文檔:

$ diff -D NEWSTUFF file1 file2 > merged_file 

我平時則只需打開該合併的文件在編輯器中,並通過手動來解決合併衝突:

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

您可以按如下方式使用它。

您也可以使用選項輸出ed腳本等

0

您可以合併/使用兩個文件合併與差異 -

diff --line-format %L file1 file2