Git和DiffTool问题:LOCAL和REMOTE指的是什么?

47

我一直在尝试将tortoisemerge作为Git中的difftool选项,并且我的.gitconfig文件目前显示:

   [diff]
        tool = tortoise

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

    [difftool]
        prompt = false

根据Tortoise合并文档,‘mine’命令会指定在两个文件比较中右侧显示哪个文件。

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

LOCAL设置为包含diff预映像内容的临时文件名,REMOTE设置为包含diff后映像内容的临时文件名。

当我修改文件并输入“git difftool”时,问题就出现了。TortoiseMerge用工作目录文件在左侧,并不是右侧,这让我很困惑。 我知道我可以简单地切换'mine'和'local'命令,但我想知道local/remote指向什么以及解决此问题的最佳方法。

3个回答

181

这个过程包括4个组件(请注意,在此步骤之前,您已经完成了本地检入):

  • 您的 git 树上的本地检入: LOCAL
  • 即将合并的远程仓库的 HEAD: REMOTE
  • BASE,是 LOCAL 和 REMOTE 的共同祖先。
  • 结果将写入的文件: MERGED

3
如果您在主分支上,并执行git merge branch,则LOCAL是主分支的副本,REMOTE是分支的副本(不管仓库如何),对吗? - naught101

11

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

 git difftool master experiment -- Makefile

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

如果你只运行:

git difftool

它展示了索引和工作树之间的差异,因此对于每个有差异的文件,$LOCAL 将是一个临时文件,其内容与索引中的文件版本相同,而 $REMOTE 将是您工作树中文件的版本。


1

我正在使用TortoiseSvn进行合并和差异比较,并且效果符合预期。在进行差异比较时,它会在右侧显示我的工作副本。 我的.gitconfig配置如下:

[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\"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接