当我运行git difftool --tool-help
或git mergetool --tool-help
时,我看到:
vimdiff
vimdiff1
vimdiff2
vimdiff3
这些不同的“版本”是什么?我想他们都有不同的选择,但有哪些选择呢?它们在哪里都有记录吗?
发布于 2021-07-02 03:08:02
不幸的是,它们似乎没有被记录在任何地方。
相关的源代码是这里。注意vimdiff
、nvimdiff
和gvimdiff
是如何用相同的脚本实现的。
扩散工具
当它们作为一个不同的工具被调用时,它们都会做同样的事情:
vim -R -f -d \
-c 'wincmd l' \
-c 'cd $GIT_PREFIX' \
"$LOCAL" "$REMOTE"
这将在只读模式-R
和diff模式-d
中启动Vim。有关diff模式的信息,请参阅手册页vimdiff(1)
和Vim帮助页diff.txt
。
Mergetool
当作为合并工具调用时,这些选项的行为会有所不同。
在下面的图表中,Local
对应于“我们的”,Remote
对应于“他们的”,Base
对应于“合并基”,而Merge
是实际将被保存到工作树中的文件(如果解析成功,则分阶段到索引中)。
vimdiff
如果存在“合并基”,则窗口布局为:
# | Local | Base | Remote |
# | --------------------- |
# | Merge |
vim -f -d \
-c '4wincmd w | wincmd J' \
"$LOCAL" "$BASE" "$REMOTE" "$MERGED"
如果没有合并基,则布局为:
# | | | |
# | Local | Merge | Remote |
# | | | |
vim -f -d \
-c 'wincmd l' \
"$LOCAL" "$MERGED" "$REMOTE"
vimdiff1
布局如下:
# | | |
# | Local | Remote |
# | | |
vim -f -d "$LOCAL" "$REMOTE"
ret="$?"
if test "$ret" -eq 0
then
cp -- "$LOCAL" "$MERGED"
fi
Local
将在成功后保存到工作树中,取代Merged
。
vimdiff2
布局与没有合并基的vimdiff
相同。
vimdiff3
Local
、Remote
、Base
(如果存在的话)中的每一个都将被打开但隐藏。Merged
将被打开并可见。您可以使用:buffer
命令在这些缓冲区之间切换。
# With Base
vim -f -d \
-c 'hid | hid | hid' \
"$LOCAL" "$REMOTE" "$BASE" "$MERGED"
# Without Base
vim -f -d \
-c 'hid | hid' \
"$LOCAL" "$REMOTE" "$MERGED"
创建你自己的并购工具!
让我们创建一个vimdiff4
,它使用与vimdiff
-with相同的布局,但省略了基本部分。
在Git配置中添加以下内容(例如$XDG_CONFIG_HOME/git/config
):
[mergetool "nvimdiff4"]
# Like "nvimdiff", but always ignore $BASE.
cmd = nvim -f -d -c '$wincmd w' -c 'wincmd J' $LOCAL $REMOTE $MERGED
当您调用git mergetool --tool-help
时,您将在输出中看到一个新行:
user-defined:
nvimdiff4.cmd nvim -d -c '$wincmd w' -c 'wincmd J' $LOCAL $REMOTE $MERGED
现在您可以运行git mergetool --tool=nvimdiff4
,它将调用我们前面指定的命令。
https://stackoverflow.com/questions/68219141
复制相似问题