14

svn での私のお気に入りのワークフローの 1 つは、Beyond Compare のフォルダー比較機能を使用して、2 つのブランチ、またはブランチとトランクの間の正味の違いを確認することです。同じリポジトリの複数のクローンを手動で作成することなく、git でこれを行う方法はありますか?

この質問をすると、現在のリポジトリを一時ディレクトリに複製し、目的のブランチをチェックアウトし、2 つのディレクトリを引数として BCompare.exe を呼び出すスクリプトを作成できることがわかりました。フォルダー比較ビューは、

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

これは合理的に聞こえますか?Beyond Compare を使い終わったら、余分なクローンを削除できますか?

4

4 に答える 4

32

これ (ファイルごとではなくディレクトリを比較する) はまもなく利用可能になるはずです: [アナウンス] Git 1.7.11.rc1
を参照してください:

は、ファイル ペアごとに 1 回外部ツールのインスタンスを実行する代わりに、2 つの一時ディレクトリにデータを入力した後、一度に2 つのディレクトリ階層を比較できる外部差分ツールを生成するオプションをgit difftool学習しました。--dir-diff

このgit のフォークから、 「パッチdifftooldifftool:ディレクトリの差分を処理するように教える」を参照してください。

複数のファイルを変更する一連のコミットを比較するために' difftool' が呼び出されると、変更されたファイルごとに diff ツールの個別のインスタンスが開かれます。

新しい ' --dir-diff' オプションは、変更されたすべてのファイルを一時的な場所にコピーし、差分ツールの 1 つのインスタンスでディレクトリ差分を実行します。

于 2012-06-04T10:26:27.027 に答える
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
于 2010-11-23T23:30:12.380 に答える
0

git diff比較したいブランチの名前またはハッシュだけで、簡単です。実際、ハッシュによって任意の 2 つのコミットを比較できます。

于 2010-11-22T18:27:49.867 に答える