With one of the most recent projects which clocks in at 6331 lines of code, it becomes difficult to determine whether the production and development versions are running the same version after a number of commits.
The first post I came across, Canonical Version Numbers with Git seemed like a good starting point.
The first thing you need to do is set a tag on your repository:
git tag Prod-1
and we can test to make sure our tag was set:
git describe --tags --long
Now, we create /usr/local/bin/git-revision.sh (as mentioned in one of the comments with a minor change):
#!/bin/bash
revisioncount=`git log --oneline | wc -l`
projectversion=`git describe --tags --long`
cleanversion=${projectversion%%-*}
echo "$projectversion-$revisioncount"
#echo "$cleanversion.$revisioncount"
You can use either the projectversion or the cleanversion depending on the format you prefer.
The projectversion will contain the sha snippet along with the version and looks like: 1.0-1-g8f63877-291.
The cleanversion removes the sha key leaving 1.0-291.
Now that we’ve got a version number that changes on each commit, we can use this somewhere. This version is updated AFTER the last commit, so, you’ll want to import it into your project somewhere, or, in your commit message.
Before you commit, as one of the commenters in the previous post said, execute:
git-getrevision.sh > version
For our footer.mako file, we have the following:
<footer>
${request.user.company} ${request.user.phone} ${request.user.email}
Version: 1.2.3
</footer>
We now create post-commit in $GIT/hooks:
#!/bin/bash
VERSION=`/usr/local/bin/git-revision.sh`
FOOTER='/var/www/path/to/templates/footer.mako'
CONTENTS=`cat $FOOTER`
UP_TO_VERSION="${CONTENTS%%Version:*} Version:"
CLOSE_FOOTER="</footer>${CONTENTS##*</footer>}"
echo "$UP_TO_VERSION $VERSION $CLOSE_FOOTER" > $FOOTER
You can do whatever you need with the post-commit script. I just chose to use bash to rewrite the version number present in the footer of the site. You can just output the version number to a header file that is included if that works with your system.