182
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

posted at

updated at

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

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

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
182
Help us understand the problem. What are the problem?