首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >各种"vimdiff“衍射工具/合并工具是什么?

各种"vimdiff“衍射工具/合并工具是什么?
EN

Stack Overflow用户
提问于 2021-07-02 03:08:02
回答 1查看 931关注 0票数 10

当我运行git difftool --tool-helpgit mergetool --tool-help时,我看到:

  • vimdiff
  • vimdiff1
  • vimdiff2
  • vimdiff3

这些不同的“版本”是什么?我想他们都有不同的选择,但有哪些选择呢?它们在哪里都有记录吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-07-02 03:08:02

不幸的是,它们似乎没有被记录在任何地方。

相关的源代码是这里。注意vimdiffnvimdiffgvimdiff是如何用相同的脚本实现的。

扩散工具

当它们作为一个不同的工具被调用时,它们都会做同样的事情:

代码语言:javascript
运行
复制
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

如果存在“合并基”,则窗口布局为:

代码语言:javascript
运行
复制
# | Local | Base | Remote |
# | --------------------- |
# |        Merge          |

vim -f -d \
  -c '4wincmd w | wincmd J' \
  "$LOCAL" "$BASE" "$REMOTE" "$MERGED"

如果没有合并基,则布局为:

代码语言:javascript
运行
复制
# |       |       |        |
# | Local | Merge | Remote |
# |       |       |        |

vim -f -d \
  -c 'wincmd l' \
  "$LOCAL" "$MERGED" "$REMOTE"

vimdiff1

布局如下:

代码语言:javascript
运行
复制
# |       |        |
# | Local | Remote |
# |       |        |

vim -f -d "$LOCAL" "$REMOTE"
ret="$?"
if test "$ret" -eq 0
then
  cp -- "$LOCAL" "$MERGED"
fi

Local将在成功后保存到工作树中,取代Merged

vimdiff2

布局与没有合并基的vimdiff相同。

vimdiff3

LocalRemoteBase (如果存在的话)中的每一个都将被打开但隐藏。Merged将被打开并可见。您可以使用:buffer命令在这些缓冲区之间切换。

代码语言:javascript
运行
复制
# 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):

代码语言:javascript
运行
复制
[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时,您将在输出中看到一个新行:

代码语言:javascript
运行
复制
    user-defined:
        nvimdiff4.cmd nvim -d -c '$wincmd w' -c 'wincmd J' $LOCAL $REMOTE $MERGED

现在您可以运行git mergetool --tool=nvimdiff4,它将调用我们前面指定的命令。

票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68219141

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档