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

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

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

评论

您曾经尝试过Meld吗?

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

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

@EricSabelhaus:对我而言,功能丰富的UI一词令人误解; vimdiff可能没有很好的UI,它肯定是功能丰富的。我还发现vim是我使用过的所有GUI编辑器的生产力更高的环境(但是我使用了很长时间,这是一个陡峭的学习曲线)。我更好奇Meld是否做过vim不做的任何事情,即使在看的时候也值得。

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

#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