Správa a ukládání velkých souborů v Gitu

Azure DevOps Services | Azure DevOps Server 2022 – Azure DevOps Server 2019

Git pomáhá udržet nároky na zdrojový kód malé, protože rozdíly mezi verzemi jsou snadno vybrány a kód je snadno komprimován. Velké soubory, které se dobře nekomprimují a které se zcela mění mezi verzemi (například binárními soubory), představují problémy, když jsou uložené v úložištích Git. Rychlý výkon Gitu vychází z možnosti adresovat a přepnout na všechny verze souboru z místního úložiště.

Pokud máte v úložišti velké soubory, které se dají vrátit zpět (například 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ů, výrazně zvyšují dobu rezervace, větvení, načítání a klonování kódu.

Jaké druhy souborů byste měli ukládat v Gitu?

Potvrzení zdrojového kódu, ne závislostí

Když váš tým pracuje s editory a nástroji pro vytváření a aktualizaci souborů, měli byste tyto soubory vložit do Gitu, aby váš tým mohl využívat výhody pracovního postupu Gitu. Do úložiště nepotvádejte jiné typy souborů: například knihovny DLL, soubory knihoven a další závislosti, na kterých váš tým nevytvoří, ale váš kód závisí na nich. Doručujte tyto soubory prostřednictvím správy balíčků do vašich systémů.

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

Nepousílejte výstupy

Nepověřujte binární soubory, protokoly, výstup trasování ani diagnostická data z sestavení a testů. Jedná se o výstupy z vašeho kódu, nikoli ze zdrojového kódu samotného. Sdílejte protokoly a sledujte informace s týmem prostřednictvím nástrojů pro sledování pracovních položek nebo prostřednictvím sdílení souborů týmu.

Ukládání malých, zřídka aktualizovaných binárních zdrojů v Gitu

Binární zdrojové soubory, které se zřídka aktualizují, mají poměrně málo potvrzených verzí. Pokud je velikost souboru malá, nezabírají moc místa. Obrázky pro web, ikony a další menší umělecké prostředky můžou spadat do této kategorie. Je lepší tyto soubory ukládat do Gitu se zbytkem zdroje, aby váš tým mohl používat konzistentní pracovní postup.

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í se menší binární soubor zpomalí výkon větvení častěji než velký binární soubor.

Neposouvejte velké, často aktualizované binární prostředky

Git spravuje jednu hlavní verzi souboru a pak ukládá pouze rozdíly od této verze v procesu známém jako deltifikace. Deltifikace a komprese souborů umožňují Gitu ukládat celou historii kódu do místního úložiště. Velké binární soubory se obvykle mění úplně mezi verzemi a často se komprimují. Tyto soubory je pro Git obtížné spravovat, protože rozdíly mezi verzemi jsou velké.

Git musí uložit celý obsah každé verze souboru a má potíže s úsporou místa prostřednictvím deltifikace a komprese. Uložení úplných verzí těchto souborů způsobí, že se velikost úložiště v průběhu času zvětší. Zvýšená velikost úložiště snižuje výkon větvení, zvyšuje časy klonování a rozšiřuje požadavky na úložiště.

Strategie pro práci s velkými binárními zdrojovými soubory

  • Neposouvejte komprimované archivy dat. Je lepší nekomprimovat soubory a potvrdit rozdílové zdroje. Nechte Git zpracovávat komprimaci dat v úložišti.
  • Vyhněte se potvrzení zkompilovaného kódu a dalších binárních závislostí. Potvrďte zdroj a sestavte závislosti nebo použijte řešení pro správu balíčků k verzi a zadejte tyto soubory do systému.
  • Uložte konfiguraci a další strukturovaná data v rozdílných formátech prostého textu, jako je JSON.

Co je Git LFS?

Pokud máte zdrojové soubory s velkými rozdíly mezi verzemi a častými aktualizacemi, můžete tyto typy souborů spravovat pomocí úložiště Git Large File Storage (LFS ). Git LFS je rozšíření Gitu, které poskytuje data popisovaná velkými soubory v potvrzení do úložiště. Ukládá obsah binárního souboru do samostatného vzdáleného úložiště.

Když v úložišti naklonujete a přepnete větve, Git LFS z tohoto vzdáleného úložiště stáhne správnou verzi. Místní vývojové nástroje transparentně pracují se soubory, jako by byly potvrzeny přímo do vašeho úložiště.

Zaměstnanecké výhody

Výhodou Gitu LFS je, že váš tým může používat známý ucelený pracovní postup Gitu bez ohledu na to, jaké soubory váš tým vytvoří. Služba LFS zpracovává velké soubory, aby zabránila nežádoucímu dopadu na celkové úložiště. Od verze 2.0 navíc Git LFS podporuje uzamykání souborů, které týmům pomáhá při práci na velkých nediferencovatelných prostředcích, jako jsou videa, zvukové soubory nebo herní mapy.

Git LFS je plně podporovaný a bezplatný v Azure DevOps Services. Pokud chcete používat LFS se sadou Visual Studio, potřebujete Visual Studio 2015 Update 2 nebo novější. Stačí postupovat podle pokynů k instalaci klienta, nastavení sledování souborů LFS v místním úložišti a následné nasdílení změn do Azure Repos.

Omezení

Git LFS má některé nevýhody, které byste měli zvážit před přijetím:

  • Každý klient Gitu, kterého váš tým používá, musí nainstalovat klienta Git LFS a porozumět konfiguraci sledování.
  • Pokud klient Git LFS není nainstalovaný a správně nakonfigurovaný, při klonování úložiště se nezobrazí binární soubory potvrzené přes Git LFS. Git stáhne data, která popisují velký soubor (což je to, co Git LFS potvrdí do úložiště) a ne binární soubor. Potvrzením velkých binárních souborů bez nainstalovaného klienta Git LFS dojde k nasdílení binárních souborů do vašeho úložiště.
  • Git nemůže sloučit změny ze dvou různých verzí binárního souboru, ani když obě verze mají společný nadřazený objekt. Pokud na stejném souboru současně pracují dva lidé, musí společně odsouhlasit změny, aby nedošlo k přepsání práce druhého. Git LFS pomáhá tím, že nabízí uzamykání souborů. Uživatelé musí stále dbát na to, aby před zahájením práce vždy stáhli nejnovější kopii binárního prostředku.
  • Azure Repos v současné době nepodporuje použití Secure Shellu (SSH) v úložištích se sledovanými soubory Git LFS.
  • Pokud uživatel přetáhne binární soubor přes webové rozhraní do úložiště, které je nakonfigurované pro Git LFS, binární soubor se potvrdí do úložiště , nikoli ukazatelů, které by byly potvrzeny prostřednictvím klienta Git LFS.
  • I když neexistuje striktní omezení velikosti souboru, volné místo na serveru a aktuální úloha můžou omezit výkon a funkčnost.
  • Časový limit pro jeden nahrání souboru je jedna hodina.

File format

Soubor zapsaný do úložiště pro sledovaný soubor Git LFS obsahuje 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:

Adresa URL GitHubu zahrnutá pouze pro hodnotu verze definuje typ souboru ukazatele LFS. Nejedná se o odkaz na binární soubor.

Známé problémy

Pokud používáte verzi LFS starší než 2.4.0 s Azure DevOps Serverem, vyžaduje se k ověření přes PROTOKOL NTLM místo protokolu Kerberos dodatečný krok nastavení. Tento krok už není nutný od verze LFS 2.4.0 a důrazně doporučujeme upgradovat.