Limites do Git

Azure DevOps Services

Nós impomos limites de recursos aos repositórios Git no Azure Repos para garantir a confiabilidade e a disponibilidade para todos os clientes. Ao manter os tamanhos dos dados e o número de pushes razoáveis, você pode esperar uma melhor experiência geral com o Git.

O Git participa da limitação de taxa, junto com o restante do Azure DevOps Services. Além disso, impomos limites ao tamanho total dos repositórios, pushs e ao comprimento dos caminhos de arquivos e diretórios.

Tamanho do repositório

Os repositórios não devem ter mais de 250 GB. Para recuperar o tamanho do repositório, execute git count-objects -vH em um prompt de comando e procure a entrada chamada "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

Recomendamos manter seu repositório abaixo de 10 GB para otimizar o desempenho. Se o repositório exceder esse tamanho, considere usar Git-LFS, Scalar ou Azure Artifacts para gerenciar seus artefatos de desenvolvimento.

O Azure Repos reduz continuamente o tamanho geral e aumenta a eficiência dos repositórios Git, consolidando arquivos semelhantes em pacotes. Para repositórios próximos a 250 GB, o limite interno de arquivos de pacote pode ser atingido antes que o processo de otimização seja concluído. Quando esse limite é atingido, os usuários que tentam gravar no repositório veem a seguinte mensagem de erro: "O limite de arquivos do pacote Git foi atingido, as operações de gravação estão temporariamente indisponíveis enquanto o repositório é atualizado". As operações de gravação são restauradas imediatamente após a conclusão do trabalho de otimização.

Os arquivos não devem ter mais de 100 MB. Esse limite ajuda a garantir o desempenho ideal e a confiabilidade do repositório Git. Arquivos grandes podem retardar significativamente as operações do repositório, como clonagem, busca e envio de alterações. Se você precisar armazenar arquivos grandes, considere usar Git LFS (Large File Storage), que foi projetado para lidar com arquivos grandes com eficiência, armazenando-os fora do repositório principal e mantendo apenas referências a eles dentro do repositório. Essa abordagem ajuda a manter o desempenho e a capacidade de gerenciamento do seu repositório Git.

Tamanho do push

Os pushs grandes consomem recursos significativos, bloqueando ou retardando outras partes do serviço. Esses pushes geralmente não se alinham com as atividades típicas de desenvolvimento de software e podem incluir itens como saídas de build ou imagens de VM. Portanto, os pushes são limitados a 5 GB por vez.

Há uma exceção em que grandes pushes são normais: a migração de um repositório de outro serviço para o Azure Repos. Essas migrações são feitas como um único push, e não pretendemos bloquear as importações, mesmo para grandes repositórios. Se o repositório exceder 5 GB, você deverá usar a Web para importar o repositório em vez da linha de comando.

Tamanho do push para objetos LFS

O Git LFS não conta para o limite de repositório de 5 GB. O limite de 5 GB se aplica somente a arquivos no repositório real, não a blobs armazenados com o LFS. Se você encontrar pushes com falha devido ao limite de 5 GB, certifique-se de que seu .gitattributes arquivo inclua as extensões dos arquivos que você pretende rastrear com o LFS. Certifique-se de que esse arquivo seja salvo e preparado antes de preparar os arquivos grandes a serem rastreados.

Comprimento do caminho

O Azure Repos impõe uma política de push que limita o comprimento dos caminhos em um repositório Git rejeitando pushes que introduzem caminhos excessivamente longos. Ao contrário da política de comprimento máximo do caminho, você não pode desabilitar ou substituir, pois ela impõe os valores máximos suportados por nossa plataforma.

Os seguintes limites são impostos:

  • Comprimento total do caminho: 32.766 caracteres
  • Comprimento do componente do caminho (nome da pasta ou do arquivo): 4.096 caracteres

Essa política afeta apenas os caminhos recém-introduzidos em um push. Ele não se aplica se você alterar um arquivo existente, mas se aplica se você criar um novo arquivo, renomear ou mover um existente.

Se qualquer commit que estiver sendo enviado introduzir caminhos que excedam esses limites, o envio será rejeitado com uma das seguintes mensagens de erro:

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