如何让 DiffMerge 配置为在 Windows 7 或 Windows 2012 上使用 Git



所以我看到了一些关于让 DiffMerge 成为 git mergetooldifftool的问题。 从本质上讲,它归结为在您的PATH中包含DiffMerge(sgdm.exe)以及如下所示的.gitconfig

[diff]
    tool = DiffMerge
[difftool "DiffMerge"]
    cmd = 'C:/Program Files/SourceGear/Common/DiffMerge/sgdm.exe' "$LOCAL" "$REMOTE"
[merge]
    tool = DiffMerge
[mergetool "DiffMerge"]
    cmd = 'C:/Program Files/SourceGear/Common/DiffMerge/sgdm.exe' -merge -result="$MERGED" "$LOCAL" "$BASE" "$REMOTE"
    trustExitCode = true
    keepBackup = false

当我跑git difftool file1 file2时,什么也没发生。 没有错误代码,没有启动 DiffMerge。 从Git Bash和Windows命令行,我可以运行sgdm file1 file2并启动DiffMerge。

我已经修改了.gitconfig中的cmd,使其没有路径或扩展名(例如 sgdm仅),但仍然无济于事。

有人遇到过这种情况吗? 我错过了一些明显的东西吗? 我觉得我错过了一些明显的东西。

我使用 SourceGear DiffMerge 的.gitconfig是:

[mergetool "diffmerge"]
cmd = "C:\program files\sourcegear\common\diffmerge\sgdm.exe" --merge --result=$MERGED $LOCAL $BASE $REMOTE

(显然,如果您更喜欢另一侧的$LOCAL$REMOTE

以下对我有用-

git config --global diff.tool diffmergegit config --global difftool.diffmerge.cmd 'C:/Program\ Files/SourceGear/Common/DiffMerge/sgdm.exe "$LOCAL" "$REMOTE"'git config --global merge.tool diffmergegit config --global mergetool.diffmerge.trustExitCode truegit config --global mergetool.diffmerge.cmd 'C:/Program\ Files/SourceGear/Common/DiffMerge/sgdm.exe -merge -result
="$MERGED" "$LOCAL" "$BASE" "$REMOTE"'

这对我来说已经工作了很长一段时间。 (Windows 7,最新版本的 Git。

确保 sgdm.exe 位于环境路径中。

[diff]
    tool = sgdm
[difftool "diffmerge"]
    cmd = sgdm $LOCAL $REMOTE
[merge]
    tool = sgdm
[mergetool "diffmerge"]
    cmd = sgdm --merge --result=$MERGED $LOCAL $BASE $REMOTE
    trustexitcode = false
[difftool "sgdm"]
    cmd = sgdm $LOCAL $REMOTE
[mergetool "sgdm"]
    trustexitcode = false
    cmd = sgdm --merge --result=$MERGED $LOCAL $MERGED $REMOTE --title1=Mine --title2='Merged: $MERGED' --title3=Theirs

这对我有用:

C:> git config --global diff.tool diffmerge
C:> git config --global difftool.diffmerge.cmd
    "C:/Program Files/SourceGear/Common/DiffMerge/sgdm.exe
        "$LOCAL" "$REMOTE""
C:> git config --global merge.tool diffmerge
C:> git config --global mergetool.diffmerge.trustExitCode true
C:> git config --global mergetool.diffmerge.cmd 
    "C:/Program Files/SourceGear/Common/DiffMerge/sgdm.exe
        /merge /result="$MERGED" "$LOCAL" "$BASE" "$REMOTE""

此配置适用于 Git 1.7.9 和 Windows 7 64 位。我的出发点是Pro Git图书 http://git-scm.com/book/en/Customizing-Git-Git-Configuration。Windows vs Mac 的更改是 a) 用于差异,只需将/替换为 \\ 并在包含空格的路径周围加上引号 b) 用于合并参数与您的参数相同,但带有引号。因此:

.gitconfig

[merge]
     tool = extMerge
[mergetool "extMerge"]
    cmd = extMerge "$BASE" "$LOCAL" "$REMOTE" "$MERGED"
    trustExitCode = false
[diff]
    external = extDiff

路径上的两个脚本文件

extMerge

#!/bin/sh
"C:\Program Files\SourceGear\Common\DiffMerge\sgdm.exe" "-merge" "-result=$4" "$2" "$1" "$3"

分差

#!/bin/sh
[ $# -eq 7 ] && "C:\Program Files\SourceGear\Common\DiffMerge\sgdm.exe" "$2" "$5"

这个人为我做了这件事,而另一个人都没有这样做:

[core]
    autocrlf = false
[user]
    email = XYZ
    name = ABC
[merge]
    tool = diffmerge
[mergetool "diffmerge"]
    trustExitCode = true
    cmd = C:/Program\ Files/SourceGear/Common/DiffMerge/sgdm.exe --merge --result=$MERGED $LOCAL $BASE $REMOTE
[mergetool]
    keepBackup = false
[difftool "diffmerge"]
    cmd = C:/Program\ Files/SourceGear/Common/DiffMerge/sgdm.exe "$LOCAL" "$REMOTE"
[diff]
    tool = diffmerge
[push]
    default = matching

相关内容

  • 没有找到相关文章

最新更新