14

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

当我问这个问题时,我突然想到我可以编写一个脚本,将当前 repo 克隆到一个临时目录,签出所需的分支,然后使用两个目录作为参数调用 BCompare.exe。文件夹比较视图被调用

BCompare.exe path/to/folder1 path/to/folder2

这听起来合理吗?完成 Beyond Compare 后,是否可以删除多余的克隆?

4

4 回答 4

32

这(比较目录而不是逐个文件)应该很快可用:
请参阅[ANNOUNCE] Git 1.7.11.rc1

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

请参阅“补丁difftool:教difftool处理目录差异”,来自 git 的这个分支

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

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

于 2012-06-04T10:26:27.027 回答
2

听起来您已经找到了正确的答案——使用git cloneandgit 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
于 2010-11-23T23:30:12.380 回答
0

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

于 2010-11-22T18:27:49.867 回答
0

首先验证您是否可以访问,

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

如果您无法比较,则可以使用其中之一:

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

编辑:适用于 git 版本 2.25

于 2020-09-09T12:45:28.573 回答