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 に近いリポジトリの場合、最適化プロセスが完了する前に、パック ファイルの内部制限に達する可能性があります。 リポジトリに書き込もうとすると、次のエラー メッセージが表示されます。"Git パック ファイルの制限に達しました。リポジトリの更新中は書き込み操作が一時的に使用できません"。書き込み操作は、ジョブの完了後すぐに復元されます。

プッシュ サイズ

大きなプッシュでは多くのリソースが使用され、サービスの他の部分がブロックまたは遅くなります。 このようなプッシュは、多くの場合、通常のソフトウェア開発アクティビティにはマップされていません。 たとえば、誰かが誤ってビルド出力や VM イメージをチェックインした可能性があります。 このような理由から、プッシュは一度に 5 GB に制限されます。

大きなプッシュが正常である例外が 1 つあります。 リポジトリを別のサービスから Azure Repos に移行すると、1 つのプッシュとして入ってきます。 非常に大きなリポジトリであっても、インポートをブロックする必要はありません。 リポジトリが 5 GB を超える場合は、コマンド ラインではなく Web を使用して リポジトリをインポート する必要があります。

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

Git LFSは、5 GB リポジトリの制限にはカウントされません。 5 GB の制限は、実際のリポジトリ内のファイルに対してのみであり、LFSの一部として格納される BLOB ではありません。 5 GB の制限でプッシュが失敗する場合は、ファイルに、LFSを使用して追跡するファイルの拡張子が含まれていること、および追跡する大きなファイルをステージングする前に、このファイルが保存およびステージングされたことを確認.gitattributesします。

パス名の長さ

Azure Reposには、長すぎるパスを導入するプッシュを拒否することで、Git リポジトリ内のパスの長さを制限するプッシュ ポリシーがあります。 [最大パスの長さ] ポリシーとは異なり、プラットフォームでサポートされる最大値が適用されるため、このポリシーを無効にしたり、別の制限でオーバーライドしたりする方法はありません。

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

  • 合計パス長: 32,766 文字
  • パス コンポーネントの長さ (つまり、フォルダーまたはファイル名): 4096 文字

プッシュで新しく導入されたパスにのみ影響します。 既存のファイルを変更しても、適用されません。 ただし、新しいファイルを作成したり、名前を変更したり、既存のファイルを移動したりする場合は、適用されます。

プッシュされるコミットの一部が制限を超えるパスを導入した場合、プッシュは拒否され、次のいずれかのエラー メッセージが表示されます。

  • 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.