【问题标题】:How do I make gvimdiff opened by git mergetool open all files at once in tabs?如何让 git mergetool 打开的 gvimdiff 在选项卡中一次打​​开所有文件?
【发布时间】:2016-08-31 21:14:50
【问题描述】:

通常git -c merge.tool=gvimdiff mergetool 以批处理模式打开要合并的文件:

Normal merge conflict for '...':
  {local}: modified file
  {remote}: modified file
4 files to edit
... seems unchanged.
Was the merge successful? [y/n] n
merge of ... failed
Continue merging other unresolved paths (y/n) ? y
Normal merge conflict for '...':
  {local}: modified file
  {remote}: modified file
4 files to edit
modules ... seems unchanged.
Was the merge successful? [y/n] n
merge of modules ... failed
Continue merging other unresolved paths (y/n) ? n

如何使它同时打开所有文件,并使用包含要合并的每个文件的四个窗格排列的选项卡(如gvim -p file1 file2)?

【问题讨论】:

标签: git tabs git-merge vimdiff mergetool


【解决方案1】:

git mergetool 流程旨在一次解决一个文件中的冲突。因此,您所要求的不能以干净的方式完成。但是,可以创建一个自定义合并工具,它将来自git mergetool 的输入累积在单个gvim 窗口中。这个“解决方案”不可避免地必须包含的 hack 是它必须使git mergetool 流相信自定义合并工具已成功合并文件,即使它只是在 gvim 中打开了文件。这是必要的,以便git mergetool 流程继续到下一个文件而不询问任何问题。因此,如果你退出 gvim 而不做任何更改,git 仍然会认为所有冲突都已解决。

这种自定义合并工具的草稿版本(在不同的 gvim 窗口中打开文件,而不是在选项卡中打开文件)如下:

.gitconfig

[mergetool "mygvimdiff"]
    cmd=/path/to/mygvimdiff "$MERGED" "$LOCAL" "$BASE" "$REMOTE"
    trustExitCode=true

mygvimdiff

#!/bin/bash

gvim -d -c "wincmd J" "$@"

# wait till gvim loads the temporary files before
# the git mergetool script deletes them
sleep 1

exit 0

用法

git mergetool -t mygvimdiff

【讨论】:

  • 也许更好地伪造不成功的合并?就我的实验而言,mergetool 仍然要求下一个文件。
  • @Vi。然后必须有人回答 mergetool 的确认才能继续
猜你喜欢
  • 1970-01-01
  • 2016-10-12
  • 2012-05-02
  • 2021-05-31
  • 2017-09-28
  • 1970-01-01
  • 2013-11-18
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多