Сравнение каталогов ветвей 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
с именами или хэшами ветвей, которые вы хотите сравнить, просто. Фактически, вы можете сравнить любые два коммита по их хэшам.