Почему git mergetool открывает 4 окна в vimdiff?(я ожидаю 3)
Вопрос
Когда я столкнулся с конфликтом, я попытался использовать 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. Это позволяет легко перетасовать различные виды конфликта. Это также очень быстро, просто и делает хорошую работу, делая слияние более интуитивно понятным. Вот Скрикаст.
Перечисленные вами файлы:
- Локальный файл, содержащий конфликт.
- Файл в филиале, в который вы сливаете.
- Файл в филиале, из которого вы слияете.
- Файл, как это было в обоих филиале Ancesestor Node. Этот файл очень полезен для выяснения того, что происходит!
Надеюсь это поможет.