-->

TortoiseMerge中可作为与Windows的Git Bash的一个difftool?(Can

2019-09-02 13:45发布

我刚开始使用Git工作。 我想用的TortoiseMerge作为difftool和合并工具。

在我在我的个人用户目录.gtconfig我有以下几个部分。 我已删除针对此问题的用户和彩色部分。

[merge]
    tool = tortoisemerge
[mergetool "tortoisemerge"]
    cmd = \"TortoiseMerge.exe\" -base:\"$BASE\" -mine:\"$LOCAL\" -theirs:\"$REMOTE\" -merged:\"$MERGED\"
[diff]
    tool = tortoisemerge
[difftool "tortoisemerge"]
    cmd = \"TortoiseMerge.exe\" -base:\"$BASE\" -mine:\"$LOCAL\" -theirs:\"$REMOTE\" -merged:\"$MERGED\"

如果我在Git的Bash提示符IT负载类型的TortoiseMerge。 它被称为是路径上。 但是,如果我键入命令我碰到下面的错误。

Rich:mygittest (master *)
$ git difftool
error: 'tortoisemerge' can only be used to resolve merges
merge tool candidates: kompare emerge vimdiff
No known merge resolution program available.
external diff died, stopping at readme.txt.
Rich:mygittest (master *)
$ 

什么我不理解,使这项工作? TortoiseMerge中安装有TortoiseSVN的。

Answer 1:

下面设置的工作对我罚款。 但是,我使用TortoiseGit TortoiseSVN的不是。 请注意在差异参数的差异。

[diff]
  tool = tortoisediff
[difftool]
  prompt = false
[merge]
  tool = tortoisemerge
[mergetool]
  prompt = false
  keepBackup = false
[difftool "tortoisediff"]
  cmd = \""c:/Program Files/TortoiseGIT/bin/TortoiseGitMerge.exe"\" -mine "$REMOTE" -base "$LOCAL"
[mergetool "tortoisemerge"]
  cmd = \""c:/Program Files/TortoiseGIT/bin/TortoiseGitMerge.exe"\" -base "$BASE" -theirs "$REMOTE" -mine "$LOCAL" -merged "$MERGED"


Answer 2:

因此,与空格的文件名正确处理,你应该@墨尔本的回答的最后一行更改为

cmd = \""c:/Program Files/TortoiseGIT/bin/TortoiseGitMerge.exe"\" -base "$BASE" -theirs "$REMOTE" -mine "$LOCAL" -merged "$MERGED"


Answer 3:

大答案由克拉斯Mellbourn! 救了我洛塔时间。 一个缺点是,新AddedRemoved存储库中的文件difftool命令执行过程中不会出现。 没有什么可以比较他们! 这就是我所做的在此之上:(由我的同事的启发答案 )。

  1. 创建一个文件名为empty.empty$Home目录(执行start ~在你的bash)。 而顾名思义,保持空。
  2. 创建名为另一个文件tortoisediff.sh$Home/bin目录与以下内容

#!/bin/sh
# $LOCAL $REMOTE seem to be swapped
# $1 is $LOCAL
# $2 is $REMOTE

difftool='/c/Program Files/TortoiseGit/bin/TortoiseGitMerge.exe'
NULL="/dev/null"
empty="C:/home/empty.empty"

if [ "$1" == "$NULL" ]; then
    echo "Added: " "$2"
    "$difftool" /base:"$empty" /mine:"$2" /readonly:"$empty"
elif [ "$2" == "$NULL" ]; then
    echo 'Removed: ' "$1"
    "$difftool" /base:"$1" /readonly:"$1" /mine:"$empty"
else
    echo 'Modified' "$2"
    "$difftool" /base:"$1" /basename:"$1" /readonly:"$1" /mine:"$2" /minename:"$2"
fi

# Checkout https://tortoisegit.org/docs/tortoisegitmerge/tme-automation.html for more
  1. 修改你的.gitconfig文件(答案的11号线)

    cmd = tortoisediff.sh "$LOCAL" "$REMOTE"

现在,这将使difftool参考而不是直接tortoisediff.sh打开应用程序的。

  1. 请记住:你必须运行git add . 随后git difftool --staged ,而不是简单git difftool


Answer 4:

[diff]
  tool = tortoisediff
[difftool]
  prompt = false
[merge]
  tool = tortoisemerge
[mergetool]
  prompt = false
  keepBackup = false
[difftool "tortoisediff"]
  cmd = \""C:/Users/$USER/Desktop/TortoiseMerge.exe"\" -base:\"$BASE\" -mine:\"$LOCAL\" -theirs:\"$REMOTE\" -merged:\"$MERGED\"
[mergetool "tortoisemerge"]
  cmd = \""C:/Users/$USER/Desktop/TortoiseMerge.exe"\" -base:\"$BASE\" -mine:\"$LOCAL\" -theirs:\"$REMOTE\" -merged:\"$MERGED\"

这个工作对我来说,使用TortoiseMerge 1.6.7(便携式)



Answer 5:

重订的时候,我强烈建议开关$theirs$mine ,因为它是不同的,当你合并和变基合并。 点击这里:

什么是git的“我们”和“他们”的确切含义是什么?

所以,如果你只使用合并工具来衍合像我一样,这样做:

[mergetool "tortoisemerge"]
cmd = \""c:/Program Files/TortoiseGIT/bin/TortoiseGitMerge.exe"\" -base "$BASE" -theirs "$LOCAL" -mine "$REMOTE" -merged "$MERGED"


文章来源: Can TortoiseMerge be used as a difftool with Windows Git Bash?