Práce s velkými soubory v úložišti Git

služby Azure DevOps | Azure DevOps Server | Azure DevOps Server 2022

Git použijte pro zdrojové soubory, Azure Artifacts pro závislosti a Git LFS pro velké binární soubory, které se často mění. Pokud už úložiště obsahuje velké soubory, pomůže vám tento článek rozhodnout, co se má v Gitu zachovat, co se má přesunout a kdy odebrat binární soubory z historie.

Rozhodněte se, kam se mají jednotlivé soubory ukládat.

Pokud se rozhodnete, co dělat se soubory, které už jsou v úložišti, začněte tady:

  • Udržujte zdrojové soubory, skripty a textové soubory v Gitu.
  • Přesuňte závislosti a opakovaně použitelné balíčky do Azure Artifacts správy balíčků.
  • Git LFS používejte pro velké binární soubory, které se často mění a nejsou dobře rozdělené.
  • Odeberte velké binární soubory z historie repozitáře, pokud už byly do repozitáře přidány a už tam nepatří. Viz Odebrání velkých souborů z úložiště.

Pokud je váš repozitář už velký, před volbou způsobu ukládání zkontrolujte limity repozitáře a pushů. Podívejte se na limity Gitu pro soubor, vložení a cestu, které ovlivňují velké úložiště.

Volba správné možnosti úložiště pro Git, správu balíčků a Git LFS

Tuto tabulku použijte k výběru nejvhodnějšího umístění.

Typ souboru nebo scénář Používání
Zdrojový kód, skripty a textové soubory Git
Závislosti a opakovaně použitelné balíčky správa balíčků Azure Artifacts
Velké binární soubory, které se často mění Git LFS
Azure DevOps Server Git LFS a Kerberos Projděte si pokyny ke Kerberosu v tomto článku i odkazovaný článek na konci.

Git funguje nejlépe pro textové zdrojové soubory a další obsah, který se mění v malých a čitelných přírůstcích.

Velké binární soubory nejsou vhodné pro běžné úložiště Git, protože:

  • Git ukládá rozdíly ve verzích efektivně pro zdrojový kód, skripty a textové soubory.
  • Velké soubory, které se zcela mění mezi verzemi, se nekomprimuje ani nerozlišuje dobře.
  • Velké binární soubory prodlužují dobu klonování, fetchování, vytváření větví a checkoutu.

Pokud do úložiště přidáte velké a nepřístupné soubory, jako jsou binární soubory, zachováte v úložišti úplnou kopii těchto souborů při každém potvrzení změny. Pokud ve vašem úložišti existuje mnoho verzí těchto souborů, dramaticky to zvyšuje dobu potřebnou pro odběr, větvení, přenos dat a klonování vašeho kódu.

Které soubory patří do Gitu?

Použijte nejjednodušší možnost, která odpovídá typu souboru a jak často se mění.

Uchovávejte v Gitu zdrojový kód, ne závislosti

Použijte Git pro soubory, které váš tým upravuje přímo. Udržujte závislosti mimo úložiště a doručujte je prostřednictvím správy balíčků.

  • Vložte zdrojové soubory do Gitu.
  • Ukládejte knihovny DLL, knihovní soubory a další závislosti mimo repozitář.
  • Použijte správu balíčků ke správě verzí a nasazování závislostí.

Správa balíčků při nasazování balíčku seskupí závislosti a nainstaluje soubory do systému. Balíčky jsou verzovány, aby se zajistilo, že kód testovaný v jednom prostředí bude fungovat stejně v jiném prostředí, pokud jsou v prostředích nainstalovány stejné balíčky.

Nepousílejte výstupy sestavení

Git používejte pro zdrojový kód, ne pro výstupy sestavení ani testovací artefakty.

  • Nekomitujte binární soubory, logy, trasovací výstup ani diagnostická data.
  • Sdílejte protokoly a sledujte informace prostřednictvím sledování pracovních položek nebo sdílení souborů týmu.

Ukládání malých binárních souborů v Gitu

Git používejte pro malé binární soubory jenom v případě, že se mění zřídka.

  • Mezi dobré příklady patří webové obrázky, ikony a další malé umělecké prostředky.
  • Uchovávání těchto souborů v Gitu zachovává konzistentní pracovní postup pro tým.

Důležité

I malé binární soubory můžou způsobit problémy, pokud se často aktualizují. Například 100 změn binárního souboru o velikosti 100 kB používá tolik úložiště jako 10 změn binárního souboru o velikosti 1 MB. Vzhledem k četnosti aktualizací menší binární soubor zpomaluje výkon větvení častěji než velký binární soubor.

