2017-08-15 61 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"