Craftsmanship

Pair harmoniously with git-duet


I started doing pair programming about a year and a half ago. Since then, I’ve been using the same tool to set the two users involved in the pairing process.

For me, one minor issue is that authors’ identity wasn’t properly established because the defined author was formed with two names, “un-linked” to their real git usernames. Almost like a fictitious user.

Then, that fictitious user appears in the collaborators’ statistics of the project, without the real identity of the users involved.

A few days ago, I started to use a similar tool, the git-duet gem. Built by Modcloth, this gem identifies the author as well as the committer. This way, every commit will include the real names or usernames, without the fictitious user created by merging identities, and giving credit to the people involved in the work done.

So, let’s see how it works.

Installation and configuration

As any other Ruby gem:

gem install git-duet

Once installed, create the file ~/.git-authors to set the users identity, by adding names, usernames and email domain, in YAML format.

authors:
     ac: Ana Castro; ana-ci
     gv: Gilberto Villa; ingilniero
email:
    domain: magmalabs.io

Usage

Once you start to work in pair, set the author and committer like this:

git duet ac gv

Then, when you’re ready to commit, just type:

git duet-commit -m

The git log will appear this way:

image alt

And when you start to work by yourself again, use the solo command:

git solo ac

More useful commands

To set up the global git config, if you are switching between projects, use the –g/-g option:

git solo -g ac
git duet --global ac gv

Also, if you tend to forget updating the pair initials (like I do all the time) or if you change your pair often, there’s a git-duet tool that will remain you to update the users identities. Just add this line to your pre-commit hook (in $REPO_ROOT/.git/hooks/pre-commit)

#!/bin/bash
exec git duet-pre-commit

This way, if the author and commiter are missing, the command will exit with a non-zero status. If it exits with zero status, the commit is accepted. If it exits with a non-zero status, the commit is rejected. This also happens if the identity values are stale. Of course, you can edit the staleness cutoff line in the GIT_DUET_SECONDS_AGO_STALE environment variable (integer of seconds). 20 minutes is the default value:

export GIT_DUET_SECONDS_AGO_STALE=60
# if you work for more than a minute
git commit -v
# then pre-commit hook fires

You can find more useful information and commands in the gem documentation and source code. Happy pairing!

Development
What is VTEX platform and why should you migrate your ecommerce to it?
AEM
How to use internal redirects in AEM?
Craftsmanship
How Accurate Are Your Estimations?