Почему git mergetool открывает 4 окна в vimdiff?(я ожидаю 3)

StackOverflow https://stackoverflow.com/questions/7309707

  •  26-10-2019
  •  | 
  •  

Вопрос

Когда я столкнулся с конфликтом, я попытался использовать git-mergetool чтобы решить эту проблему.Я напечатал:

>git mergetool -t vimdiff

Он открылся vimdiff в 4-х, а не в 3-х путях.Мои разделенные окна в vimdiff выглядят так:

:ls
  1 #a   "Gemfile.lock"                 line 1
  2 %a   "Gemfile.lock.LOCAL.4828.lock" line 1
  3  a   "Gemfile.lock.BASE.4828.lock"  line 0
  4  a   "Gemfile.lock.REMOTE.4828.lock" line 0

Кто они такие?Мне нужен трехсторонний дифференциал:целевой файл, файл слияния и рабочий файл.Как мне настроить git или vimdiff?

Это было полезно?

Решение

В качестве альтернативы вы думали об использовании бегство?

Я не собираюсь лгать тебе; Fugibet.VIM вполне может быть лучшей оберткой за все время.

Есть отличный вимкас, FugitiT, Дрю Нил. Это часть серии о беглете.

А Вимкалы Веб -сайт - хорошее место, чтобы узнать больше о VIM.

Чтобы использовать бегство по мере того, как вы Mergetool вы можете использовать следующее.

git config --global mergetool.fugitive.cmd 'vim -f -c "Gdiff" "$MERGED"'
git config --global merge.tool fugitive

Примечание: вы можете изменить vim к mvim или же gvim.

Fugibet может предложить гораздо больше, чем просто сценарий инструмента Merge, поэтому убедитесь, что вы прочитали документацию и/или проверьте Vimcasts.

Другие советы

После множества исследований для выпуска Mergetool с Vimdiff и только 3 Windows я придумал эту конфигурацию, которая позволяет мне выбрать, когда я хочу 3 Windows или Windows по умолчанию 4: Windows:

git config --global merge.tool vimdiff
git config --global alias.mt mergetool

git config --global mergetool.merge3.cmd 'vim -d -c "wincmd l" "$LOCAL" "$MERGED" "$REMOTE"'
git config --global alias.m3 'mergetool -t merge3'

Теперь вы можете запустить 3 Windows, просто набирая:

git m3

И по умолчанию (4 Windows) все равно будет работать, как и ожидалось, с:

git mt

Кроме того, вы, вероятно, хотели бы добавить эти линии в конце вашего ~/.vimrc или же /etc/vim/vimrc

 " shortcuts to vimdiff
 let mapleader=','
 let g:mapleader=','

 if &diff
    map <leader>1 :diffget LOCAL<CR>
    map <leader>2 :diffget BASE<CR>
    map <leader>3 :diffget REMOTE<CR>
 endif

Это создаст ярлыки ,1 захватить слева, ,3 взять справа (в обоих режимах), а также ,2 Чтобы захватить из базы (центральное окно) в режиме 4 Windows.

Это очень помогает!

Мой ~/.gitconfig Файл выглядит так:

[user]
        name = Dr Beco
        email = my@email
[merge]
        tool = vimdiff
[mergetool "merge3"]
        cmd = vim -d -c \"wincmd l\" \"$LOCAL\" \"$MERGED\" \"$REMOTE\"
[alias]
        lo = log --pretty=format:\"%h %ce %cd %s\" --graph
        co = checkout
        ci = commit
        cm = commit -a -m
        st = status
        br = branch
        m3 = mergetool -t merge3
        mt = mergetool
[diff]
        tool = vimdiff

Я надеюсь, что это поможет вам (и те, кто попал сюда).

Немного изменить команды из эта страница:

git config --global mergetool.vimdiff3.cmd 'vim -f -d "$LOCAL" "$MERGED" "$REMOTE"'
git config --global merge.tool vimdiff3
  • «Объединенный» будет вашей рабочей копией.
  • «Локальный» файл, который находится в филиале, который вы пытаетесь внести изменения
  • «Удалить» файл из филиала, с которым вы пытаетесь слиться.

А потом вы выполняете команду: git mergetool.

Примечание: Я использую бегство Также и очень рекомендую это.

Примечание:при этом можно использовать только 3 винду как описано в Доктор Беко's отвечать
(vim -d -c "wincmd l" "$LOCAL" "$MERGED" "$REMOTE"'),
режим 4 окон улучшен с помощью git 2.8 (март 2016 г.)

Видеть совершить 2300328 (29 января 2016 г.) автор: Диксон Вонг (англ.diwo).
(Объединено Джунио С. Хамано -- gitster -- в зафиксировать 82c17b7, 17 февраля 2016 г.)

А vimdiff бэкэнд для "git mergetool«Был изменен, чтобы организовать и численные буферы в порядке, который бы соответствовал ожиданиям большинства людей, которые читают слева направо, затем сверху вниз и присваивают буферы 1 2 3 4" мысленно "локальному базовому удаленному слиянию окон на основе этого порядка Полем

Внутри git теперь будет использовать:

"$merge_tool_path" -f -d -c '4wincmd w | wincmd J' \
            "$LOCAL" "$BASE" "$REMOTE" "$MERGED"

вместо:

"$merge_tool_path" -f -d -c 'wincmd J' \
        "$MERGED" "$LOCAL" "$BASE" "$REMOTE"

mergetool:изменить порядок буферов vim/gvim в трехсторонних различиях

При вызове по умолчанию (g)vimdiff Трехсторонний слияние, объединенный файл загружается как первый буфер, но перемещается вниз как четвертое окно.
Это приводит к разрыву связи между vim Команды, которые работают в положениях окон (например, CTRL-W_w) и те, которые работают с индексом буфера (например. делать/дп).

Это изменение решает буферы, чтобы иметь тот же индекс, что и Windows, сохраняя при этом курсор по умолчанию к объединенному результату в качестве нижнего окна.

Я вторилю беглую рекомендацию.

Вы также можете попробовать Splice.vim. Анкет Это плагин VIM, предназначенный для того, чтобы выступать в качестве замены GIT или Mergurial Mergetool. Это позволяет легко перетасовать различные виды конфликта. Это также очень быстро, просто и делает хорошую работу, делая слияние более интуитивно понятным. Вот Скрикаст.

Перечисленные вами файлы:

  1. Локальный файл, содержащий конфликт.
  2. Файл в филиале, в который вы сливаете.
  3. Файл в филиале, из которого вы слияете.
  4. Файл, как это было в обоих филиале Ancesestor Node. Этот файл очень полезен для выяснения того, что происходит!

Надеюсь это поможет.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top