Last Updated: February 25, 2016
· allolex

imagesnap git post-commit photo rewrite

Remember the tip for git that takes an image of each commit via git's built-in hooks? (The one that takes a photo of you when you make a commit.) Here's a somewhat cleaner rewrite of post-commit—just because it's a shell script doesn't mean it has to be ugly.

To keep things tidy, it creates a folder called commit_images directly in your repo and gitignores it for you. It then adds the commit photos to that folder.

imagesnap can be installed under OS X via homebrew.

Here's the gist


function make_image_dir () {
  if [ ! -d "${TARGET_DIR}" ]; then
    mkdir "${TARGET_DIR}"

function ignore_image_dir () {
  grep -q "${TARGET_DIR}" "${GIT_IGNORE}"
  if [ $? -gt 0 ]; then
    echo "${TARGET_DIR}" >> "${GIT_IGNORE}"

function take_photo () {
  DATE_STRING=`date '+%Y_%m_%d-%H_%M_%S'`
  imagesnap -q "${TARGET_DIR}/${USER}-${DATE_STRING}.jpg"


make_image_dir "$BASE_DIR/$IMAGE_DIR"
ignore_image_dir "$IMAGE_DIR" "$BASE_DIR/.gitignore"
take_photo "$BASE_DIR/$IMAGE_DIR"

5 Responses
Add your response

You didn't tell us what it takes a picture of. I had to look at the docs for imagesnap.

For others: this script takes a photo of you via webcam.

Shortened version of the script:

over 1 year ago ·

@mislav I've added a parenthetical comment for people like yourself who don't know about or remember the original conversation this tip came from.

over 1 year ago ·

@mislav What's the benefit of the shorter script?

over 1 year ago ·

Absolutely no benefit, except that I find shorter = easier to read.

over 1 year ago ·

@mislav Heh. This is a case of reasonable minds disagreeing. I wrote it this way so people could follow along more easily. Basically the same reason as you. :)

over 1 year ago ·