当我遇到冲突时,我试图用git-mergetool它来解决它.我键入:
>git mergetool -t vimdiff
Run Code Online (Sandbox Code Playgroud)
它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
Run Code Online (Sandbox Code Playgroud)
这些是什么?我想要一个三向差异:目标文件,合并文件和工作文件.我该如何配置我的git或vimdiff?
Pet*_*ker 32
作为替代方案,你有没有想过使用逃犯?
我不会骗你的; fugitive.vim很可能是有史以来最好的Git包装器.
有一个很棒的vimcast,Fugitive.vim -由Drew Neil 解决与vimdiff的合并冲突.这是逃犯系列的一部分.
该Vimcasts网站了解更多关于vim的一个好地方.
要在合并工具时使用逃犯,可以使用以下方法.
git config --global mergetool.fugitive.cmd 'vim -f -c "Gdiff" "$MERGED"'
git config --global merge.tool fugitive
Run Code Online (Sandbox Code Playgroud)
注意:您可能想要更改vim为mvim或gvim.
除了作为合并工具脚本之外,Fugitive还提供了更多功能,因此请务必阅读文档和/或查看vimcast.
经过大量的研究,发现与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'
Run Code Online (Sandbox Code Playgroud)
现在您只需键入以下内容即可启动3个窗
git m3
Run Code Online (Sandbox Code Playgroud)
默认(4个窗口)仍将按预期工作:
git mt
Run Code Online (Sandbox Code Playgroud)
此外,您可能希望将此行添加到您~/.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
Run Code Online (Sandbox Code Playgroud)
这将创建快捷方式,例如,1从左侧,3抓取,从右侧抓取(在两种模式下)以及,2从4窗口模式中从基座(中心窗口)抓取.
这有很大帮助!
我的~/.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
Run Code Online (Sandbox Code Playgroud)
我希望这对你(以及那些到达这里的人)有所帮助.
修改此页面中的命令:
git config --global mergetool.vimdiff3.cmd 'vim -f -d "$LOCAL" "$MERGED" "$REMOTE"'
git config --global merge.tool vimdiff3
Run Code Online (Sandbox Code Playgroud)
然后执行命令:git mergetool.
注意:我也使用逃犯,强烈推荐它.
注意:虽然Beco博士的答案
(vim -d -c "wincmd l" "$LOCAL" "$MERGED" "$REMOTE"')中描述的只能使用3个Windows ,
但4-windows模式增强了git 2.8(2016年3月)
请参阅Dickson Wong()提交的2300328(2016年1月29日).(由Junio C Hamano合并- -在提交82c17b7,2016年2月17日)diwo
gitster
vimdiff"git mergetool" 的后端已经过调整,以便按照与从左到右阅读的大多数人的期望,然后自上而下的顺序排列和编号缓冲区,并将"缓冲区"1 2 3 4"精神上"分配给本地基础远程合并窗口基于该订单.
在内部,git现在将使用:
"$merge_tool_path" -f -d -c '4wincmd w | wincmd J' \
"$LOCAL" "$BASE" "$REMOTE" "$MERGED"
Run Code Online (Sandbox Code Playgroud)
代替:
"$merge_tool_path" -f -d -c 'wincmd J' \
"$MERGED" "$LOCAL" "$BASE" "$REMOTE"
Run Code Online (Sandbox Code Playgroud)
mergetool:在三向差异中重新排序vim/gvim缓冲区调用默认(g)
vimdiff三向合并时,合并文件作为第一个缓冲区加载,但作为第四个窗口移动到底部.
这导致vim在窗口位置(例如CTRL- W_w)上操作的命令与在缓冲区索引(例如do/ dp)上操作的命令之间断开连接.此更改将缓冲区重新排序为具有与窗口相同的索引,同时将游标默认为合并结果作为底部窗口.