Git分支的目录比较

时间:2010-11-22 18:24:14

标签: git beyondcompare beyondcompare3

我最喜欢的svn工作流程之一是使用Beyond Compare的文件夹比较功能来查看两个分支或分支和主干之间的净差异。有没有办法在git中执行此操作而无需手动创建同一存储库的多个克隆?

当我问这个问题时,我发现我可以编写一个脚本,将当前仓库克隆到临时目录,检出所需的分支,然后使用这两个目录作为参数调用BCompare.exe。使用

调用文件夹比较视图
BCompare.exe path/to/folder1 path/to/folder2

听起来合理吗?在完成Beyond Compare之后,我能否删除额外的克隆?

4 个答案:

答案 0 :(得分:30)

这个(比较目录而不是逐个文件)应该很快就会出现:
[ANNOUNCE] Git 1.7.11.rc1

  

git difftool”学会了“--dir-diff”选项,可以在填充两个临时目录之后生成外部差异工具,这些工具可以一次比较两个目录层次结构 而不是每个文件对运行一次外部工具实例

请参阅此Patch difftool: teach difftool to handle directory diffs

中的“fork of git
  

当调用“difftool”来比较修改多个文件的一系列提交时,它会为每个更改的文件打开一个单独的diff工具实例。

     

新的“--dir-diff”选项将所有已修改的文件复制到临时位置,并在diff工具的单个实例中对它们运行目录diff。

答案 1 :(得分:2)

听起来你已经找到了正确的答案 - 使用git clonegit checkout来设置要比较的目录,然后运行BCompare.exe。以下脚本可能是一个很好的起点。

#!/bin/sh
(                              # execute in a subshell so you can continue
                               #   working in the current shell
    set -o xtrace              # bash setting that echos each command before it's executed
    > /tmp/auto_bcompare_log   # truncate existing log file
    BRANCH="$1"                # get branch argument from command line
    TEMPDIR=`mktemp -d`        # get a temp directory
    CWD=`pwd`                  # remember the current directory
    git clone $CWD $TEMPDIR
    cd $TEMPDIR
    git checkout $BRANCH
    cd $CWD
    BCompare.exe $CWD $TEMPDIR
    rm -rf $TEMPDIR
) >> /tmp/auto_bcompare_log 2>&1 < /dev/null & # background and redirect
                                               # stdout/stderr/stdin

答案 2 :(得分:0)

只需要git diff包含您要比较的分支的名称或哈希值,就这么简单。实际上,你可以通过哈希比较任意两个提交。

答案 3 :(得分:0)

首先确认您具有无可比拟的可访问性,

您可以使用:git difftool --tool-help列出可用的比较工具。 (将其设置为默认值,请参见Git Diff with Beyond Compare

如果您无法比拟的话,可以使用以下其中一项:

git difftool branch1 branch2 file -t bc   // or -d directory instead of file
git difftool hash1   hash2   file -t bc

编辑:在git版本2.25中工作