#!/bin/bash if [ "x$1" = 'x-C' ]; then git_dir=$(readlink -e "$2") shift 2 else git_dir=$(pwd) fi if [ $# -ne 1 ] || [ ! -d "${git_dir}" ]; then printf 'usage: %s [-C /dir/ec/to/ry] archive.tar\n' "${0##*/}" exit 1 fi tar_ball="$1" tmp_dir=$(mktemp -d) trap 'cd /; rm -rf --one-file-system "${tmp_dir}"' EXIT cd "${tmp_dir}" git clone -q "${git_dir}" . || exit $? git checkout -q $(git -C "${git_dir}" rev-parse HEAD) || exit $? git clean -qxdf . git archive HEAD \ | tar -t \ | xargs -r rm bsdtar -C "${tmp_dir}" -xf "${tar_ball}" --strip-components 1 || exit $? tar_ball="${tar_ball##*/}" git add . git commit -qm "${tar_ball}" git checkout -b "${tar_ball%.tar*}" git push --set-upstream origin "${tar_ball%.tar*}"