¿Cómo puedo registrar un script Bash si mi repositorio Git local tiene cambios?

Resuelto kmindi asked hace 13 años • 17 respuestas

Hay algunos scripts que no funcionan correctamente si verifican cambios.

Lo intenté así:

VN=$(git describe --abbrev=7 HEAD 2>/dev/null)

git update-index -q --refresh
CHANGED=$(git diff-index --name-only HEAD --)
if [ ! -z $CHANGED ];
    then VN="$VN-mod"
fi

¿Existe algún tipo de verificación booleana si ha habido cambios desde la última confirmación o cómo puedo probar realmente si hay nuevos cambios en mi repositorio local?

Estoy haciendo todo esto para un script de creación de versiones (que encontré en algún lugar aquí).

kmindi avatar Feb 28 '11 22:02 kmindi
Aceptado

Usando git status:

cd /git/directory
if [[ `git status --porcelain` ]]; then
  # Changes
else
  # No changes
fi
ryanmoon avatar Aug 05 '2014 23:08 ryanmoon

Lo que estás haciendo casi funcionará: debes citar $CHANGEDen caso de que esté vacío y -zprobar si está vacío, lo que significa que no hay cambios. Lo que quisiste decir fue:

if [ -n "$CHANGED" ]; then
    VN="$VN-mod"
fi

Una cita de Git GIT-VERSION-GEN:

git update-index -q --refresh
test -z "$(git diff-index --name-only HEAD --)" ||
VN="$VN-dirty"

Parece que estabas copiando eso, pero olvidaste ese detalle de citar.

Por supuesto, también puedes hacer esto:

if git diff-index --quiet HEAD --; then
    # No changes
else
    # Changes
fi

O si solo te importa el caso "algo ha cambiado":

if ! git diff-index --quiet HEAD --; then
    VN="$VN-mod"
fi

El uso --quiettiene la ventaja de que Git puede detener el procesamiento tan pronto como encuentre una única diferencia, por lo que es posible que no tenga que comprobar todo el árbol de trabajo.

Cascabel avatar Feb 28 '2011 15:02 Cascabel