¿Cómo puedo registrar un script Bash si mi repositorio Git local tiene cambios?
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í).
Usando git status
:
cd /git/directory
if [[ `git status --porcelain` ]]; then
# Changes
else
# No changes
fi
Lo que estás haciendo casi funcionará: debes citar $CHANGED
en caso de que esté vacío y -z
probar 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 --quiet
tiene 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.