为什么git mergetool在vimdiff中打开4个窗口?(我希望是3个)
当我遇到冲突时,我尝试使用为什么git mergetool在vimdiff中打开4个窗口?(我希望是3个),git,vim,vimdiff,Git,Vim,Vimdiff,当我遇到冲突时,我尝试使用git mergetool来解决它。我键入: >git mergetool -t vimdiff 它以4路而不是3路打开vimdiff。我在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
git mergetool
来解决它。我键入:
>git mergetool -t vimdiff
它以4路而不是3路打开vimdiff
。我在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路差异:目标文件,合并文件和工作文件。我应该如何配置git或vimdiff?作为替代方案,您考虑过使用吗 我不会对你撒谎;逃犯维姆很可能是最好的 Git包装器的所有时间 有一个很棒的vimcast,由Drew Neil制作。这是《逃犯》系列的一部分 该网站是了解vim更多信息的好地方 要在合并时使用逃犯工具,可以使用以下工具
git config --global mergetool.fugitive.cmd 'vim -f -c "Gdiff" "$MERGED"'
git config --global merge.tool fugitive
注意:您可能需要将vim
更改为mvim
或gvim
“逃犯”不仅仅是一个合并工具脚本,还提供了很多功能,因此请务必阅读文档和/或查看Vimcast。我支持“逃犯”的建议 你也可以试试。它是一个Vim插件,旨在充当git或mercurial mergetool的替代品。它允许您轻松地混合各种冲突视图。它也非常快速、直观,在使合并更直观方面做得很好。这是一个例子 您列出的文件包括:
希望这能有所帮助。稍微修改一下以下命令:
- “合并”将是您的工作副本
- “Local”您尝试进行更改的分支中的文件
- “远程”您试图合并的分支中的文件
gitmergetool
注意:我也使用了Sessional,并强烈推荐它。经过大量研究,发布了带有vimdiff且只有3个窗口的mergetool,我提出了此配置,允许我选择何时需要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
我希望这对你(以及那些到这里的人)有所帮助。注意:虽然你只能使用3个窗口,如中所述
(
vim-d-c“wincmd l”$LOCAL“$MERGED”$REMOTE“
),git 2.8增强了4-windows模式(2016年3月) 参见(2016年1月29日)作者。
(于2016年2月17日被合并) “
git mergetool
”的vimdiff
后端已调整为
缓冲区的编号顺序应与
大多数人从左到右阅读,然后自上而下分配
缓冲区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
triple-waymerge时,合并的文件是
作为第一个缓冲区加载,但作为第四个窗口移动到底部。这会导致在车窗上操作的vim命令之间断开 位置(例如CTRL-W_W)和在缓冲区索引上操作的位置(例如do/dp) 此更改会重新排序缓冲区,使其索引与windows相同 将光标保留为合并结果的默认值作为底部窗口。
对于Git2.31(2021年第1季度),mergetools只考虑3个面板,而不是4个 参见作者(2021年2月13日)
(于2021年2月25日合并) :添加vimdiff1合并工具变量 签字人:赛斯大厦
测试人:David Aguilar 这又增加了另一个vimdiff/gvimdiff变体,并将冲突表示为“本地”和“远程”之间的双向差异。
“合并”未打开,这与正常情况不同,因此在启动时,用法文本作为Vim消息进行回显,指示用户如何继续和如何中止 Vimdiff非常适合双向差异,因此这是一种更简单、更精简的冲突解决方案。
例如:仅使用语法突出显示很难在两个以上的文件之间传递差异;当仅使用两个缓冲区时,用于在缓冲区之间获取和放置更改的默认vimdiff命令不需要用户手动指定源缓冲区或目标缓冲区 与其他直接比较“本地”和“远程”的合并工具一样,此工具与新的
mergetool.hideResolved
设置搭配使用时将受益匪浅
我可以将它与git mergetool一起使用吗??它告诉我打开冲突文件并调用
:Gdiff
@Lai-Yu-Hsuan:我已经编辑了我的帖子,包括一些mergetool-config选项。完美地解决了我的问题。也许这就省去了对我来说BeyondCompare的需要,谢谢这三个现在被称为splice.Vim似乎没有人向您指出这一点:如果您还想显示合并结果窗口,您需要四个窗口来执行三向差异。换句话说,您可以在基本、本地和远程(3个窗口)之间获得差异,并可以编辑结果合并(第4个窗口)。
"$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"