2009-05-27 91 views
59

我在branchB中的branchA和FileB中有FileA。无法在Git中的两个独立分支中区分文件

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

如何通过meld/FileMerge比较两个文件


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

骂死:您可以使用opendiff to allow FileMerge拥有从标准输入文件。所以接下来的问题是如何让git的diff工具使用opendiff。


第二发达的问题:使Git的比较工具使用了opendiff在Mac

+1

的问题不在于Git是不使用opendiff,这是自述文件不存在于主。 – 2009-05-27 20:41:41

回答

66

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

然后,当然,你将能够使用你的图形化工具(了opendiff/FileMerge),就像使用普通的“git的差异”,例如

prompt> git difftool somebranch:UNREADME otherbranch:README 
37

如果您目前正在签出branchA,例如,你可以使用命令:

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

然后,您可以编辑差异,如果您想要一部分更改,或保持原样,并将012差异作为补丁。至于这样做的图形用户界面工具,希望其他人会在那里提出建议。

61

git支持分支名称作为存储库路径的一部分。例如,如果你在你的库中的下列文件,READMEmaster,并UNREADME只有branch

master:README 

branch:UNREADME 

您可以通过git的差异他们:

git diff branch:UNREADME master:README 

你可以得到一个仓库神器以标准输出与git show

git show branch1:UNREADME 

因此,如果您的外部diff工具可以tak

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

<(...) bash的语法如下封闭命令的输出,运行它在管道,并将管道的文件路径:e 2个的文件在bash提示符,你可以用一些类似的diff,他们命令行。

+0

你如何做到这一点与外部文件差异合并? - 我在Mac打开运行失败 - 文件合并Heee/master:.profile master:.profile – 2009-05-27 18:09:25

+1

FileMerge.app不接受来自stdin的输入。你可能对谷歌产生的这个脚本有好运:http://kerneltrap.org/mailarchive/git/2007/11/21/435536 – 2009-05-27 18:14:14

2

the docs,就需要类似于下面的东西在你的.git/config文件:

# Our diff algorithm 
[diff] 
    external = opendiff