Git Versioning System

Config

git config --global http.postBuffer 1024000000

Change Log generation

List file names changed between two revisions IDs

git diff $oldrev $newrev --diff-filter=ACDMR --name-only

List changes between two revisions IDs, with author and commit message

# sed removes double \n that come from git log (%B)
git log --abbrev-commit --pretty=format:'* %h %an %ar: %B' ${oldrev}..${newrev} | sed ':a;N;$!ba;s/\n\n/\n/g'

List changes after a specified date, with author and commit message

git log --abbrev-commit --pretty=format:'* %h %an %ar: %B' --after='2016-02-01'| sed ':a;N;$!ba;s/\n\n/\n/g'

A changelog for Slack chat

BRANCH=$(git rev-parse --abbrev-ref HEAD)
HOSTNAME=$(hostname -f)

# Links to changed files
FILES_CHANGED=''
for ITEM in $(git diff $oldrev $newrev --diff-filter=ACDMR --name-only); do
  FILES_CHANGED="$FILES_CHANGED\n* <$GIT_REPO/blob/$newrev/$ITEM|$ITEM>"
done

NUM_CHANGED=$(git diff $oldrev $newrev --diff-filter=ACDMR --name-only | wc -l)
BASEURL="$GIT_REPO/commit"

GITLOG=$(git log --abbrev-commit --pretty=format:"* %an commit <$BASEURL/%H|%h> di %ar: %B" ${oldrev}..${newrev} | sed ':a;N;$!ba;s/\n\n/\n/g')

CHANGELOG="*$NUM_CHANGED* files changed:\n$FILES_CHANGED\n\n*Details*:\n$GITLOG\n"