外部差异与合并工具
Gitcito 的差异查看器和三栏解决器应付得了大多数日子。有些日子它们应付不来:一个 4000 行的生成文件、一次需要同时看四栏的合并,或者干脆就是那个你用了十年、读起来比任何新工具都快的老伙计。
设置 → 通用 → 外部差异与合并工具。
这是 git 的清单,不是我们的
Gitcito 自己不维护任何表格。下拉框里的内容就是 git difftool --tool-help 和 git mergetool --tool-help,所以:
git 在你机器上已经找到的工具排在前面;它认识但找不到的排在后面,标着未安装。
自定义工具不需要任何额外支持就能用。 如果你有
git config --global difftool.mine.cmd 'mycompare "$LOCAL" "$REMOTE"'那么
mine就会像任何内置工具一样出现在下拉框里。你的选择会被写进全局 git 配置里的
diff.tool和merge.tool——也就是你的终端读的那两个键。在这里设好,命令行上的git difftool就是同样的行为。在那边设好,Gitcito 也会照单接收。
git 开箱就认识大约三十种工具,包括 Kaleidoscope、Beyond Compare、Meld、KDiff3、P4Merge、Araxis、DiffMerge、WinMerge、FileMerge、VS Code 以及 vim 一家。
这些动作出现在哪里
| 界面 | 动作 |
|---|---|
| 提交编辑器里一个被改动的文件 | 在 <工具> 中查看差异——工作区对索引 |
| 冲突解决器 | 在 <工具> 中合并——完整的三方合并 |
这两个入口只在确实配置了工具时才出现;一个没配置的 git difftool 只会报错,而一个按下去没反应的按钮比没有按钮更糟。
工具开着的时候会发生什么
Gitcito 会等它关闭。这是有意为之——git mergetool 只在工具退出之后才暂存那个已解决的文件,这样才有一个真实的结果可以汇报——这也是为什么按钮会转圈,而不是立刻返回。
app 的其余部分保持响应:这些操作跑在那把「把普通 git 操作串行化」的每仓库锁之外,所以一个开着去吃午饭的合并工具,不会把它背后的标签页冻住。
外部合并成功之后,git 会自己暂存那个文件,Gitcito 则关掉解决器并刷新。如果你没保存就关掉了工具,git 会照实说,什么也不会变。
.orig 文件
git mergetool 默认会在已解决的文件旁边留下一个 <file>.orig 备份——这是 git 的行为,不是 Gitcito 的。设置里的开关写的是 mergetool.keepBackup;把它关掉,一个已解决的文件就什么都不会留下。