46

我一直在努力让 tortoisemerge 作为 Git 中的 difftool 选项工作,我的 .gitconfig 文件当前显示:

   [diff]
        tool = tortoise

    [difftool "tortoise"]
        cmd = tortoisemerge.exe -mine:$LOCAL -base:$REMOTE

    [difftool]
        prompt = false

根据乌龟合并文档,“我的”命令以两种方式说明哪个文件将显示在右侧。

我的问题是,GIT 提供的 LOCAL 和 REMOTE 变量实际上指向什么?该文档有点含糊,说明

LOCAL 设置为包含差异前映像内容的临时文件的名称,而远程设置为包含差异后映像内容的临时文件的名称。

当我修改文件时出现问题,然后输入'git difftool' tortoisemerge 是从左侧的工作目录文件开始的,而不是我假设的右侧。我知道我只能切换“我的”和“本地”命令,但我试图找出本地/远程指向的内容以及解决此问题的最佳方法

4

3 回答 3

182

这有4 个组件(请注意,在此步骤之前,您已经完成了本地签入。)

  • 您的 git 树具有的本地签入:LOCAL
  • 远程仓库的头(即将被合并):REMOTE
  • 本地和远程的共同祖先:BASE
  • 结果将写入的文件:MERGED
于 2011-03-26T06:38:55.733 回答
10

我认为这意味着$LOCAL始终a/whatever在 diff 输出中,而$REMOTEb/whatever. 换句话说,如果你这样做:

 git difftool master experiment -- Makefile

$LOCAL将是一个显示分支状态的Makefile临时文件master,而$REMOTE将是一个显示experiment分支状态的临时文件。

如果你只是运行:

git difftool

...这向您显示了索引和工作树之间的差异,因此对于每个有差异的文件,$LOCAL将是一个与索引中文件版本相同的临时文件,而$REMOTE将是文件的版本在你的工作树中。

于 2011-03-26T06:17:39.407 回答
1

我正在使用 TortoiseSvn 进行合并和差异,并且按预期工作。在 diff 中,它在右侧显示我的工作副本。我的 .gitconfig 与 TortoiseSvn 如下

[diff]
    tool = tortoise


[merge]
    tool = tortoise


[mergetool "tortoise"]
    cmd = TortoiseMerge.exe -base:\"$BASE\" -mine:\"$LOCAL\" -theirs:\"$REMOTE\" -merged:\"$MERGED\"
[difftool "tortoise"]
    cmd = tortoisemerge.exe -mine:\"$REMOTE\" -base:\"$LOCAL\"
于 2013-02-21T06:10:38.117 回答