Limity usługi Git

Usługa Azure DevOps Services

W usłudze Azure Repos nałożono kilka limitów zasobów na repozytoria Git. Naszym celem jest zapewnienie niezawodności i dostępności dla wszystkich klientów. Ponadto utrzymanie ilości danych i liczby wypchnięć na rozsądnym poziomie pozwala oczekiwać, że środowisko usługi Git będzie działać lepiej.

Usługa Git uczestniczy w ograniczaniu szybkości wraz z resztą Azure DevOps Services. Ponadto nakładamy limity całkowitego rozmiaru repozytoriów, wypchnięć i długości ścieżek plików i katalogów.

Rozmiar repozytorium

Repozytoria nie powinny być większe niż 250 GB. Aby pobrać rozmiar repozytorium, wykonaj polecenie "git count-objects -vH" w wierszu polecenia i poszukaj wpisu o nazwie "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

Zalecamy przechowywanie repozytorium poniżej 10 GB w celu uzyskania optymalnej operacji. Jeśli repozytorium przekracza ten rozmiar, rozważ użycie usługi Git-LFS, skalarnej lub usługi Azure Artifacts do refaktoryzacji artefaktów programowania.

Azure Repos stale zmniejsza ogólny rozmiar i zwiększa wydajność repozytoriów Git, konsolidując podobne pliki w pakiety. W przypadku repozytoriów zbliżających się do 250 GB można osiągnąć wewnętrzny limit plików pakietów przed zakończeniem procesu optymalizacji. Każdy użytkownik próbujący zapisać w repozytorium widzi następujący komunikat o błędzie: "Osiągnięto limit plików pakietu Git, operacje zapisu są tymczasowo niedostępne podczas aktualizowania repozytorium". Operacje zapisu zostaną przywrócone natychmiast po zakończeniu zadania.

Rozmiar wypychania

Duże wypychania wykorzystują dużo zasobów, blokując lub spowalniając inne części usługi. Takie wypychania często nie mapują na normalne działania programistyczne. Na przykład ktoś mógł przypadkowo zaewidencjonować dane wyjściowe kompilacji lub obraz maszyny wirtualnej. Z tych powodów i nie tylko wypychania są ograniczone do 5 GB naraz.

Istnieje jeden wyjątek, w którym duże wypychania są normalne. Podczas migracji repozytorium z innej usługi do Azure Repos jest ono wprowadzane jako pojedyncze wypychanie. Nie zamierzamy blokować importu, nawet w przypadku bardzo dużych repozytoriów. Jeśli repozytorium jest większe niż 5 GB, musisz użyć sieci Web do zaimportowania repozytorium zamiast wiersza polecenia.

Rozmiar wypychania dla obiektów LFS

Usługa Git LFS nie jest wliczana do limitu repozytorium 5 GB. Limit 5 GB dotyczy tylko plików w rzeczywistym repozytorium, a nie obiektów blob przechowywanych w ramach LFS. W przypadku niepowodzenia wypchnięć do limitu 5 GB sprawdź, czy .gitattributes plik zawiera rozszerzenia plików, które mają być śledzone przy użyciu LFS i czy ten plik został zapisany i przygotowany przed przygotowaniem dużych plików do śledzenia.

Długość ścieżki

Azure Repos ma zasady wypychania, które ograniczają długość ścieżek w repozytorium Git przez odrzucenie wypchnięć, które wprowadzają zbyt długie ścieżki. W przeciwieństwie do zasad maksymalnej długości ścieżki nie ma możliwości wyłączenia lub zastąpienia tych zasad z innym limitem, ponieważ wymusza maksymalną możliwą wartość obsługiwaną przez naszą platformę.

Istnieją dwa wymuszone limity:

  • Całkowita długość ścieżki: 32 766 znaków
  • Długość składnika ścieżki (czyli nazwa folderu lub pliku): 4096 znaków

Ma to wpływ tylko na nowo wprowadzone ścieżki w wypychaniu. Jeśli zmienisz istniejący plik, nie będzie on stosowany. Ale jeśli tworzysz nowy plik lub zmieniasz nazwę lub przenosisz istniejący, ma to zastosowanie.

Jeśli niektóre z wypchniętych zatwierdzeń wprowadzają ścieżki, które przekraczają limity, wypychanie zostanie odrzucone przy użyciu jednego z następujących komunikatów o błędach:

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