Сравнение каталогов веток 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