Limites do Git

Serviços de DevOps do Azure

Impomos limites de recursos aos repositórios Git no Azure Repos para garantir a fiabilidade e disponibilidade de todos os clientes. Ao manter os tamanhos de 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 dos Serviços de DevOps do Azure. Além disso, impomos limites ao tamanho total de repositórios, pushes 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 o repositório abaixo de 10 GB para um desempenho ideal. Se seu 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 ficheiros 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 o Git LFS (Large File Storage), que foi projetado para lidar com arquivos grandes de forma eficiente, 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

Grandes empurrões 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 compilação ou imagens de VM. Portanto, os pushes são limitados a 5 GB de cada vez.

Há uma exceção em que grandes pushes são normais: migrar um repositório de outro serviço para o Azure Repos. Essas migrações chegam como um único empurrão, 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 de push para objetos LFS

O Git LFS não conta para o limite de repositório de 5 GB. O limite de 5 GB aplica-se apenas 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, não pode desativá-la ou substituí-la, uma vez que impõe os valores máximos suportados pela nossa plataforma.

São impostos os seguintes limites:

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

Esta 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 alguma confirmação que está sendo enviada por push introduz caminhos que excedem esses limites, a transferência é rejeitada 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.