【问题标题】:How to configure kdiff3 instead of emerge as a git mergetool?如何配置 kdiff3 而不是作为 git mergetool 出现?
【发布时间】:2012-04-04 07:23:41
【问题描述】:

我在 mac OSX Snow Leopard 上有 Git,我尝试编辑我的合并和差异工具以使用 kdiff3 而不是emerge。

但是当我尝试使用它时,它不会启动 kdiff 的 GUI,而是让我使用基于 cmd 的界面。

我在 gitconfig 中的设置是:

[merge]
     tool = kdiff3
[mergetool "kdiff3"]
    cmd = /Applications/kdiff3.app/Contents/MacOS/kdiff3
    args = $base $local $other -o $output
    trustExitCode = false
[diff]
tool = kdiff3
[difftool "kdiff3"]
cmd = /Applications/kdiff3.app/Contents/MacOS/kdiff3
args = $base $local $other -o $output
trustExitCode = false

显然缺少一些东西,但我做错了什么?

【问题讨论】:

  • 这将有助于发布您用于差异的命令
  • 确定我做了 git difftool -t kdiff3 和 git mergetool -t kdiff3
  • 刚刚安装了带有 brew 和 mine 的 kdiff3,没有定义 [mergetool][difftool]。只是tool = kdiff3。你试过了吗?

标签: macos git merge config kdiff3


【解决方案1】:

最近的 Git 版本内置了对 kdiff3 的支持,因此无需使用通用的 cmdargs 设置手动配置它。而是这样做:

$ git config --global merge.tool kdiff3

如果 kdiff3 不在您的 PATH 环境中,也可以这样做:

$ git config --global mergetool.kdiff3.path /Applications/kdiff3.app/Contents/MacOS/kdiff3

这使得git mergetool 启动kdiff3。请注意,there is no way 将 Git 配置为在发生冲突的手动合并后自动启动您的合并工具。

如果您真的想了解 Git 如何在内部调用 kdiff3,请查看 the built-in mergetool configuration for kdiff3

编辑:对于现在还支持 Mac OS X 的Beyond Compare 4,只需将kdiff3bc3(是的,“3”)交换并调整以上行中的路径。从 Git 2.2.0 开始,您将能够使用 bc 作为 bc3 的别名,这样您就不必关心版本号。

【讨论】:

  • 我仍然需要安装 kdiff3。如果你有自制软件,就像brew install kdiff3 一样简单。这应该足以将 kdiff3 放入路径中。
  • git config --global diff.tool kdiff3
  • @mikelong 如果未配置diff.tool,则回退到merge.tool,因此只需配置后者即可。
  • @sschuberth 我在使用 Meld for mac 时遇到了同样的问题,您的解决方案是否也适用于此?似乎根据 Meld for Mac 指令编辑 gitignore 并不能解决问题
  • @SabaAhang 我的说明适用于 Git 直接支持的任何差异/合并工具,包括 meld。支持的工具列表可以从source code查看,或者通过运行git mergetool --tool-help查看。
【解决方案2】:

最近的 Git 版本内置了对 kdiff3 的支持

是的,但只有 Git 2.12(2017 年第一季度)允许这些内置工具信任其退出代码。

参见David Aguilar (davvid)commit 2967284commit 7c10605(2016 年 11 月 29 日)。
(由 Junio C Hamano -- gitster -- 合并于 commit c4a44e2,2016 年 12 月 16 日)

mergetool: 荣誉 mergetool.$tool.trustExitCode 内置工具

内置合并工具包含关于是否可以信任工具的退出代码来确定合并成功或失败的硬编码假设。
退出代码不受信任的工具在其merge_cmd() 函数中包含对check_unchanged() 的调用。

这样做的一个问题是,内置工具不支持 trustExitCode 配置。

教内置工具遵守trustExitCode 配置。

(见kdiff3

扩展run_merge_cmd(),以便它负责在工具的退出代码不可信时调用check_unchanged()
从 scriptlet 中删除 check_unchanged() 调用,因为它们不再负责调用它。

【讨论】:

    猜你喜欢
    • 2012-06-08
    • 2014-07-20
    • 2023-04-04
    • 1970-01-01
    • 2013-02-25
    • 2010-12-21
    • 2016-01-23
    • 2014-10-27
    • 1970-01-01
    相关资源
    最近更新 更多