2017-08-15 2 views
1

私はどのようにしてgit clone --referenceがネットワーク容量とディスク容量を節約するのが好きです。ただし、参照リポジトリを削除すると、新しいリポジトリが破損します。gitクローン - 参照、ハードリンクあり

私が理解する限り、--reference.git/objects/info/alternatesを使用してオブジェクトを共有します。ただし、--localのようにハードリンクを使用すると、ネットワーク容量やディスク容量を節約でき、参照リポジトリを削除しても破損することはありません。

このような効果を得る方法はありますか?

+1

「--dissociate」は、参照クローンがネットワーク帯域幅だけを保存するようにします(リンクを使用しません)。 '--local'とうまく組み合わされればいいと思うが、そうは思わない。 – torek

+0

https://stackoverflow.com/a/30161858/2303202 – max630

答えて

0

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