Monorepo

Monorepositářčimonorepo(anglicky monorepo) je speciální případrepozitáře, kdy je více logicky nezávislých projektů vyvíjeno a jejich kód uchováván v rámci jednoho repositáře. Protože tento způsob umožňuje snadné sdílení kódu mezi jednotlivými podprojekty, často se jedná o společný vývoj backendu a frontendu jedné aplikace, případně o vývoj několika frontendových klientů jedné aplikace. Na rozdíl od aplikace, kde jsou jednotlivé moduly rozděleny mezi více repositářů a kde může být například testování více modulů napříč repositáři komplikované, je testování aplikace v rámci jednoho repositáře jednodušší.
Nicméně sdílení kódu není nutná podmínka k použití monorepa, vyvíjené podprojekty nemusí spolu kód sdílet vůbec.
Pojem monorepo se často spojuje se jmény největších technologických firem na světě, jako jsouGoogle,Facebook,Microsoft,Airbnb. V těchto případech se monorepo vyznačuje velkým objemem kódu a vysokým počtem změn. Například monorepo Googlu obsahovalo v roce 2015 86TB dat. Konceptuálně se nejedná o nový způsob držení kódu v repositářích, ale byl teprve nedávno pojmenován právě pojmem monorepo.
Pojem monorepo se liší od pojmu monolitická aplikace, která označuje vnitřní architekturu aplikace. Aplikace vyvíjené v rámci monorepa nejsou architektonicky omezeny na monolické aplikace, může se jednat i o jakoukoli jinou architekturu.
Monorepo se vyznačuje následujícími vlastnosti a atributy:
Monorepa se mohou vyznačovat těmito výhodami:
Monorepa mohou přinést potencionální problémy, jejich výskyt není nutností a závisí na konkrétní implementaci monorepositáře:
Jedním z nejznámějších příkladů monorepa je repositář firmy Google, který obsahoval v roce 2015 2 miliardy řádků kódu, přes 85 terabytů dat a dá se tedy považovat za jeden z největších repositářů na světě. Klíčové části kódu, například algoritmus Google Page Rank, byl z důvodu správy přístupu uchováván ve vlastním repositáři. Také zdrojový kód prohlížeče Google Chrome aoperačního systémuAndroid je uchováván ve vlastních repositářích. Za den v tomto repositáři vzniká přes 45 000 commitů. Pro správu a verzování tohoto repositáře používá Google vlastní nástroj nazvaný Piper.
S takto velkými repositáři přichází nutnost myslet na škálovatelnost verzovacích a sestavovacích nástrojů.
Stávající verzovací nástroje nedostačovaly požadavkům technologických firem na takto velké repositáře. Firmy jako Facebook a Microsoft se vydaly cestou stávajících nástrojů, případně si vytvořily vlastní verze těchto nástrojů. Facebook zvolilMerkurial, Microsoft se na druhou straně rozhodl využítGit. Obě firmy jsou zároveň aktivními přispěvateli do těchto nástrojů a zasloužily se o vylepšení některých funkcí, například Facebook násobně zvýšil výkon operací v Merkurialu.
S držením několika projektů přichází otázka, jak při sestavování aplikace sestavit pouze části, ve kterých došlo ke změnám, případně sestavit pouze ty části, které na těchto změněných částech závisejí. K tomu se využívá závislostní graf, ze kterého víme, který projekt na jakém závisí. Je nutné myslet na to, že všechny standardní sestavovací nástroje nemusí v monorepou fungovat správně. Výběr konkrétního nástroje na sestavování projektů z monorepa závisí na potřebách daného projektu, zejména na použitých programovacích jazycích.
Mezi další nástroje, které se v monorepu využívají, patří například Rush, Bolt, Oao, Please.
Některé nástroje pro správu závislostí nabízí podporu monorepa: