[Authored by Sam]
In beezwax’s webdev division we generally work in pairs, but our commit logs didn’t used to show this. We wouldn’t bother to reconfigure the git author every time we sat down with a new pair so our git log only recorded one of the programmers’ names. Bryan Helmcamp has a nice script for setting your git commit author in pair programming situations. Here’s another one which works interactively.
Interactively set the git commit author to pair programmers’ names:
#!/usr/bin/env ruby
#
# Git pre-commit hook:
# Install at .git/hooks/pre-commit and set as executable
#
# Interactively sets git commit author for pair programming
#
###################################################
# Configuration
me = "Sam Goldstein"
my_email = 'sam_g@beezwax.net'
pair_email = 'webdev@beezwax.net'
developers = [
"Ian Smith-Heisters",
"Jesse Sanford",
"Noah Thorp"
]
###################################################
puts "Pairing? (enter number):"
developers.each_with_index do |name, index|
puts " #{index + 1}: #{name}"
end
choice = File.new("/dev/tty").readline.chomp
unless choice =~ /Ad*Z/
puts "Bad input `#{choice}'"
exit 1
end
commit_name = me
commit_name += ' & ' + developers[choice.to_i - 1] unless choice == ''
commit_email = choice == '' ? my_email : pair_email
puts "...setting *commit author* to `#{commit_name}'"
puts "...setting *commit email* to `#{commit_email}'"
`git config user.name '#{commit_name}'`
`git config user.email '#{commit_email}'`
Now when you’re ready to commit you’ll be asked if this is a paired programming session.
$ git commit Pairing? (enter number): 1: Ian Smith-Heisters 2: Jesse Sanford 3: Noah Thorp 1 ...setting *commit author* to `Sam Goldstein & Ian Smith-Heisters' ...setting *commit email* to `webdev@beezwax.net'
Hitting return will run the commit as you alone, but if you enter a number your commits can look like this:
commit c0228797a81efb6e89a61f5c5e96856ff527e217 Author: Sam Goldstein & Ian Smith-Heisters <webdev@beezwax.net>
It requires no extra effort (ok 1 keystroke), and works great if you don’t want to run a bunch of git config commands each time you’re ready to commit.