6

最近我全新安装了 macOS。我已经安装了 Sourctree 和 diffmerge 并将 diffmerge 设置为默认的合并工具。出于某种原因,每次我选择“解决冲突 - > 打开外部合并工具”时,源树都会打开它的等待视图并直接关闭它。

我在 sourcetree 中的设置页面:

在此处输入图像描述

这是我的根 .gitconfig 在 sourcetree 为我配置差异合并时的样子:

[core]
    excludesfile = /Users/[username]/.gitignore_global
[user] 
    name = ---- -----
    email = -----@-----.--
[commit]
    template = /Users/[username]/.stCommitMsg
[credential]
    helper =  !/Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home/jre/bin/java -Ddebug=false -Djava.net.useSystemProxies=true -jar /usr/local/Cellar/git-credential-manager/2.0.4/libexec/git-credential-manager-2.0.4.jar

[difftool "DiffMerge"]
[mergetool "DiffMerge"]
[diff]
    tool = diffmerge
[difftool "diffmerge"]
    cmd = /usr/local/bin/diffmerge \"$LOCAL\" \"$REMOTE\"
[merge]
    tool = diffmerge
[mergetool "diffmerge"]
    trustExitCode = true
    cmd = /usr/local/bin/diffmerge --merge --result=\"$MERGED\" \"$LOCAL\" \"$BASE\" \"$REMOTE\"
[difftool "sourcetree"]
    cmd = /Applications/DiffMerge.app/Contents/MacOS/DiffMerge/Contents/MacOS/DiffMerge --nosplash \"$LOCAL\" \"$REMOTE\"
path = 
[mergetool "sourcetree"]
    cmd = /Applications/DiffMerge.app/Contents/MacOS/DiffMerge/Contents/MacOS/DiffMerge --merge --result=\"$MERGED\" \"$LOCAL\" \"$BASE\" \"$REMOTE\"
    trustExitCode = true
4

3 回答 3

20

当通过 pkg install 而不是安装程序安装 diffmerge 时,这发生在我身上。这显然不会将您的 bash 配置为知道该命令diffmerge,因此您必须设置 diffmerge 的路径(或更新您的 bin 配置)。

为了解决这个问题,我手动配置了 Visual Diff Tool 和 Merge Tool(这样做的好处是您可以在每次启动时禁用烦人的闪屏)。

sourcetree 中的设置页面

在此处输入图像描述

差异

命令:/usr/local/bin/diffmerge 参数--nosplash "$LOCAL" "$REMOTE"

合并

命令:/usr/local/bin/diffmerge 参数--nosplash --merge --result="$MERGED" "$LOCAL" "$BASE" "$REMOTE"

--nosplash 参数是可选的,但可以防止(在我看来没用的)弹出窗口,您必须在开始工作之前关闭它。

Git 配置文件:

[core]
    excludesfile = /Users/[username]/.gitignore_global
[user]
    name = ---------
    email = ---------@------.--
[commit]
    template = /Users/[username]/.stCommitMsg
[credential]
    helper = !/Library/Java/JavaVirtualMachines/jdk1.8.0_131.jdk/Contents/Home/jre/bin/java -Ddebug=false -Djava.net.useSystemProxies=true -jar /usr/local/Cellar/git-credential-manager/2.0.4/libexec/git-credential-manager-2.0.4.jar

[difftool "DiffMerge"]
[mergetool "DiffMerge"]
[diff]
    tool = diffmerge
[difftool "diffmerge"]
    cmd = /usr/local/bin/diffmerge \"$LOCAL\" \"$REMOTE\"
[merge]
    tool = diffmerge
[mergetool "diffmerge"]
    trustExitCode = true
    cmd = /usr/local/bin/diffmerge --merge --result=\"$MERGED\" \"$LOCAL\" \"$BASE\" \"$REMOTE\"
[difftool "sourcetree"]
    cmd = /usr/local/bin/diffmerge --nosplash \"$LOCAL\" \"$REMOTE\"
    path = 
[mergetool "sourcetree"]
    cmd = /usr/local/bin/diffmerge --nosplash --merge --result=\"$MERGED\" \"$LOCAL\" \"$BASE\" \"$REMOTE\"
    trustExitCode = true

有关 diffmerge 命令行参数的更多信息:

差异:https ://sourcegear.com/diffmerge/webhelp/sec__clargs__diff.html

合并:https ://sourcegear.com/diffmerge/webhelp/sec__clargs__merge.html

于 2018-11-11T14:50:15.247 回答
2

我按照 OS X文档页面的 DiffMerge设置中的说明解决了这个问题,该页面是:

首先确认/usr/local/bin/diffmerge存在。如果您使用 PKG 安装程序,则它是在安装 /Applications/DiffMerge.app 时安装的。如果您使用 DMG 文件,请参阅安装Extras的说明。

以下命令将更新您.gitconfig以让 GIT 使用 DiffMerge:

$ git config --global diff.tool diffmerge
$ git config --global difftool.diffmerge.cmd
    "/usr/local/bin/diffmerge \"\$LOCAL\" \"\$REMOTE\""

$ git config --global merge.tool diffmerge
$ git config --global mergetool.diffmerge.trustExitCode true
$ git config --global mergetool.diffmerge.cmd 
    "/usr/local/bin/diffmerge --merge --result=\"\$MERGED\"
        \"\$LOCAL\" \"\$BASE\" \"\$REMOTE\""

然后我可以通过在 Sourcetree 中选择菜单选项来使用 DiffMerge

Sourcetree 首选项窗格,显示 Diff 选项卡,为 Visual Diff Tool 和 Merge Tool 选项选择了 DiffMerge

可选)您可能希望--nosplash在其他参数之前添加这两个命令,以避免闪屏(@saren-inden也建议这样做)。IE;

$ git config --global diff.tool diffmerge
$ git config --global difftool.diffmerge.cmd
    "/usr/local/bin/diffmerge --nosplash \"\$LOCAL\" \"\$REMOTE\""

$ git config --global merge.tool diffmerge
$ git config --global mergetool.diffmerge.trustExitCode true
$ git config --global mergetool.diffmerge.cmd 
    "/usr/local/bin/diffmerge --nosplash --merge --result=\"\$MERGED\"
        \"\$LOCAL\" \"\$BASE\" \"\$REMOTE\""
于 2019-08-13T10:48:49.093 回答
0

我遇到了同样的问题。当我单击External Diff时,也没有启动 DiffMerge 。

问题似乎是.gitconfig文件中 DiffMerge 的路径: cmd = /Applications/DiffMerge.app/Contents/MacOS/DiffMerge/Contents/MacOS/DiffMerge ....

如果您检查 path /Applications/DiffMerge.app/Contents/MacOS/DiffMerge,它实际上不是目录而是文件。似乎SourceTree/Contents/MacOS/DiffMerge在路径上添加了两次。我删除了重复的部分,外部差异开始工作。

没试过合并。

于 2020-11-02T16:28:23.863 回答