当我遇到冲突时,我尝试使用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
它们是什么?我要一个三向差分:目标文件,合并文件和工作文件。我应该如何配置我的git或vimdiff?
5条答案
按热度按时间r7s23pms1#
作为替代方案,您是否考虑过使用fugitive?
我不打算骗你; vim可能是有史以来最好的Git Package 器。
有一个很好的Vimcast,X1 E1 F1 X,作者是德鲁·尼尔。这是关于逃犯系列的一部分。
Vimcasts网站是了解更多关于vim的好地方。
要在合并工具时使用逃逸项,可以使用以下方法。
注意:您可能要将
vim
变更为mvim
或gvim
。Fugitive提供的不仅仅是一个合并工具脚本,所以请确保您阅读了文档和/或查看了vimcast。
rn0zuynd2#
经过大量的研究发布mergetool与vimdiff和只有3个窗口,我想出了这个配置,它允许我选择当我想要3个窗口或默认的4个窗口:
现在,只需键入以下内容即可启动3个窗口:
默认设置(4个窗口)在以下情况下仍将按预期工作:
此外,您可能希望将这几行添加到
~/.vimrc
或/etc/vim/vimrc
的末尾这将创建快捷方式,如
,1
从左侧抓取,,3
从右侧抓取(在两种模式下),以及,2
从4个窗口模式下的基本窗口(中心窗口)抓取。这可帮了大忙了!
我的
~/.gitconfig
文件看起来像这样:我希望这对你(和那些走到这里的人)有帮助。
6l7fqoea3#
注意:虽然您只能使用3个窗口,如Dr Beco的answer中所述
(
vim -d -c "wincmd l" "$LOCAL" "$MERGED" "$REMOTE"'
)、git 2.8增强了4窗口模式(2016年3月)
2016年1月29日,第一张专辑《X1 e2f1x》发行。
(由Junio C Hamano --
gitster
--合并到commit 82c17b7,2016年2月17日)“
git mergetool
“的vimdiff
后端已经被调整为按照与大多数从左到右阅读的人的期望相匹配的顺序来排列和编号缓冲区,然后自上而下并基于该顺序“在头脑中”将缓冲区1 2 3 4分配给本地基本远程合并窗口。在内部,git现在将用途:
而不是:
mergetool
:在三向差分中对VIM/GVIM缓冲区重新排序当调用default(g)
vimdiff
三向合并时,合并的文件作为第一个缓冲区加载,但作为第四个窗口移到底部。这导致在窗口位置上操作的
vim
命令(例如CTRL-W_w)和在缓冲器索引上操作的vim
命令(例如do/dp)之间断开。此更改将缓冲区重新排序为具有与窗口相同的索引,同时保持光标默认指向作为底部窗口的合并结果。
在Git 2.31(2021年第一季度)中,合并工具只会考虑3个面板,而不是4个。
参见Seth House (
whiteinge
)的commit 30bb808(2021年2月13日)。(2021年2月25日,由Junio C Hamano --
gitster
--在commit cadae71中合并)第1011章:添加vimdiff 1合并工具变体
签署人:赛斯大厦
试验人:大卫阿吉拉尔
这又增加了另一个vimdiff/gvimdiff变量,并将冲突表示为'LOCAL'和'REMOTE'之间的双向差异。
未打开“合并”,这偏离了标准,因此在启动时将用法文本作为Vim消息回显,以指导用户如何继续和如何中止。
Vimdiff非常适合于双向比较,因此这是一个更简单、更流线化的冲突解决方案的选项。
例如:仅使用语法突出显示来传达两个以上文件之间的差异是困难的;当仅使用两个缓冲器时,用于在缓冲器之间获得和放置改变的默认Vimdiff命令不需要用户手动指定源或目的地缓冲器。
与其他直接比较“LOCAL”和“REMOTE”的合并工具一样,此工具在与新的
mergetool.hideResolved
设置配合使用时将受益匪浅。Arthur Bowers在评论中报告使用了:
ha5z0ras4#
稍微修改一下this page中的命令:
然后执行以下命令:
git mergetool
.注:我也使用 * vibvant *,并强烈推荐使用。
xdnvmnnf5#
我支持逃犯的建议。
你也可以试试splice.vim。它是一个Vim插件,设计用来作为git或mercurial合并工具的插入式替代。它允许你轻松地混合冲突的不同视图。它也非常快速、直接,并且在使合并更加直观方面做得很好。这里有一个screencast。
您列出的文件是:
1.包含冲突的本地文件。
1.要合并到的分支中的文件。
1.合并来源分支中的文件。
1.这个文件在两个分支的祖先或节点中都是一样的。这个文件对于弄清楚发生了什么非常有用!
希望这对你有帮助。