Git Version numbering with a centralized workflow

We are using Git with a central server, and our code needs to include a version number in a file. The way this is currently done is like this:

  1. A new developer does a “git clone”
  2. In his local copy, he edits .git/hooks/pre-commit to call version.sh

version.sh (which is included in the project root) takes a version number from “git describe” and stores it in a file.

While this works, I would like to make sure that the version number is updated even if a developer forgot to edit his pre-commit hook.

Since the server has no working copy, simply calling the (pre|post)-receive hooks there does not work, so I am wondering if there is a way to do this.

  • Git Workflow for developing features using multiple branches
  • Git workflow - Reverting a feature branch from release branch
  • Best git workflow for a team of developers and designers
  • Team git flow with testing in mind
  • Git Web Development Workflow: juggling the publishing of urgent fixes and multiple milestones
  • Git workflow for web development
  • Remove already committed git branches
  • What do I do when a pull request is cherry picked?
  • 2 Solutions collect form web for “Git Version numbering with a centralized workflow”

    How about a hooks/update on the central repo that rejects commits without changes to the version file (named VERSION in the example below)?

    #! /bin/bash
    
    refname="$1"
    oldrev="$2"
    newrev="$3"
    
    if [ -z "$refname" -o -z "$oldrev" -o -z "$newrev" ]; then
      echo "Usage: $0 <ref> <oldrev> <newrev>" >&2
      exit 1
    fi
    
    if [ "$refname" != "refs/heads/master" ]; then
      exit 0
    fi
    
    if diff -bq <(git show $oldrev:VERSION) \
                <(git show $newrev:VERSION) >/dev/null
    then
      echo "$0: VERSION unchanged; rejecting update" >&2
      exit 1
    fi
    

    The x264 project automatically generates a version number by counting git commits in the history. It migrated from svn, where versions were actually called r678, for example, but someone cooked up a script to generate numbers from git.

    http://git.videolan.org/?p=x264.git;a=blob;f=version.sh;hb=HEAD

    Git Baby is a git and github fan, let's start git clone.