【发布时间】:2014-06-19 15:09:15
【问题描述】:
我有一个文件的三个版本:原始版本、我的更改和其他人的更改。我想进行三向合并以生成包含两组更改的版本(如果不可能,则失败)。请注意,我不是询问任何修订控制系统,例如 svn 或 git。我想编写一个最小的命令行工具,它将三个文件作为输入并将合并写入标准输出。
一种方法如下,使用 Unix diff 和 patch 工具。假设这三个文件分别称为 orig、my、other:
% diff -u orig my |补丁 -o - 其他
或者反其道而行之,
% diff -u orig 其他 |补丁 -o - 我的
但实际上有两种方法可以进行差异和合并,这有点代码味道。当然,将所有三个文件作为输入的合并工具可以做得更好。
显然我可以初始化一个空的 svn 存储库,签入 orig,签入 my 和 other 在单独的分支中,然后进行合并。或者其他版本控制系统中的等效操作。但这似乎重量级且笨重,创建了一个将立即丢弃的存储库。
是否有合理的三向合并工具,可以从命令行独立运行?
【问题讨论】:
-
man merge... 有很多,但大多数都有用户界面。merge或sdiff是纯文本想到的......其他一些(例如xxdiff、meld、kdiff3及其 GNOME 对应物、Beyond Compare 等)可能可以选择以纯文本模式运行,不过,我猜...
标签: merge diff patch three-way-merge