Do you ever forget to push your git commits?


The title of this post is a rhetorical question. At least I think it is. Or I like to think it is. What I can say with certainty is that I forgot my fair share of pushes. 😅

Sometimes I was the one tripping over my own mistake (Why is that commit not live? Ah, because the pipeline did not run. Because I did not push. facepalm). Sometimes my colleagues had to find out.☺️

So I thought it should not be that hard to get some automation in place to avoid these shenanigans. And sure enough it is. This is how it looks:

/img/git-remind.png

The bulk of the work is done by this little project aptly named git-remind. It is pretty simple to setup. Beyond putting the executable on your PATH you have to tell it which repositories you want reminders for in your git config:

git config --global remind.paths '/path/to/your/projects/*,/and/some/other/repo'

After that git-remind status tells you about pushes and potential commits that are missing. My interest is in missing pushes only, so I adapted the suggested jump script accordingly:

alias grj='cd $(git-remind status | grep " push:" | sed "s/.* push: //" | fzf)'

Now we can jump directly to the repositories in question. But what about reminders? Sadly I could not get the builtin notification functionality working via cron. So I wrote this tiny script:

#!/usr/bin/env bash
set -euo pipefail

UNPUSHED_COMMITS=$(git remind status | grep " push:" | wc -l)
if [ "$UNPUSHED_COMMITS" != "0" ]; then
    notify-send --expire-time=60000 "Unpushed commits:"  "There are $UNPUSHED_COMMITS unpushed commits. Run grj to find them."
fi

It is called via cron every minute1:

* * * * * XDG_RUNTIME_DIR=/run/user/$(id -u) chronic $HOME/scripts/notify_on_forgotten_push.sh

Caveats

I found two cases in which unpushed commits do not trigger an alert by git-remind:

  • If there is no remote branch setup

  • If the branch is currently not checked out

As I usually do trunk based development this does not bother me. But if you need this you should probably replace git-remind with something else.

1Cautious reminder: For that to work you have to set HOME and PATH variable in crontab accordingly if you have not already.


git  linux 

See also