vimdiff和合并冲突


14

在源代码控制下合并分支时,通常会与其他开发人员发生合并冲突的问题。

我知道我们可以使用vimdiff将代码更改与源代码控制进行差异化,但是还有一种方法可以使用vimdiff帮助解决合并冲突冲突。

我个人对git感兴趣,但是了解是否有其他源代码控制工具/系统的插件/技术会很有用。


您曾经尝试过Meld吗?
Eric Sabelhaus'Feb 9'15

1
@EricSabelhaus:在解决冲突方面,它比vimdiff好吗?这个站点是关于询问/回答有关vim的问题。
马丁·约克

这取决于我认为的用例。如果我正在开发可远程驻留的代码,那么我肯定会使用vimdiff。如果我在自己的开发机器上本地工作,则将使用Meld,因为它提供了功能丰富的UI,可帮助开发人员执行复杂的3种方式的合并。
Eric Sabelhaus'Feb 9'15

1
@EricSabelhaus:对我来说,这个词feature rich UI具有误导性;vimdiff可能没有很好的UI,它肯定是功能丰富的。我还发现vim是我使用过的所有GUI编辑器的生产力更高的环境(但是我使用了很长时间,这是一个陡峭的学习曲线)。我更好奇,如果Meld做vim不做的任何事情,即使看了也值得。
马丁·约克

我不能特别说说它是否具有更强大的功能集,但它绝对与vimdiff处于同一领域。
Eric Sabelhaus'Feb 9'15

Answers:


18

我通常在命令行上使用git。

但是,当发生合并冲突时,我可以使用Vim来解决它们(我个人使用逃犯插件来解决)。注意:逃犯对于Vim内部的许多git操作都是有益的。我最喜欢的功能是合并冲突的三向差异。

git通过git mergetool在vimdiff中支持此功能。我已经安装了逃犯,但是您可以手动设置它(感谢@Jay Thompson)。

手动设置:

git config --global merge.tool vimdiff
git mergetool <file with conflicts>

输出结果与以下描述略有不同(我个人没有使用过)。但是原理是相同的,但是在底部有第四个窗口包含结果。

在此处输入图片说明

设置逃亡者

vim-fugitive是Vim的git wrapper / integration插件;它可以做很多事情,解决冲突就是其中之一。

<Install the Fugitive Plugin>
vim <file with conflicts>
:Gdiff
  1. 视图2(左):分支上的代码。
  2. 视图1(中):合并的代码(有冲突)
  3. 视图3(右):合并到您的代码中的代码。

现在,您可以从其他两个视图中提取文本并将其获取到中央视图中(它将包含所有手动修复程序)。解决所有冲突后,只需退出vimdiff

在此处输入图片说明

虽然您可以使用:diffget <view number>:diffput <view number>在视图之间推拉东西。我个人认为这不是很有用。所有代码已经在中间视图中。因此,我只想手动编辑该视图,直到解决冲突为止。能够在编辑器窗口的任一侧看到两个版本的代码非常有用。

在这里也是一个很好的演示


1
如果由于某种原因不想使用或安装Fugitive,也可以简单地设置git config --global merge.tool vimdiff并运行git mergetool以diff模式启动vim。
杰伊·汤普森

这是否支持“ diff3”合并冲突样式,其中显示了“合并的共同祖先”?
alxndr

@alxndr:我以前没有听说过diff3。但是在快速谷歌之后。git中的合并冲突的输出(和我使用的其他源代码控制)与相同diff3 -E。因此,以上图像是从其中包含这些标记的文件生成的。
马丁·约克

现在,我仔细观察,第一个屏幕截图显示了diff3的合并样式;中间的顶部窗格“ BASE”是公共祖先,左右窗格分开了。
alxndr 2015年

1
重要的是要记住,这四个视图中的每一个都只是一个缓冲区。这意味着您可以打开另一个选项卡(甚至留在同一窗口中),并仅选择要在任何给定时刻查看的缓冲区。如果您不使用全部四个窗口,则没有理由同时打开所有四个窗口。
Cody Poll,2015年
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.