如何通过git mergetool打开gvimdiff,在标签中一次打开所有文件?

时间:2016-08-31 21:14:50

标签: git tabs git-merge vimdiff mergetool

通常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)中的所有文件打开一个文件?

1 个答案:

答案 0 :(得分:0)

git mergetool流程旨在一次解决一个文件中的冲突。因此,你要求的东西不能以干净的方式完成。但是,可以创建自定义合并工具,这将在git mergetool窗口中累积来自gvim的输入。这个"解决方案"不可避免地必须包含的是它必须使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