Richard Crowley’s blog

Git Paid, the programmer’s time tracker

As part of an effort to learn hands-on about DevStructure’s potential customers, I’ve started working with small companies helping with their Puppet infrastructure and general operational polish.  It became quickly clear to me that tracking my time in TextMate was a losing proposition so I took a late evening to whip up Git Paid.

Git Paid includes three programs.  gpbegin(1) and gpend(1) mark the beginning and end of a work session by making commits to a Git repository.  By default, this repository is ~/.gitpaid but it can be overridden by the GITPAID_REPO environment variable or the -r option.  Likewise the default branch is master but it can be overridden by the GITPAID_BRANCH environment variable or the -b option.

gpinvoice(1) tabulates the time spent in all work sessions and generates a nice work summary, which includes all the commit messages given to gpbegin(1) and gpend(1) with the -m option.  It respects that not all hours are billable so the -t option to gpend(1) will cause gpinvoice(1) to count an arbitrary amount of time for that session.  For example:

$ gpbegin -b client-name
$ ...
$ gpend -b client-name -m "Shaved the yak."
$ gpbegin -b client-name
$ gpend -b client-name -t 1:45 -m "Faked the time."
$ gpinvoice -b client-name
# Invoice

Thu Jan  6 18:27:32 UTC 2011
from client-name branch of /home/vagrant/.gitpaid

## Work log

Began: Thu, 6 Jan 2011 16:17:29 +0000

> Shaved the yak.

Ended: Thu, 6 Jan 2011 17:47:42 +0000
Billed time: 1:30

Began: Thu, 6 Jan 2011 18:27:23 +0000

> Faked the time.

Ended: Thu, 6 Jan 2011 18:27:25 +0000
Billed time (adjusted): 1:45

## Summary

Total billed time: 3:15

Git Paid on GitHub