git リポジトリの最新の履歴だけを取得する shallow clone

  • 115
    いいね
  • 0
    コメント

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 はあまり知られていない機能だと思いますが、状況と目的によっては役に立つ機能ではないかと思います。

この投稿は Git Advent Calendar 201317日目の記事です。