我寫了下面的腳本來實現它。第一次運行它將創建一個緩存回購,它是遠程回購的鏡像。因此它將使用這個緩存來創建一個--local
克隆(具有硬鏈接和節省網絡容量的所有好處),然後它將origin
覆蓋爲遠程回購,而不是本地緩存回購。
#!/usr/bin/env bash
#
# Usage: clone <branch> [<target-directory-name>]
#
set -ueo pipefail
readonly BRANCH=$1
readonly TARGET=${2:-$BRANCH}
readonly ORIGIN_REPO='[email protected]'
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"
完全不一樣(不使用鏈接),但'--dissociate'使參考克隆只保存網絡帶寬。如果它與'--local'很好地結合在一起會很好,但我不認爲它確實如此。 – torek
https://stackoverflow.com/a/30161858/2303202 – max630