When developing software using several different libraries etc it is always good to know which version of which library is used in a certain installation etc. Though there is no really easy way in Git to solve this as in CVS for instance with its keywords.
Though the following trick creates a nice way of keeping track.
The concept is to utilise GIT Hooks and that we write a script that generates a file with the versioning information in it and then our build system integrates this with the code. The following example is made using C but should be easy to adopt to other languages.
Create and edit the file .git/hooks/post-commit to look like this:
#!/bin/sh # version=$(git describe --tags --long) echo "#define LIBRARY_NAME_VERSION \""$version"\"" > ./version.h
Make the script executable:
chmod a+x .git/hooks/post-commit
For this to work though you must have made a tag, see GIT Tagging. Once your repository is tagged you can test the script:
.git/hooks/post-commit more version.h
You should have got something like this:
#define LIBRARY_NAME_VERSION "v0.4-0-g76ed9ef"
Now you can use this in your code for instance to output versioning information at startup.
And finally add version.h to your GIT ignore file or you will have a continuous flow of commits to include the latest change of this file, since it will change after each commit 🙂
echo version.h >> .gitignore