Las modificaciones del código precompilation de git se aplican después de la confirmación en su lugar antes

Escribí un gancho precompromiso para incrementar el número de versión en la fuente. ¿Por qué se aplican los cambios después de la confirmación? ¿Qué puedo hacer para hacer eso antes de la confirmación?

#!/bin/sh # Hook to increment version number before checkin REPO_DIR=$(cd `dirname $0`/../.. && pwd) VERS_FILE="${REPO_DIR}/version.php" CUR_DATE=`date -u '+%Y-%m-%d %H:%M:%S'` HOOK=`basename $0` if [ -w ${VERS_FILE} ]; then # increment last digit of version string perl -i -pe 's/(\$version\s?=\s?['\''|"][\d\.]+)(\d+)/"$1".($2+1)/e' "${VERS_FILE}" RV=$? if [ 0 -ne ${RV} ]; then echo "ERROR: Updating version in ${VERS_FILE} failed" exit $RV fi echo "INFO: Increment version in file ${VERS_FILE}" fi echo "Finish $HOOK at $CUR_DATE" exit 0 

Soy consciente de que tales cambios automáticos no son recomendables. Pero técnicamente esto debería ser posible de todos modos. Estoy usando git 1.6.3.3 en Ubuntu 9.10.

Su script precompromiso modifica la copy de tree de trabajo del file, pero no la versión en el índice. El último es lo que realmente se compromete.

Necesita git add el file después de modificarlo. Pero hacer esto significará que todos los cambios a ese file se includeán en cada confirmación, incluso si intentas realizar solo algunos cambios desde el tree de trabajo.