12k
All articles

Git shallow clone: その概念、使用時期、そして使用方法

Git shallow cloneはダウンロードサイズを削減し、CI/CDパイプラインを高速化する。depth制限の使い方、unshallowの手順、履歴エラーの回避策を紹介する。

OpenReplay Team
OpenReplay Team
Git shallow clone: その概念、使用時期、そして使用方法

リポジトリをgit cloneでクローンする場合、通常はコミット履歴全体が取得されます。しかし、履歴全体が必要ない場合はどうでしょうか?そこで浅いクローン(shallow clone)の出番です。この記事では、浅いクローンとは何か、その仕組み、そして使用するタイミングについて、コピー&ペーストですぐに使える例とともに説明します。

重要ポイント

  • 浅いクローンはgit clone実行時に取得する履歴の量を制限します
  • CI、大規模リポジトリ、迅速なセットアップに最適です
  • --depth--single-branch--shallow-sinceの使い方を学びましょう

Gitにおける浅いクローンとは?

浅いクローンは、リポジトリの履歴全体ではなく一部だけを取得するGitクローンです。これによりダウンロードサイズと時間が大幅に削減されます。特に以下の場合に役立ちます:

  • 完全なコミット履歴が必要ない場合
  • CI/CDパイプラインの高速セットアップが必要な場合
  • 大規模なリポジトリを扱う場合

浅いクローンと通常のクローンの比較

機能 通常のクローン 浅いクローン 履歴全体を取得 はい いいえ(限定的なコミット) クローン速度 遅い 速い Git操作(rebase、bisect) 完全サポート 一部制限あり CI/CDに最適 最適ではない はい

浅いクローンの実行方法

最新のコミットのみをクローン

git clone --depth=1 https://github.com/owner/repo.git

特定のブランチを限定的な履歴でクローン

git clone --depth=1 --branch main --single-branch https://github.com/owner/repo.git

特定の日付以降のコミットをクローン

git clone --shallow-since="2024-01-01" https://github.com/owner/repo.git

大きなファイルのダウンロードを完全にスキップしたい場合は、部分クローンと--filter=blob:noneも使用できます。

浅いクローンを完全なクローンに変換できますか?

はい、後で完全な履歴が必要になった場合:

git fetch --unshallow

これにより不足しているコミットが取得され、浅いクローンが完全なクローンに変換されます。

浅いクローンはいつ使うべきか?

浅いクローンが適している場合:

  • コードの最新バージョンのみが必要な場合
  • CIパイプラインを実行し、ビルドを高速化したい場合
  • 完全な履歴が不要なコードの検査やテストを行う場合

浅いクローンを避けるべき場合:

  • git bisectgit rebase、マージ操作を実行する必要がある場合
  • 変更に貢献し、コミット履歴へのアクセスが必要な場合
  • リポジトリの完全なコンテキストに依存するツールを開発している場合

浅いクローンの一般的な問題

Git操作が失敗する可能性

一部のコマンドは完全な履歴を前提としており、浅いクローンではエラーが発生します:

  • git merge-base
  • git rebase
  • git bisect

解決策:git fetch --unshallowを実行するか、そのようなコンテキストでは浅いクローンを避けてください。

浅いクローンはモノレポツールを破壊する可能性がある

LernaやNxなどのツールは、依存関係グラフや影響を受けるパッケージのためにリポジトリのコミット履歴への完全なアクセスを前提としている場合があります。特定のツールチェーンでテストしてください。

結論

浅いクローンは、特にCIや大規模リポジトリを扱う場合に開発ワークフローを高速化する優れた方法です。トレードオフを理解しておきましょう — 必要に応じて後から完全なクローンに変換することも可能です。

よくある質問

浅いクローンは速いですか?

はい。取得するコミットが少ないため、特に大規模リポジトリではダウンロードと処理が速くなります。

浅いクローンからプッシュできますか?

はい、できますが、クローンを完全な状態に戻さない限り、履歴関連の操作の一部が失敗する可能性があります。

浅いクローンを元に戻すにはどうすればいいですか?

`git fetch --unshallow`を実行して、リポジトリを完全なクローンに変換します。

GitHub Actionsで浅いクローンを使用できますか?

はい — 実際、GitHub Actionsはデフォルトで浅いクローン(`fetch-depth: 1`)を使用しています。

Listen to your bugs 🧘, with OpenReplay

See how users use your app and resolve issues fast.
Loved by thousands of developers

We use cookies to improve your experience. By using our site, you accept cookies.