Sdílet prostřednictvím


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

Azure DevOps Services | Azure DevOps Server | Azure DevOps Server 2022 | Azure DevOps Server 2020

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é nelze snadno porovnat (například binární soubory), zachovává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.

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

Nahrajte zdrojový kód, ne závislosti

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

Nezavádějte binární soubory, protokoly, výstup trasování ani diagnostická data ze 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 trasujte informace s týmem prostřednictvím nástrojů pro sledování pracovních položek nebo prostřednictvím sdílení souborů v 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.

Nezavazujte velké, často aktualizované binární soubory

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

  • Nenahrávejte komprimované archivy dat. Je lepší dekomprimovat soubory a přidat do verzovacího systému zdroje, které lze porovnávat. 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 verzování a dodání těchto souborů do vašeho 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 ke správě těchto typů souborů použít Git Large File Storage (LFS). Git LFS je rozšíření Gitu, které poskytuje data, která popisují velké soubory v commitu ve vašem úložišti. 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ě.

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 je plně podporovaný a bezplatný ve službě 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 klientského, nastavení sledování souborů v místním úložišti LFS 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ý váš tým používá, musí nainstalovat klienta Git LFS a pochopit jeho konfiguraci sledování .
  • Pokud není klient Git LFS nainstalovaný a správně nakonfigurovaný, při klonování úložiště se binární soubory potvrzené prostřednictvím Git LFS nezobrazí. Git stáhne data, která popisují velký soubor (což je to, co Git LFS potvrdí do úložiště) a ne binární soubor. Provedením commitu velkých binárních souborů bez nainstalovaného Git LFS klienta se binární soubor nahraje 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é by měli dbát na to, aby před zahájením práce vždy stáhli nejnovější kopii binárního souboru.
  • 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 je do úložiště potvrzen, nikoli ukazatele, 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.

Formát souboru

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, je k ověření prostřednictvím protokolu NTLM místo protokolu Kerberospotřeba další krok instalace. Tento krok už není nutný od verze LFS 2.4.0 a důrazně doporučujeme upgradovat.