无法在Git中的两个单独分支中区分文件

时间:2009-05-27 16:47:30

标签: git unix merge diff

我在branchA中有FileA,在branchB中有FileB。

问题是我一次只能访问一个文件。 我希望能够通过FileMerge或meld来比较这些文件,因为它们是我为Mac找到的唯一的diffTools。

如何通过meld / FileMerge区分两个文件


[已解决]:第一个问题: FileMerge不允许标准输入

  

Masi:您可以使用opendiff to allow FileMerge来获取标准输入的文件。所以接下来的问题是找到如何使用git的diff工具来使用opendiff。


第二个开发问题:使Git的diff工具在Mac中使用opendiff

4 个答案:

答案 0 :(得分:66)

您可以使用“git mergetool”进行合并,并使用现代git(意味着版本1.6.3及更高版本)“git difftool”进行比较,使用图形工具。当然你必须首先配置它们,但它们会做一些自动检测(当然还有一些硬编码的首选项),如果我没记错的话,内置了opendiff支持。

然后当然你可以像使用普通的“git diff”一样使用你的图形工具(opendiff / FileMerge),例如

prompt> git difftool somebranch:UNREADME otherbranch:README

答案 1 :(得分:61)

git支持分支名称作为存储库路径的一部分。例如,如果您的存储库中包含以下文件,README仅在master上,而UNREADME仅在branch上:

master:README

branch:UNREADME

您可以通过git与它们区分:

git diff branch:UNREADME master:README

您可以使用git show

获取标准输出的存储库工件
git show branch1:UNREADME

因此,如果外部差异实用程序可以在bash提示符下获取2个文件,则可以使用以下内容对它们进行区分:

diff-command <(git show branch1:UNREADME) <(git show master:README)

<(...) bash语法获取所附命令的输出,在管道中运行它并将管道的文件路径放在命令行上。

答案 2 :(得分:37)

例如,如果您当前结帐到branchA,则可以使用以下命令:

git diff branchB path/to/common/file/between/branches.txt

如果您想要更改的子集,则可以编辑差异,或保留原样,并将差异git apply作为补丁。对于这样做的GUI工具,希望其他人会在那里有建议。

答案 3 :(得分:1)

the docs开始,您需要在.git / config文件中使用类似于以下内容的内容:

# Our diff algorithm
[diff]
    external = opendiff