我知道我们可以使用vimdiff来对源代码控制进行代码更改差异,但是还有一种方法可以使用vimdiff可以帮助解决合并冲突冲突。
我个人对git感兴趣,但是了解是否有其他源代码控制工具/系统的插件/技术会很有用。
#1 楼
我通常在命令行上使用git。但是当发生合并冲突时,我使用Vim来解决它们(我个人使用逃犯插件来解决)。注意:逃犯对于Vim内部的许多git操作都是有益的。我最喜欢的功能是合并冲突的三种方式。
git通过git mergetool在vimdiff中支持此功能。我已经安装了逃犯,但可以手动进行设置(感谢@Jay Thompson)。
手动设置:
git config --global merge.tool vimdiff
git mergetool <file with conflicts>
输出为与下面描述的内容略有不同(我个人没有使用过)。但是原理是相同的,但是您在底部有第四个窗口,其中包含结果。 fugitive是Vim的git wrapper / integration插件;它可以做很多事情,而解决冲突就是其中之一。
<Install the Fugitive Plugin>
vim <file with conflicts>
:Gdiff
视图2(左):分支上的代码。
视图1(中):合并的代码(有冲突)
视图3(右):已合并到您的代码中的代码。
您现在可以提取文本从其他两个视图进入中央视图(它将包含所有手动修复)。手动解决所有冲突后,只需退出vimdiff
,尽管您可以使用
:diffget <view number>
和:diffput <view number>
在视图之间进行拉入和推送。我个人认为这不是很有用。所有代码已经在中间视图中。因此,我只想手动编辑该视图,直到解决冲突为止。能够在编辑器窗口的两边同时看到两个版本的代码非常有用。在这里也很好地演示了它的用法
评论
如果由于某种原因不想使用或安装Fugitive,也可以简单地设置git config --global merge.tool vimdiff,然后运行git mergetool以diff模式启动vim。
–杰伊·汤普森(Jay Thompson)
2015年2月9日在18:58
这是否支持“ diff3”样式的合并冲突,其中显示了“合并的共同祖先”?
– alxndr
2015年2月9日在19:39
@alxndr:我之前从未听说过diff3。但是在快速谷歌之后。 git中的合并冲突的输出(以及我使用的其他源代码控制)与diff3-E相同。因此,以上图像是从其中包含这些标记的文件生成的。
–马丁·约克
2015年2月9日在20:48
现在,我仔细观察,第一个屏幕截图显示了diff3的merge样式;中间的顶部窗格“ BASE”是公共祖先,左右窗格分开了。
– alxndr
2015年2月10日下午5:14
重要的是要记住,这四个视图中的每一个都只是一个缓冲区。这意味着您可以打开另一个选项卡(甚至留在同一窗口中),并仅选择要在任何给定时刻查看的缓冲区。如果您不使用所有四个窗口,则没有理由同时打开所有四个窗口。
–科迪民意测验
2015年2月11日在11:15
评论
您曾经尝试过Meld吗?@EricSabelhaus:在解决冲突方面,它比vimdiff好吗?这个网站是关于询问/回答有关vim的问题。
这取决于我认为的用例。如果我正在开发可远程驻留的代码,那么我肯定会使用vimdiff。如果我在自己的开发机器上本地工作,我将使用Meld,因为它提供了功能丰富的UI,可帮助开发人员执行复杂的3种方式的合并。
@EricSabelhaus:对我而言,功能丰富的UI一词令人误解; vimdiff可能没有很好的UI,它肯定是功能丰富的。我还发现vim是我使用过的所有GUI编辑器的生产力更高的环境(但是我使用了很长时间,这是一个陡峭的学习曲线)。我更好奇Meld是否做过vim不做的任何事情,即使在看的时候也值得。
我不能特别说说它是否具有更强大的功能集,但它绝对与vimdiff处于同一领域。