Svn: использование vim для объединения конфликтов

Я пытаюсь понять, как слияние в svn можно упростить.

На этой странице говорится, что внешние инструменты могут использоваться для слияния. Можно ли использовать vim в качестве инструмента внешнего слияния?

Некоторые дополнительные требования:

  • Файлы должны быть разделены горизонтально/вертикально, чтобы обеспечить лучший обзор.
  • Заголовки окон должны быть установлены соответствующим образом.

например: как в enter image description here

Ответ 1

Шаг 1:

Сохраните следующие script, например: 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

Шаг 3:

Когда вы получаете следующие параметры во время команды svn merge, выберите опцию '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 с тремя файлами - моими, их и объединенными. Внесите необходимые изменения в объединенный файл и сохраните и выйдите (:wqa).

Шаг 5:

Теперь ниже параметров снова появятся, выберите 'r' (чтобы принять объединенную версию).

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