#!/usr/bin/env zsh # Creates a git worktree checking it out the first argument in a temporary # directory that is deleted again, if the spawned subshell exits. local GIT_ROOT TEMP_DIR REPO_DIR GIT_ROOT="$(basename "$(git rev-parse --show-toplevel)")" || return TEMP_DIR="$(mktemp -d)" REPO_DIR="$TEMP_DIR/$GIT_ROOT" git worktree add "$REPO_DIR" "$1" [[ -e "$REPO_DIR" ]] || return 1 pushd -q "$REPO_DIR" # Start subshell "$SHELL" # Cleanup when exiting popd -q # Restart the subshell until every issue is resolved and the worktree is # removed until [[ ! -e "$REPO_DIR" ]] || git worktree remove "$REPO_DIR"; do pushd -q "$REPO_DIR" "$SHELL" popd -q done git worktree prune command rm -rf "$TEMP_DIR"