2016-10-08 11 views
3

私はgit clone --depth [N]を使いたいですが、特定のshaが得られることを保証するようなNを使用したいと思います。リモートブランチでgit sha深さを取得

リモートリポジトリ内のシャーの深さをどのように判断できますか。それをローカルにクローン化することは、キャッチ22です。私はそれをすべてクローン化しないようにしたいと思います。

答えて

2

オプション1:

リポジトリの完全クローンを取得する能力を持っている場合は、あなたがgit rev-list HEAD ^42c6ee9 --countを使用して深さを見つけることができます。

これは、特定のコミットの深さを検出します。リモートバージョンはありませんので、完全コピーを維持できる場合にのみ動作し、次に深さを把握するためにsshを入力してください。

これにより、クローンを1回だけ行うことができますが、その後、浅いコピーを行う次のすべての時間に質問に回答することができます。

オプション2:

git clone --depth 1を使用したが、その後git fetch --depth=i+1に反復することは、実際にテストする価値は良いアイデアです。 (上記の@leonでも提案されています)。

リポジトリの特性に応じて、これは意味があります。

など。あなたは魔法の正しい答えを知っていれば - 完全なローカルリポジトリに

git clone https://github.com/django/django 

./oracle.shを引っ張っ - Djangoのリポジトリには23330のコミット(テスト時)

./full.shを持っています。時間の下限。

git clone --depth 10 https://github.com/django/django.git 

./search。

git clone --depth 1 https://github.com/django/django.git 
cd django 

i=1 
until git show 5d35181 > /dev/null 
do 
    i=$((i+1)) 
    git fetch --depth=$i 
done 

オーバーヘッドがある間に、検索が完全なクローンよりも早く出てくる可能性があります。

./full.sh 21.34s 
./oracle.sh 1.12s 
./search.sh 3.05s 
1

git clone --depth 1で予備のシャロークローンを作成し、希望のコミットが到着するまで履歴の深さをgit fetch --depth Nで徐々に増やすことができます。各 リモート分岐履歴の先端からコミットの指定された数にフェッチ

--depth=<depth>

制限:git-fetchのドキュメントから

浅いリポジトリにフェッチは--depth=<depth>オプション(git-cloneを参照)、 がコミットの指定された数に歴史を深めたり短くしてgit cloneで を作成した場合。深刻なコミットのタグ はフェッチされません。

+0

ありがとう@リオンしかし、このことは、リポジトリ全体を一度にクローンするよりも時間がかかり、トラフィックが増える可能性があります – gsf

関連する問題