SVN:使用Vim解决合并冲突

12

我正在尝试了解如何简化svn中的合并操作。

这个页面提到可以使用外部工具进行合并。Vim 能否作为外部合并工具呢?

一些额外要求:

  1. 文件应该被水平或垂直地分割以获得更好的视图。
  2. 窗口标题应该适当设置。

例如: enter image description here


1
@romainl:谷歌把我带到了这个页面,所以我真的感谢那个人。 - ereOn
1个回答

30

步骤1:

保存以下脚本,例如:merger.sh:

#!/bin/sh
#


BASE=${1}
THEIRS=${2}
MINE=${3}
MERGED=${4}
WCPATH=${5}

vimdiff $MINE $THEIRS -c ":botright split $MERGED" -c ":diffthis" -c "setl statusline=MERGED | wincmd W | setl statusline=THEIRS | wincmd W | setl statusline=MINE"

步骤2:

编辑.subversion/config文件并添加以下行:

merge-tool-cmd = /path/to/merger.sh

第三步:

当您在执行svn合并命令时,若出现以下选项,请选择 'l' 选项。 这是为了启动外部工具来解决冲突。

Conflict discovered in 'main.h'.
Select: (p) postpone, (df) diff-full, (e) edit,
        (mc) mine-conflict, (tc) theirs-conflict,
        (s) show all options: l

步骤 4: 现在 vim 将以 diff 模式打开 3 个文件 - 我的、他们的和合并后的文件。 在合并后的文件中进行必要的更改,然后保存并退出 (:wqa)。

步骤 5:

现在以下选项将再次出现,请选择 'r'(接受合并后的版本)。

Select: (p) postpone, (df) diff-full, (e) edit,
            (mc) mine-conflict, (tc) theirs-conflict,
            (s) show all options: r

1
如果这个更改不需要永久性地进行,也可以通过设置环境变量 SVN_MERGE=/path/to/merger.sh 来完成。 - Michael
我如何使用这个脚本来解决因"svn update"而产生的冲突,使得工作空间变得凌乱?我有很多 .r* 和 .mine 文件,但不确定如何让我的工作空间重新回到干净的状态。 - Christopher
以下答案的补充帮助了我:https://dev59.com/3l3Va4cB1Zd3GeqPDb9R - phyatt
如果您在第三步遇到错误:The external merge tool exited with exit code 255,则执行 chmod +x merger.sh - Steven Lee

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接