Сравнение каталогов ветвей Git

Один из моих любимых рабочих процессов с svn - использовать функцию сравнения Beyond Compare, чтобы увидеть чистые различия между двумя ветвями или веткой и туловищем. Есть ли способ сделать это в git без необходимости вручную создавать несколько клонов одного и того же репозитория?

Как я задаю этот вопрос, мне приходит в голову, что я могу написать script, который клонирует текущее репо во временный каталог, проверяет нужную ветку, а затем вызывает BCompare.exe с двумя каталогами в качестве аргументов. Просмотр сопоставления папок вызывается с помощью

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

Звучит ли это разумно? Смогу ли я удалить дополнительный клон после того, как я закончил с Beyond Compare?

Ответ 1

Похоже, вы уже поняли правильный ответ - используйте git clone и git checkout, чтобы настроить каталог для сравнения, а затем запустите BCompare.exe. Ниже script может быть хорошей отправной точкой.

#!/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 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

Это (сравнение каталогов вместо файла за файлом) должно быть доступно в ближайшее время:
См. [ANNOUNCE] Git 1.7.11.rc1:

"git difftool" выучил параметр --dir-diff для создания внешних средств сравнения, которые могут сравнивать две иерархии каталогов одновременно после заполнения двух временных каталогов вместо запуска экземпляр внешнего инструмента один раз на пару файлов.

См. " Патч difftool: научить difftool обрабатывать различия в каталогах", из этого fork git:

Когда 'difftool' вызывается для сравнения диапазона коммитов, которые изменяют несколько файлов, он открывает отдельный экземпляр инструмента diff для каждого измененного файла.

Новая опция < --dir-diff 'копирует все измененные файлы во временное местоположение и запускает разницу каталогов в одном экземпляре инструмента diff.

Ответ 3

Просто git diff с именами или хэшами ветвей, которые вы хотите сравнить, просто. Фактически, вы можете сравнить любые два коммита по их хэшам.