GitMon - the git repository monitor

Dozens of git repositories? Want to know what's happening?

If you are actively using git (which you should, because it's awesome), you may have looked for a way to get those nice popup notifications when something is pushed to remote origin. When you have dozens of repositories to work with, it may get annoying to go through all of them and check for updates. I haven't found anything mature and worth using, so I decided to get my hands dirty...

And finally, after many joyful hours of coding... Meet GitMon - an open source git monitoring tool. Here's how it looks like:

You may have noticed that it's a typical Growl notification. GitMon can also be configured to use libnotify-bin on Linux and there is Growl for Windows which may do the job (I haven't tried that yet though).

GitMon Features (0.1.6):

• Configurable notifications via command-line tools (growlnotify, notify-send, ...)
• Scheduling via standard tools (like crontab)
• Support for multiple git repositories
• Possibility to give repositories custom names
• Possibility to notify about new branches
• Possibility to notify about new tags
• Configurable limit of new commits in notification
• Configurable limit of file details in notification
• Possibility to perform 'git pull' automatically
• Variables in configuration file
• Recursive file system scanning for repositories (configurable roots)

Installing GitMon

If you're willing to try it, there is no "next", "next", "finish" installation so far, so you will have to do this (shouldn't be too difficult to do for any developer):

1. Clone the repo:
Fire up the terminal and go where you want 'gitmon' dir to appear. Then do:
git clone git://github.com/spajus/gitmon.git

2. Add gitmon to path:
You may want to put this in your ~/.profile:
export PATH="$PATH:/path/to/gitmon"

3. Make sure you have growlnotify (Mac) or notify-send (Linux).
You can install notify-send command easily:
apt-get install libnotify-bin

4. Set up the configuration:
cp gitmon.conf.example ~/.gitmon.conf
Then edit ~/.gitmon.conf to suit your needs.

5. Make sure you have Python 2.6+ and GitPython:
python --version
easy_install gitpython

6. Test if your gitmon.conf works:
gitmon -v
A good output may look something like this:
GitMon v0.1.5
Loading configuration from /Users/tomasv/.gitmon.conf
Tracking repo: "GitMon Repo" at ~/Development/python/gitmon
Checking repo: GitMon Repo

7. Configure crontab:
crontab -e
#git must be in cron's path!
#check for repo updates every 5 minutes
*/5 * * * * gitmon

That's it. Now just wait for those notifications!


There is a small roadmap for future releases:
• Installation bundles for major operating systems
• Menubar / system tray icon
• GUI for configuration
• Integration with diff tools


I have just found Gitifier. Here's how GitMon and Gitifier notifications about same commit look next to each other:


  1. I just found Gitifier, which also uses Growl but is easier to install and use than GitMon. However it's only for Macs and you only get committers's name and commit message in notifications. Also, it doesn't track the differences between your repositories in file system and remotes. But if you don't need that much, Gitifier is absolutely the way to go. I'm a little glad that I haven't found it earlier, otherwise I would probably use it instead of reinventing the wheel.

  2. How does your project and Gitifier compare in tracking stuff other than new commits? For instance, it would be nice to learn about new branches introduced (or removed) on the remote, tags etc.

  3. GitMon notifies about new branches and tags, but it's harder to track remote removal, as this information does not come along with fetching, it could be possible to check remote fetch info against local data, but that's future.

    Gitifier seems to be quiet when new branch or tag is pushed to origin. Commits that happen in new branches are displayed, but you can't tell in which branch it was made.


Spam comments (i.e. ones that contain links to web development services) will be reported along with user profiles!

Note: only a member of this blog may post a comment.