Create a changelog from git log

On a regular basis, you may want to tag the master branch with a (beta) version that is deployed to a customer’s staging system.

People not engaged in development themselves (e.g. product owners) usually have a hard time following the changes that are made available with each new version. So the easiest way to help them is to create a readable changelog from the git log.

HOW WE DO IT

We use GitLab, which requires us to work with so called "feature branches" and merge requests. Merge requests from the feature branches are usually merged into the master with a merge commit. This merge commit carries some of the description from the merge request, especially its subject.

In the end, the git log looks like the following:

an excerpt of the git log graph

The interesting parts here are the merge commits (denoted by the description starting with "Merge branch"). Those carry just enough information to create a changelog from them:

name of the merge branch

As you can see, we prefix the short description of the merge request with a tracker number from our ticketing system. 'CHGLOG' is the short title of the project and '556' is the ticket number within the system.

To create a changelog from this information from within the git repository, nothing more than the following bash script is needed:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
#!/bin/bash

project=chglog
project_upper=`echo $project | awk '{print toupper($0)}'`
projects_match="(${project_upper})"

TAG_STEP=`git tag -l --sort=creatordate|tail -2|sed 'N;s/\n/../'`
echo Changes in $project between $TAG_STEP:
git fetch origin -t 2>&1 > /dev/null
git log "${TAG_STEP}"|grep -E "    ${projects_match}-"|sed 's/   /*/'

This script outputs the following, which can be given to the product owner as soon as the next version has been deployed:

1
2
3
4
5
$ bash create_changelog.sh
Changes in chglog between v0.1..v0.2:
* CHGLOG-556: Make bullet points list
* CHGLOG-456: Improvements to the Changelog
* CHGLOG-123: Basic Changelog implementation
About the author
Georg Schild is an agile mind and engineer, helping teams and organizations to leave their comfort zone in order to achieve more.

read more from Georg