git でリポジトリを clone した場合、通常は元のリポジトリを丸ごと取得してきます。
しかし、最新版が取得できればそれでよい、過去の履歴情報はいらない、という場合もあるかと思います。そんなとき、次のようにすればリポジトリを丸ごと取得せず、最新版だけ取得できます。
git clone --depth 1 https://github.com/git/git
これは、git のマニュアルでは shallow clone と呼ばれています。
オプション depth
に渡す値は、取得する履歴の数です。上記では 1
を指定しているので、最新のみを取得します。depth 1 で shallow clone したリポジトリで git log
を実行すると、ログが 1 つしかないのが分かります。
利点
変更履歴が多くて通常の clone では時間がかかるような git リポジトリの場合、shallow clone を使うことで通常の clone より速く最新版を取得できます。
とりあえず最近の履歴だけ見たい、とか、最新版に対して修正パッチを作成したい、とかいった目的に有益です。
通常の clone と shallow clone との変換
既に通常の clone がある場合に、それを後から shallow clone にすることが可能です。次のようにすれば良いです。
git fetch --depth 1
また、既に shallow clone がある場合に、それを後から通常の clone にすることが可能です。次のようにすれば良いです。
git fetch --unshallow
補足
以前は、shallow clone したリポジトリでは、fetch や push ができないという制限事項がありました。しかし、現在(Git 1.9 以降)は、それらが改善されており、fetch や push を行うことも可能になりました。
まとめ
shallow clone はあまり知られていない機能だと思いますが、状況と目的によっては役に立つ機能ではないかと思います。