git clone –reference, pero con enlaces duros

Me gusta cómo git clone --reference ahorra tanto la capacidad de la networking como el espacio en disco. Sin embargo, si se elimina el repository de reference, el nuevo repository se corrompe.

Por lo que yo entiendo, la --reference usa .git/objects/info/alternates para compartir los objects. Sin embargo, si usaba --local lugar, como --local does, entonces no habría tal problema – podría ahorrar capacidad de networking, espacio en disco y no se corrompería cuando se elimine el repository de reference.

¿Hay alguna manera de lograr tal efecto?

Escribí el siguiente guión para lograr eso. La primera vez que se ejecuta creará un repository de caching que es un espejo del repository remoto. En consecuencia, utilizará este caching para crear un clon --local (con todas las ventajas de los enlaces --local y la capacidad de networking), y sobrescribe el origin para que sea el repository remoto, en lugar del repository de caching local.

 #!/usr/bin/env bash # # Usage: clone <branch> [<target-directory-name>] # set -ueo pipefail readonly BRANCH=$1 readonly TARGET=${2:-$BRANCH} readonly ORIGIN_REPO='git@...' readonly CACHE_REPO='/tmp/cache-repo.git' if [[ -e "$CACHE_REPO" ]]; then echo "Updating existing cache repo at: $CACHE_REPO" git --git-dir="$CACHE_REPO" remote update --prune else echo "Creating cache repo from scratch" git clone --bare --mirror "$ORIGIN_REPO" "$CACHE_REPO" fi git clone --local "$CACHE_REPO" "$TARGET" --branch="$BRANCH" git --git-dir="$TARGET/.git" remote set-url origin "$ORIGIN_REPO"