2013-06-03 40 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