Git の制限

Azure DevOps Services

Azure Repos では、すべてのお客様に信頼性と可用性を確保するために、Git リポジトリにリソース制限を設けています。 データ サイズとプッシュの数を適切に保つことで、Git の全体的なエクスペリエンスが向上するようになっています。

Git は Azure DevOps Services の他のサービスと同様に、レート制限の対象となっています。 さらに、リポジトリの合計サイズ、プッシュ回数、ファイルとディレクトリのパスの長さにも制限を設けています。

リポジトリのサイズ

リポジトリのサイズは 250 GB 以下にする必要があります。 リポジトリのサイズを取得するには、コマンド プロンプトで git count-objects -vH を実行し、「size-pack」というエントリを探します。

D:\my-repo>git count-objects -vH

count: 482
size: 551.67 KiB
in-pack: 100365
packs: 25
size-pack: 642.76 MiB   <-- size of repository
prune-packable: 83
garbage: 0
size-garbage: 0 bytes

最適なパフォーマンスを得るには、リポジトリのサイズを 10 GB 未満に保つことをお勧めします。 リポジトリがこのサイズを超える場合は、Git-LFSScalar、または Azure Artifacts を使用して開発成果物を管理することを検討してください。

Azure Repos では、類似したファイルをパックにまとめることで、Git リポジトリの全体的なサイズを継続的に削減し、効率を高めています。 250 GB に近いリポジトリの場合、最適化プロセスが完了する前に、パック ファイルの内部制限に達する可能性があります。 この制限に達すると、リポジトリに書き込もうとするユーザーには、「The Git pack file limit has been reached, write operations are temporarily unavailable while the repository is updated.」というエラー メッセージが表示されます。書き込み操作は最適化ジョブの完了後、すぐに復元されます。

ファイルのサイズは 100 MB 以下にする必要があります。 この制限により、Git リポジトリの最適なパフォーマンスと信頼性が確保されます。 ファイルのサイズが大きいと、変更の複製、フェッチ、プッシュなど、リポジトリの操作が大幅に遅くなる可能性があります。 大きなファイルを保存する必要がある場合は、Git LFS (Large File Storage) の使用を検討してください。LFS は、大きなファイルをメイン リポジトリの外部に保存し、リポジトリ内にそれらのファイルの参照のみを保持することで、大きなファイルを効率的に処理するように設計されています。 このアプローチは、Git リポジトリのパフォーマンスと管理性を維持するのに役立ちます。

プッシュ サイズ

大規模なプッシュは大量のリソースを消費するため、サービスの他の部分がブロックされたり、遅くなったりします。 このようなプッシュは通常のソフトウェア開発作業とは異なる目的で行われることが多く、ビルド出力や VM イメージなどが含まれている可能性があります。 そのため、プッシュは一度に 5 GB に制限されています。

ただし、大規模なプッシュが正常とみなされる例外が 1 つあります。それは、他のサービスから Azure Repos にリポジトリを移行する場合です。 このような移行は 1 回のプッシュとして行われ、リポジトリが大きくても、インポートがブロックされることはありません。 リポジトリが 5 GB を超える場合は、コマンド ラインではなく Web を使用してリポジトリをインポートする必要があります。

LFS オブジェクトのプッシュ サイズ

Git LFS は 5 GB のリポジトリ制限の対象外です。 5 GB の制限は、LFS で保存されている BLOB ではなく、実際のリポジトリ内のファイルにのみ適用されます。 5 GB の制限によりプッシュが失敗する場合は、.gitattributes ファイルに LFS で追跡するファイルの拡張子が含まれていることを確認してください。 このファイルを保存してステージングした後、追跡する大きなファイルをステージングしてください。

パス名の長さ

Azure Repos では、Git リポジトリ内のパスの長さを制限するプッシュ ポリシーを適用しており、過度に長いパスを新たに持ち込むプッシュは拒否されます。 最大パス長ポリシーとは異なり、このポリシーを無効にしたり上書きしたりすることはできません。このポリシーは、Microsoft のプラットフォームでサポートされている最大値を強制するものです。

次の制限が適用されます。

  • 合計パス長: 32,766 文字
  • パス コンポーネント長 (フォルダーまたはファイル名): 4,096 文字

このポリシーは、プッシュで新たに持ち込まれたパスにのみ影響します。 既存のファイルを変更する場合は適用されませんが、新しいファイルを作成したり、既存のファイルの名前を変更したり、場所を移動したりする場合は適用されます。

プッシュされるコミットにより、これらの制限を超えるパスが新たに持ち込まれる場合、そのプッシュは拒否され、次のいずれかのエラー メッセージが表示されます。

  • VS403729: The push was rejected because commit '6fbe8dc700fdb33ef512e2b9e35436faf555de76' contains a path, which exceeds the maximum length of 32766 characters.
  • VS403729: The push was rejected because commit 'd23277abfe2d8dcbb88456da880de631994dabb4' contains a path component, which exceeds the maximum length of 4096 characters.