278
181

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

GitAdvent Calendar 2013

Day 17

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

Last updated at Posted at 2013-12-17

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

278
181
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
278
181

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?