当我遇到冲突时,我尝试使用git-mergetool
来解决它。我打字:
>git mergetool -t vimdiff
它以4向打开vimdiff
,而不是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?
答案 0 :(得分:32)
作为替代方案,您是否考虑过使用fugitive?
我不会骗你; fugitive.vim可能是最好的 有史以来的Git包装。
Drew Neil有一个很棒的vimcast Fugitive.vim - resolving merge conflicts with vimdiff。这是逃犯系列的一部分。
Vimcasts网站是了解更多有关vim的好地方。
要在合并工具时使用逃犯,您可以使用以下内容。
git config --global mergetool.fugitive.cmd 'vim -f -c "Gdiff" "$MERGED"'
git config --global merge.tool fugitive
注意:您可能希望将vim
更改为mvim
或gvim
。
除了作为合并工具脚本之外,Fugitive还提供了更多功能,因此请务必阅读文档和/或查看vimcast。
答案 1 :(得分:9)
经过大量研究,发现与vimdiff和只有3个窗口合并工具,我想出了这个配置,允许我选择我想要3个窗口或默认4个窗口:
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
我希望这可以帮助你(以及那些到达这里的人)。
答案 2 :(得分:5)
修改this page的命令:
git config --global mergetool.vimdiff3.cmd 'vim -f -d "$LOCAL" "$MERGED" "$REMOTE"'
git config --global merge.tool vimdiff3
然后执行命令:git mergetool
。
注意:我也使用逃犯并强烈推荐它。
答案 3 :(得分:5)
注意:虽然您只能使用Dr Beco&#39; answer中所述的3个Windows
(vim -d -c "wincmd l" "$LOCAL" "$MERGED" "$REMOTE"'
),
使用git 2.8增强了4-windows模式(2016年3月)
commit 2300328见Dickson Wong (diwo
)(2016年1月29日)
(Junio C Hamano -- gitster
--在2016年2月17日commit 82c17b7合并)
&{34;
vimdiff
&#34;git mergetool
后端已被调整安排 并按照与期望匹配的顺序编号缓冲区 大多数人从左到右阅读,然后自上而下并分配 缓冲区1 2 3 4&#34;精神上&#34;以本地基础远程合并窗口为基础 在那个订单上。
在内部,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 )和那些在缓冲区索引上运行的位置(例如 do / dp )。< / p>此更改将缓冲区重新排序为与Windows具有相同的索引 将光标默认为合并结果作为底部窗口。
答案 4 :(得分:4)
我将推荐逃犯。
你也可以尝试splice.vim。它是一个Vim插件,旨在充当git或mercurial mergetool drop-in替代品。它允许您轻松地改变冲突的各种观点。它也非常快速,直接,并且在使合并更直观方面做得很好。这是一个screencast。
您列出的文件是:
希望这有帮助。