Почему git mergetool открывает 4 окна в vimdiff? (Я ожидал 3)
когда я встретил конфликт, я попытался использовать git-mergetool чтобы решить эту проблему. Я набрал:
>git mergetool -t vimdiff
открыл vimdiff в 4-way, не 3-way. Мои сплит-окна в 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
что это такое? Я хочу 3-way diff: целевой файл, файл слияния и рабочий файл. Как настроить git или vimdiff?
5 ответов
после многих исследований для выпуска mergetool с vimdiff и только 3 windows, я придумал эту конфигурацию, которая позволяет мне выбрать, когда я хочу 3 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 окна, просто набрав:
git m3
и значение по умолчанию (4 окна) будет по-прежнему работает, как ожидалось с:
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
- 'Merged' будет вашей рабочей копией.
- 'Local' файл, который находится в ветке, которую вы пытаетесь внести изменения
- 'Remote' файл из ветви, с которой вы пытаетесь слиться.
и затем выполнить команды: git mergetool.
Примечание: я использую беглец также и очень рекомендую его.
Примечание: В то время как вы можете использовать только 3 окна, как описано в Д-Р Беко ' s ответ
(vim -d -c "wincmd l" "$LOCAL" "$MERGED" "$REMOTE"'),
режим 4-windows улучшен с помощью git 2.8 (март 2016 года)
посмотреть совершить 2300328 (29 янв 2016) by Диксон Вонг (diwo).
(слитый Junio C Hamano -- gitster -- на совершить 82c17b7, 17 февраля 2016)
на
vimdiffбэкэнд для "git mergetool" был изменен, чтобы организовать и число буферов в порядке, который будет соответствовать ожиданию большинство людей, которые читают слева направо, затем сверху вниз и назначают буферы 1 2 3 4 "мысленно" для локальной базы удаленного слияния на основе windows в таком порядке.
внутренне, 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 в трех направлениях диффспри вызове default (g)
vimdiffтрехстороннее слияние, объединенный файл загружается как первый буфер, но перемещается вниз как четвертое окно.
Это вызывает разъединение междуvimкоманды, которые работают на окно позиции (например,CTRL-W_w) и те, которые работают с индексом буфера (например, do/dp).это изменение переупорядочивает буферы, чтобы иметь то же самое индекс как Windows, пока сохранение курсора по умолчанию для объединенного результата в качестве нижнего окна.
Я поддержу рекомендацию беглеца.
вы также можете попробовать соединения.ВИМ. Это плагин Vim, предназначенный для работы в качестве замены Git или mercurial mergetool. Это позволяет легко перетасовать различные взгляды на конфликт. Это также очень быстро, просто и делает хорошую работу по созданию слияния более интуитивным. Вот видеоуроки.
перечисленные вами файлы:
- локальный файл, содержащий конфликт.
- файл в ветке, в которую вы сливаетесь.
- файл в ветке, из которой вы сливаетесь.
- файл, как это было в обеих филиал узел ancesestor. Этот файл очень полезен для выяснения того, что происходит!
надеюсь, что это помогает.