Vyhněte se velkým, často aktualizovaným binárním prostředkům

Git nemůže efektivně ukládat velké binární soubory, protože se tyto soubory často mění mezi verzemi a obvykle jsou už komprimované.

  • Git ukládá celý obsah každé verze.
  • Velikost úložiště se v průběhu času zvětšuje.
  • Operace klonování, vytváření větví, načítání a checkoutu se zpomalují.

Protože Git musí ukládat celý obsah každé verze, deltifikace a komprese moc nepomáhají. S tím, jak se tyto soubory hromadí, úložiště se zvětší, větvení se zkrátí a časy klonování se zvětší.

Strategie pro velké binární zdrojové soubory

  • Nekomitujte komprimované archivy. Rozbalte data a místo nich commitněte zdrojové soubory, u nichž lze sledovat rozdíly.
  • Vyhněte se potvrzení zkompilovaného kódu a dalších binárních závislostí. Sestavte je nebo je dodejte prostřednictvím systému správy balíčků.
  • Uložte konfiguraci a další strukturovaná data v rozdílných formátech prostého textu, jako je JSON.

Co je úložiště Git Large File (Git LFS)?

Úložiště Git Large File Storage (LFS) použijte pro zdrojové soubory, které se často mění a výrazně se liší mezi verzemi.

Git LFS:

  • Ukládá ukazatele na velké soubory v úložišti místo celého obsahu souboru.
  • Uloží binární obsah do samostatného vzdáleného úložiště.
  • Stáhne správnou verzi při klonování nebo přepínání větví.
  • Udržuje normální pracovní postup Gitu pro velké binární soubory bez přesunu celého obsahu souboru prostřednictvím každé změny klonu a větve.

Výhody Git LFS

Git LFS udržuje pracovní postup Gitu při přesouvání velkého obsahu souboru z hlavního úložiště.

  • Váš tým může dál používat stejný kompletní pracovní postup Gitu.
  • Velké soubory zůstávají mimo historii hlavního úložiště, což pomáhá udržovat úložiště spravovatelné.
  • Uzamčení souborů podporuje sdílenou práci na velkých, nešifrovatelných prostředcích, jako jsou videa, zvuky a herní mapy.

Azure DevOps Services plně podporuje Git LFS a nabízí je zdarma. Pokud chcete použít LFS, nainstalujte klienta Git LFS, nakonfigurujte sledování souborů, které chcete uložit do LFS, a potom nasdílejte změny do Azure Repos.

Pokyny týkající se Azure DevOps Server a protokolu Kerberos najdete v tématu Kerberos a Git LFS.

Omezení Git LFS

Git LFS má stále několik nevýhod, se kterými je třeba počítat:

  • Každý klient Gitu musí nainstalovat klienta Git LFS a porozumět konfiguraci sledování.
  • Pokud klient není nainstalován nebo správně nakonfigurován, při klonování se místo binárního souboru stáhnou data ukazatele.
  • Git nemůže sloučit různé verze binárního souboru, takže spolužáci stále potřebují koordinovat změny.
  • Git LFS poskytuje zamykání souborů, ale uživatelé si před zahájením práce musí stáhnout nejnovější kopii.
  • Azure Repos nepodporuje Secure Shell (SSH) pro úložiště se sledovanými soubory Git LFS.
  • Přetažením binárního souboru do webového rozhraní se do repozitáře uloží samotný binární soubor, nikoli ukazatel LFS.
  • Velké nahrávání může být omezené dostupným volným místem, aktuálním zatížením a limitem nahrávání na jednu hodinu.

Formát souboru Git LFS

Soubor, který zapíšete do úložiště pro sledovaný soubor Git LFS, má několik řádků s párem klíč/hodnota na každém řádku:

version https://git-lfs.github.com/spec/v1
oid a747cfbbef63fc0a3f5ffca332ae486ee7bf77c1d1b9b2de02e261ef97d085fe
size 4923023

Poznámka:

Plánování pro Azure DevOps Server a protokol Kerberos

Pokud používáte Azure DevOps Server a ověřování systému Windows, počítejte při používání Git LFS s protokolem Kerberos. Git LFS 2.10.0 a novější podporuje ověřování protokolem Kerberos.

Pokud potřebujete aktualizovat starší pokyny pro Azure DevOps Server, začněte s Kerberos a Git LFS a souvisejícími pokyny k ověřování pro Azure DevOps Server.