在推送前提交以更新版本

时间:2016-03-26 07:35:36

标签: git githooks

我正在使用pre-push挂钩复制一些文件并使用grunt bump来升级我的包上的版本号,然后再压缩它。这一切都发生在master分支上,并且假设因为它是master的推动,它值得补丁版本增加并拉上我的Chrome扩展程序以包含所有必需的文件。

我遇到的问题是修改版本的时间太晚,以至于没有为钩子提交它以将其包含在推送中,因此我的下一次提交总是在实际标记后面的1个补丁版本。

我在这里有什么解决方案?这是一个单用户项目,所以我不太担心违背钩子的使用方式。一个选项是提交和子推送,然后从此挂钩返回非零以防止推送发生?

#!/bin/sh
PATH=$PATH:/usr/local/bin:/usr/local/sbin

BRANCH="$1"
EXTENSION_PATH=./extension
SCRIPT_PATH=$EXTENSION_PATH/script/


if [ "$branch" == "master" ]
then

    # remove the existing script folder; we'll just re-populate it
    echo "Removing existing scripts..."
    rm -rf $EXTENSION_PATH/script

    echo "Making target directory: $SCRIPT_PATH"
    mkdir $SCRIPT_PATH

    echo "Copying script files..."
    cp config.js $SCRIPT_PATH
    cp supportportal.js $SCRIPT_PATH
    cp -r ./scripts/ $SCRIPT_PATH/scripts/

    # bump the version
    grunt bump

    # commit changes and push here
    # >>>

    # if on a tag, append that to the filename
    VERSION=$(git describe --tags --always)

    # get name of the most top folder of git repo directory,
    # combine with revision tail
    OUTPUT=extension-$VERSION.zip

    # building archive
    zip -r -X $OUTPUT $EXTENSION_PATH 

    echo "Done!";
fi

exit 0 #exit 1 instead of 0 to cancel original push?

1 个答案:

答案 0 :(得分:0)

使用内容过滤器驱动程序,特别是' clean'而不是像pre-pushpre-commit那样使用client-side hook。一,在git commit上自动运行。

我提议在" Why is the index not updated after doing a git add in a pre-commit hook?" ...但是这不会捕获最后一次提交(在git describe中),...因为上次提交正在构建

相反,与this answer中一样,可以使用post-commit挂钩(如果它在右侧分支中运行)检测版本更改并添加/更新版本文件。