2016-05-30 15 views
3

リポジトリからローカルクローンを作成すると、元のリポジトリが浅い場合にクローンが失敗します。Gitリポジトリが浅いかどうかをテストするには?

git clone -l -- . target-dir 

これは常にそうであるとは限りませんが、私は以前のクローンを見つけたいと思いますが、それを行う方法はわかりません。

私がこれまでに試したことは、基本的にクローンにエラーメッセージを作成することです。しかしその後(リモートunshallowあるために保証はありません

if ! git fetch --unshallow; then 
    git fetch 
fi 

:現時点では私はちょうどunshallowするフェッチとそれが失敗した場合、私はレポが浅いことならば、それは後でunshallowする必要があるため、プレーンをフェッチしますから奪取することも浅くすることができる)ので、gitリポジトリの(妥当でない)浅さに対するテストははるかに良いでしょう。

+0

何が質問ですか? – Whymarrh

+0

@Whymarrh:「Gitリポジトリが浅いかどうかをテストする方法」は、編集したばかりのもので、まず組み込み検索のタイトルを使用していました。 – hakre

答えて

6

おそらくgit rev-parse、いくつかの他の項目(--is-inside-git-dir--is-inside-work-tree、及び)を露出する、は浅い試験(--is-shallow-repository)を有するべきです。 Until Git version 2.15、それはしませんでした。あなたのGitが古い場合は、Gitのリポジトリのディレクトリ内のファイルshallowため単なるテスト:

if [ -f $(git rev-parse --git-dir)/shallow ]; then 
    echo this is a shallow repository; 
else 
    echo not a shallow repository; 
fi 

または(短い):

[ -f $(git rev-parse --git-dir)/shallow ] && echo true || echo false 

git --versionが印刷されます現在のバージョン番号:

$ git --version 
2.14.1 

$ git --version 
git version 2.7.4 

など(私はこの時点では異なるVM /マシン上で複数のバージョンを持っています。)また、実行することができます。

git rev-parse --is-shallow-repository 

それだけで--is-shallow-repositoryを印刷した場合は、あなたのGitは事前2.15で、オプションを欠いています。

+0

リポジトリが浅い限り、git-dirに 'shallow'ファイルがありますか?これをテストすることは有望だと思います。 – hakre

+0

テストから:浅いファイルを削除すると、gitは浅くないと思ってローカルクローンを許可します。それだけで、現在のgitバージョンに気付くだけで、--localは浅いと検出され、クローンになっても非ローカルになると無視されます。終了ステータスコードは0です。 – hakre

+0

'shallow'ファイルはマーカだけでなく、浅いリポジトリにするグラフトも含んでいます(ファイルを削除した場合は壊れたリポジトリと同じです)。それを削除することは一般的には賢明ではありません。それを成功裏にunshallowsする 'フェッチ'に任せてください。 – torek

関連する問題