我发现git mergetool是一个方便的实用程序,用于直观地合并差异,但我正在进行的方式似乎真的很不稳定.基本上,当报告冲突时,我的过程看起来像这样:
执行git mergetool
在提示符下,按Enter键启动我的差异工具(Meld或FileMerge,具体取决于哪台计算机)
解决冲突
保存更改
关闭diff工具
如果我有多个冲突,请冲洗,重复.是的,这是我为合并中的每个冲突打开和关闭我的差异查看器一次.因为它是从命令行启动的,关闭它是我知道告诉git mergetool的唯一方法我已经解决了这个特定的冲突并且它可以继续下一个.
当然有更好的方法,但我不知道.请帮忙吗?这个过程看起来很低效.
乍一看,似乎无法重用外部差异工具会话.
该git-mergetool
文件明确规定:
如果自定义合并工具正确指示合并解析及其退出代码的成功,则
mergetool.
可以将配置变量设置为true..trustExitCode
否则,git-mergetool
将在自定义工具退出后提示用户指示分辨率是否成功.
因此需要退出代码(或者在退出diff工具之后验证用户),这意味着用户首先关闭外部差异工具.
这似乎是减少每次合并/变换一次尝试的冲突次数的一个很好的动机;)(无论使用什么样的VCScs工具)
注意:
另外两个git外部差异工具设置(" 为Windows上的Git设置差异和合并工具 "和" 使用Git设置SourceGear DiffMerge ")在不关闭外部差异工具时没有给予更多希望......
如果您选择的mergetool支持在现有实例中打开文件,则可以在git config中指定命令:
% git config mergetool.whatever_you_want.cmd 'exec /path/to/merge/tool $LOCAL $MERGED $REMOTE' % git config merge.tool whatever_you_want
git mergetool
然后将执行您的自定义命令,然后提示您文件是否已成功合并(代替查看退出代码).
我刚刚为vimdiff攻击的一个例子:
% git config mergetool.persistent.cmd 'gvim --remote-tab-silent "+set buftype=nowrite" "$PWD/$BASE" && sleep 1; gvim --remote-send ":split $PWD/$REMOTE:set buftype=nowrite :vertical diffsplit $PWD/$MERGED :vertical diffsplit $PWD/$LOCAL :set buftype=nowrite l"'
这很好用,我可以自己开始使用它!
mergetool的问题在于它故意使用命令行界面来启动合并会话,然后等待调用的命令返回以确定用户驱动的合并何时完成.
大多数合并工具都没有提供命令行机制来在已经运行的进程中启动合并会话,并提供确定解析何时完成以及是否成功的方法.
可以想象,一些合并工具可以通过单独的包装器命令和某种类型的IPC提供此功能,但它将非常特定于工具并且难以在通用合并工具程序中实现.