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

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

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

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

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

3 ответа

Решение

Похоже, вы уже нашли правильный ответ - используйте 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

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

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

Смотрите " Патч difftool : учат difftool для обработки директорий diff ", из этой ветки git:

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

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

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

Сначала убедитесь, что у вас есть вне всякого сравнения,

вы можете использовать: git difftool --tool-helpчтобы перечислить доступные инструменты сравнения. (чтобы установить его по умолчанию, см. Git Diff с 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

Другие вопросы по тегам