如何“合并”两个文本文件?


13

我最近从Ubuntu 12.04升级到12.10,有一次它在中遇到Apache配置文件冲突apache2.conf。那时我没有给我合并选项,所以我拒绝了新文件,安装程序将新文件另存为apache2.conf.dpkg-dist

我可以将两个文件进行比较,diff apache2.conf apache2.conf.dpkg-dist并得到不同的行。但是我想手动合并两种方法,例如我如何解决SVN或git中的合并冲突。我怎样才能做到这一点?


如果没有适当的解析器,则只能手动合并它们
雏菊

Answers:



2

当解决冲突时,版本控制具有更多可用信息:它不仅具有您的版本和另一个人的版本,而且具有共同的祖先,因此可以进行三向合并。在这里,公共祖先是分发中配置文件的原始版本,或者是您上一次与更改合并的正式版本。

不幸的是,当配置文件更新时,Ubuntu和我所知的任何其他主要发行版都无法完全无缝地进行三路合并。但是,您可以通过etckeeper获得联系Etckeeper是APT的附加组件,APT是Debian及其衍生产品使用的软件包管理工具,可/etc在版本控制系统(Bazaar,Darcs,Git,Mercurial)中进行管理;它已被移植到其他系统,包括Fedora中的Yum。我建议使用etckeeper。这也是跟踪您在中所做的更改的好方法/etc

有些程序使用ucf管理其配置文件,但这不是用户可以控制的东西。

更一般地,当你有祖先和两个版本,你可以做的三方合并merge附带实用RCSdiff3 -mdiffutils的

还有很多交互式的差异和合并程序。Emacs和Vim都有接口,大多数diff查看器也是如此


1

我个人最喜欢的是kdiff3-我不知道是否有适用于Ubuntu的版本。根据主页,它仅使用qt

使用该工具,您可以将两个(或三个)文件合并为一个新文件。通过为每个差异选择一个方面,或者通过手动解决冲突。


目前(15.04),Ubuntu有两个kdiff3kdiff3-qt
mchid
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.