Probablemente esté sobre dónde estaba el OP cuando esto comenzó, buscando algo simple que me permitiera usar git difftool con vimdiff para revisar los cambios en los archivos en mi repositorio a partir de una confirmación específica. No estaba muy contento con las respuestas que estaba encontrando, así que elaboré este script de git inc remental rep orter (gitincrep) y me ha sido útil:
#!/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
Llamado sin argumentos, esto comenzará desde el comienzo del historial de repositorios, de lo contrario comenzará con cualquier hash abreviado de confirmación que proporcione y proceda al presente: puede presionar Ctrl-C en cualquier momento para salir. Cualquier argumento después del primero limitará los informes de diferencias para incluir solo los archivos enumerados entre esos argumentos (lo que creo que es lo que quería el OP, y lo recomendaría para todos menos los proyectos pequeños). Si está verificando cambios en archivos específicos y desea comenzar desde el principio, deberá proporcionar una cadena vacía para arg1. Si no eres un usuario de vim, puedes reemplazar vimdiff con tu herramienta de diferencias favorita.
El comportamiento es generar los comentarios de confirmación cuando se encuentran cambios relevantes y comenzar a ofrecer ejecuciones de vimdiff para cada archivo modificado (ese es el comportamiento de git difftool , pero funciona aquí).
Este enfoque es probablemente bastante ingenuo, pero al examinar muchas de las soluciones aquí y en una publicación relacionada, muchas implicaron instalar nuevas herramientas en un sistema donde no tengo acceso de administrador, con interfaces que tenían su propia curva de aprendizaje. El script anterior hizo lo que quería sin tener que lidiar con nada de eso. Examinaré las muchas sugerencias excelentes aquí cuando necesite algo más sofisticado, pero creo que esto responde directamente al OP.