Каталог сравнения веток Git - PullRequest
14 голосов
/ 22 ноября 2010

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

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

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

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

Ответы [ 3 ]

30 голосов
/ 04 июня 2012

Это (сравнение каталогов вместо файла за файлом) должно быть доступно в ближайшее время:
См. [ОБЪЯВЛЕНИЕ] Git 1.7.11.rc1 :

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

См. « Patch difftool: научить difftool обрабатывать директории diff », из этого форка git :

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

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

2 голосов
/ 24 ноября 2010

Похоже, вы уже нашли правильный ответ - используйте git clone и git 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
0 голосов
/ 22 ноября 2010

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

...