我的.gitconfig
文件中有以下内容:
[user]
name = myname
email = myname@gmail.com
[core]
autocrlf = true
excludesfile = C:\\Users\\myname\\Documents\\gitignore_global.txt
[diff]
tool = meld
[difftool "meld"]
cmd = "C:/Program Files (x86)/Meld/meld/meld.exe"
prompt = false
[merge]
tool = meld
[mergetool "meld"]
cmd = "C:/Program Files (x86)/Meld/meld/meld.exe"
[difftool "sourcetree"]
cmd = "C:/Program Files (x86)/Meld/meld/meld.exe $PWD/$LOCAL $PWD/$BASE $PWD/$REMOTE"
[mergetool "sourcetree"]
cmd = 'C:/Program Files (x86)/Meld/meld/meld.exe' \"$LOCAL\" \"$REMOTE\" \"$MERGED\"
trustExitCode = true
在Sourcetree中,我有以下设置:
然而,当我右键单击Sourcetree上的文件来执行外部差异时,我能够打开Meld,但文件的内容根本没有显示。
我在设置中做错了什么?
答案 0 :(得分:27)
我觉得现有的答案略微错过了这一点。这是我自己的狗粮:
参数详情:
Diff: $LOCAL $REMOTE
Merge: $LOCAL $BASE $REMOTE --auto-merge --output=$MERGED
对于External Diff
,您需要从参数列表中删除$ BASE。
对于3向合并,您需要单击External Merge Tool
选项,该选项仅在存在任何未解决的冲突时才可用。
如果你不仅限于 Sourcetree + Meld ,我认为Git Extensions + KDiff3套件也可以是一个很好的开源替代品。
答案 1 :(得分:20)
这里使用的实际设置是为了实现真正的3向合并,只读了THEIRS和MINE标签是这样的:
$LOCAL $BASE $REMOTE --auto-merge --output=$MERGED
请注意=
之后的--output
。
我终于通过挖掘对这个问题的第二个答案Git merging using Meld的评论来获得这个命令。
答案 2 :(得分:6)
对于 OS X ,它看起来像这样:
Diff命令:meld
。
@LOCAL @REMOTE
合并命令:meld
。
$LOCAL $BASE $REMOTE --auto-merge --output=$MERGED
P.S。
要从命令行使用它,您必须通过 brew 安装它:
brew install meld
答案 3 :(得分:2)
如果您不想修改PATH环境变量,可以使用与DOS兼容的短名称:
C:\Progra~1 = C:\Program Files
C:\Progra~2 = C:\Program Files (x86)
这可以避免路径中引起问题的空间并与Sourcetree一起使用。它是hackish,但它确实有效。然后你可以使用这样的东西作为Meld的路径:
C:\Progra~1\Meld\meld.exe
可能无法保证Progra~1映射到64位目录,因此您可能需要尝试将哪一个映射到哪个。
答案 4 :(得分:1)
尝试将meld.exe的位置添加到PATH(例如C:\ Program Files(x86)\ Meld),然后在 Diff Command 中,只需输入meld而不是完整路径。请参阅要点 How to use meld with Sourcetree on Windows 。