シャロークローンとは?
シャロークローンはプロジェクトの全ログではなく、最近の履歴の限られた一部だけをダウンロードするため、チェックアウトが大幅に速くなります。
シャロークローンとは、履歴を最新のコミットまで切り詰めたクローンです。何年もの履歴を持つプロジェクトでは、最新のコードをビルドするだけでよいのにすべてをダウンロードするのは無駄です。シャロークローンはそのコストを劇的に削減するため、CI ではデフォルトで使われています。
シャロークローンの仕組み
シャロークローンは選択した深さまでのコミットだけを取得し、古い履歴を省略します。Git は履歴が不完全であることを記録し、その境界を把握します。作業ファイルはフルクローンと同一で、その背後にある過去のコミットだけが欠けています。
シャロークローンを作成する
git clone に深さを渡すことで、取得するコミット数を制限します。
A depth-1 shallow clone
git clone --depth 1 https://github.com/owner/project.gitトレードオフ
シャロークローンはより小さく速いですが、古い履歴を持たないため、ずっと過去まで blame したり、古いベースと diff したりといった履歴を必要とする操作は失敗したり、深くする手順が必要になったりします。ほとんどのビルド・テストジョブでは最新のコミットだけあれば十分なので、このトレードオフは十分に見合います。
CI/CD におけるシャロークローン
CI のチェックアウトアクションは、あらゆるパイプラインで最も繰り返される手順を高速化するために、デフォルトでシャロークローン(多くの場合 depth 1)を使います。ジョブが履歴を必要とする場合、たとえばベースブランチとの diff を計算する場合は、深さを増やすかより多くを取得します。マネージドランナー上での高速なチェックアウトは、スケールすると実際の時間節約として積み重なります。
深くすべきタイミング
- 単純なビルド・テストジョブには depth 1 のままにします。
- ベースブランチと比較する場合は深さを増やします。
- ログ全体をたどるツールには完全な履歴を取得します。
- 大規模なリポジトリで CI のチェックアウト時間を削減するにはシャロークローンを使います。
重要なポイント
- シャロークローンは最近の履歴だけを取得してチェックアウトを高速化します。
- 古いコミットを省略しますが、一部の操作はそれを必要とします。
- CI はチェックアウトを速く保つためにデフォルトでシャロークローンを使います。
関連ガイド
What Is git clone?What is git clone? An explainer on how cloning copies a repository with its full history, sets up the origin…
What Is fetch-depth?What is fetch-depth in CI checkouts? Learn how this setting controls how much Git history a job fetches, why…
What Is a Git Remote?What is a Git remote? An explainer on named connections to hosted repositories, how push and fetch use them,…