私はそれを達成するために以下のスクリプトを書いています。最初に実行されると、リモートリポジトリのミラーであるキャッシュレポが作成されます。その結果、このキャッシュを使用して--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