git预提交代码修改在提交之后应用

时间:2012-11-14 08:35:42

标签: git sh githooks pre-commit

我写了一个预提交钩子来增加源代码中的版本号。为什么在提交后应用了更改?在提交之前我该怎么做?

#!/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

我知道不推荐这种自动更改。但从技术上讲,这应该是可能的。我在Ubuntu 9.10上使用git 1.6.3.3。

1 个答案:

答案 0 :(得分:1)

您的预提交脚本会修改文件的工作树副本,但不会修改索引中的版本。后者是实际承诺的。

修改后,您需要git add该文件。但是,这样做意味着即使您尝试从工作树中提交一些更改,对该文件的所有更改都将包含在每个提交中。