Почему 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. Этот файл очень полезен для выяснения того, что происходит!
надеюсь, что это помогает.