2010-11-22 6 views
12

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

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

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

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

+0

«Могу ли я удалить лишний клон ...?» почему бы и нет? – Cascabel 2010-11-22 19:03:12

+0

Ну, в идеале, я хотел бы начать за пределами сравнения в фоновом режиме, чтобы я мог продолжать использовать git в том же терминале для просмотра журнала и т. Д. С этим я не уверен, что бы обнаружить, что я закрывается за пределами сравнения и безопасно удалять временный клон. – 2010-11-22 19:20:21

ответ

2

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

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

+0

И если мне не нравится принудительная линейность встроенных сравнений git diff и произвольного упорядочения файлов, то я SOL? Я знаю, что могу также «git difftool b1 b2», но это не дает мне представление о сравнении папки. – 2010-11-22 18:43:21

+0

Хм, извините, у меня не возникло твоего вопроса, я думал, вы просто пытались сравнить два коммита. Вы используете overcompare как инструмент diff, который я предполагаю, правильно? К сожалению, я не знаком с этим. – ustun 2010-11-22 18:50:34

27

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

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

См «Patch difftool: teach difftool to handle directory diffs», от этого fork of git:

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

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

Смежные вопросы