DEV Community

Serhat Teker
Serhat Teker

Posted on • Originally published at tech.serhatteker.com on

Auto Add Date to Git Commit Messages

In previous post — Auto Add Git Commit Message, we saw how to add auto text into commit messages.

Now I want to use a concrete commit message template for all Git commits. It will be like: $yearnum/$weeknum/$daynum $unix_timestamp | version:.

Yes, adding date to a commit would be unnecessary since Git already logging date and you can see them with git log.

However I am going to use this template for my Journal, therefore for lookups this template makes things easy and quick.

For message I am going to use linux's default date/bin/date. You can find below $MESSAGE that I will add to commits:

# Nums YNUM=$(date +%y) WNUM=$(date +%U -d "$DATE + 1 week") DAYNUM=$(date +%w) # Unix timestamp UNIX_SEC=$(date +%s) MESSAGE="Add y$YNUM:w$WNUM:d0$DAYNUM $UNIX_SEC | ver:" 
Enter fullscreen mode Exit fullscreen mode

To append this every commit message use below code:

COMMIT_MSG_FILE=$1 echo "$MESSAGE" >> $COMMIT_MSG_FILE 
Enter fullscreen mode Exit fullscreen mode

So when you git commit it appends our message and it will be like: "Add y20:w21:d02 1588701600 | ver:"

In this approach there is one thing that I want to improve: Instead of append I want prepend message so it will be on first line.

In order to prepend message to commit we will use sed and regex:

sed -i "1s/^/$MESSAGE/" $COMMIT_MSG_FILE 
Enter fullscreen mode Exit fullscreen mode

In the end whole solution can be found below:

.git/hooks/prepare-commit-message

#!/bin/sh # # A git hook script to prepare the commit log message. # # It adds below date message to commits: # $yearnum/$weeknum/$daynum $unix_timestamp | version: # # To enable this hook, rename this file to "prepare-commit-msg". # Add it below '.git/hooks/' and make it executable: # chmod +x prepare-commit-msg COMMIT_MSG_FILE=$1 # Nums YNUM=$(date +%y) WNUM=$(date +%U -d "$DATE + 1 week") DAYNUM=$(date +%w) # Unix time in milisecond UNIX_SEC=$(date +%s) MESSAGE="Add y$YNUM:w$WNUM:d0$DAYNUM $UNIX_SEC | ver:" sed -i "1s/^/$MESSAGE/" $COMMIT_MSG_FILE 
Enter fullscreen mode Exit fullscreen mode

All done!

Top comments (0)