Я, вероятно, о том, где был OP, когда это началось, в поисках чего-то простого, что позволило бы мне использовать git difftool с vimdiff для просмотра изменений в файлах в моем репо, начиная с определенного коммита. Я не был слишком доволен ответами, которые нашел, поэтому я собрал этот скрипт git inc remental rep orter (gitincrep), и он мне пригодился:
#!/usr/bin/env bash
STARTWITH="${1:-}"
shift 1
DFILES=( "$@" )
RunDiff()
{
GIT1=$1
GIT2=$2
shift 2
if [ "$(git diff $GIT1 $GIT2 "$@")" ]
then
git log ${GIT1}..${GIT2}
git difftool --tool=vimdiff $GIT1 $GIT2 "$@"
fi
}
OLDVERS=""
RUNDIFF=""
for NEWVERS in $(git log --format=format:%h --reverse)
do
if [ "$RUNDIFF" ]
then
RunDiff $OLDVERS $NEWVERS "${DFILES[@]}"
elif [ "$OLDVERS" ]
then
if [ "$NEWVERS" = "${STARTWITH:=${NEWVERS}}" ]
then
RUNDIFF=true
RunDiff $OLDVERS $NEWVERS "${DFILES[@]}"
fi
fi
OLDVERS=$NEWVERS
done
Вызывается без аргументов, это начнется с начала истории репо, в противном случае оно начнется с любого сокращенного хэша коммита, который вы предоставите, и перейдет к настоящему моменту - вы можете в любое время выйти из ctrl-C. Любые аргументы после первого будут ограничивать отчеты о различиях только теми файлами, которые перечислены среди этих аргументов (что, как мне кажется, и было желательным для ОП, и я бы порекомендовал для всех проектов, кроме небольших). Если вы проверяете изменения в определенных файлах и хотите начать с самого начала, вам нужно предоставить пустую строку для arg1. Если вы не являетесь пользователем vim, вы можете заменить vimdiff своим любимым инструментом diff.
Поведение состоит в том, чтобы выводить комментарии коммитов при обнаружении соответствующих изменений и начинать предлагать запуск vimdiff для каждого измененного файла (это поведение git difftool , но оно работает здесь).
Этот подход, вероятно, довольно наивный, но, просматривая множество решений здесь и в соответствующей статье, многие из них включали установку новых инструментов в систему, к которой у меня нет доступа администратора, с интерфейсами, которые имели собственную кривую обучения. Вышеупомянутый скрипт сделал то, что я хотел, не имея дело с этим. Я рассмотрю множество отличных предложений, когда мне нужно что-то более сложное, но я думаю, что это напрямую зависит от ОП.