大規模なリポジトリを操作する
Git は、広く採用され推奨されている優れたバージョン管理システムですが、大規模なリポジトリを使用する場合は、いくつかの懸念事項を考慮して対処する必要があります。
分散バージョン管理システムでリポジトリのローカル コピーを使用することは機能しますが、大規模なリポジトリが配置されている場合は大きな問題になる可能性があります。
たとえば、300 GB を超えるデータを含むリポジトリを内部システムから Git に移行するときに、この問題が検出されました。
リポジトリが大きくなる理由
大規模なリポジトリには、主に次の 2 つの原因があります。
- 長い歴史
- 大きなバイナリ ファイル
簡易クローン
開発者がローカル リポジトリで使用可能なすべての履歴を必要としない場合は、浅いクローンを実装することをお勧めします。
これにより、ローカル開発システムの領域と同期にかかる時間の両方が節約されます。
実行する複製の深さを指定できます。
git clone --depth [depth] [clone-url]
また、ブランチをフィルター処理したり、単一のブランチのみを複製したりして、複製を減らすこともできます。
VFS for Git
VFS for Git は、大規模なリポジトリに役立ちます。 Git LFS クライアントが必要です。
一般的な Git コマンドは影響を受けませんが、Git LFS は標準ファイルシステムと連携して、サーバーからファイルが必要な場合に必要なファイルをバックグラウンドでダウンロードします。
Git LFS クライアントはオープンソースとしてリリースされました。 このプロトコルは、REST エンドポイントに似た 4 つのエンドポイントを持つ単純なプロトコルです。
大規模なリポジトリの詳細については、「大規模なファイル と Git 用の 仮想ファイル システムの操作: Enterprise Scaleで Git を有効にする」を参照してください。
スカラー
スカラーは、Windows および macOS で使用できる .NET Core アプリケーションです。 Git 用のツールと拡張機能を使用すると、非常に大きなリポジトリを使用して Git コマンドのパフォーマンスを最大化できます。 Microsoft では、Windows リポジトリと Office リポジトリに使用します。
Azure Repos がリポジトリをホストしている場合は、GVFS プロトコルを使用してリポジトリを複製できます。
これは、次のようないくつかの高度な Git 機能を有効にすることで実現します。
- 部分クローン: は、すべての Git オブジェクトをすぐにダウンロードしないことで、作業リポジトリを取得する時間を短縮します。
- バックグラウンド プリフェッチ: は 1 時間ごとにすべてのリモートから Git オブジェクト データをダウンロードするため、フォアグラウンド Git フェッチ呼び出しの時間が短縮されます。
- スパース チェックアウト: は作業ディレクトリのサイズを制限します。
- ファイル システム モニター: は最近変更されたファイルを追跡し、Git が作業ツリー全体をスキャンする必要がなくなります。
- Commit-graph: はコミットウォークと到達可能性の計算を高速化し、git log などのコマンドをスピードアップします。
- マルチパック インデックス: を使用すると、多数のパック ファイル間で高速なオブジェクト参照が可能になります。
- 増分再パック: マルチパック インデックスを使用して同時実行コマンドを中断することなく、パックされた Git データをより少ないパック ファイルに再パックします。
手記
新しい Git バージョンがリリースされるたびに、スカラーが自動的に構成する機能の一覧を更新します。
詳細については、以下を参照してください。