#!/bin/sh # # USAGE: git-short-commit.sh # set -e error() { echo "ERROR: ${*}" >&2 exit 1 } GIT_URL="${1}" if [ -z "${GIT_URL}" ]; then error "Git URL not specified" fi GIT_REF="${2}" if [ -z "${GIT_REF}" ]; then error "Git reference not specified" fi GIT_DIR="${3}" if [ -z "${GIT_DIR}" ]; then error "Git clone directory not specified" fi clean_up() { rm -rf "${GIT_DIR}" } trap clean_up EXIT git init --quiet "${GIT_DIR}" ( cd "${GIT_DIR}" for PREFIX in "" "https://" "http://" "git@"; do echo "Trying remote '${PREFIX}${GIT_URL}'" >&2 git remote add origin "${PREFIX}${GIT_URL}" if git fetch --depth 1 origin "${GIT_REF}"; then git checkout --detach FETCH_HEAD -- git rev-parse --short HEAD break fi git remote remove origin done )