GitMagic (1) – úvod
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

GitMagic (1) – úvodGitMagic (1) – úvod

 

GitMagic (1) – úvod

Google       Google       18. 6. 2009       25 302×

Vítejte u úvodního dílu seriálu GitMagic – seriálu, který vás provede některými zákoutími verzovacího systému Git.

Použiju menší analogii k vysvětlení verzování. Pro rozumné vysvětlení si přečtěte článek na Wikipedii.

Hrát si je zábava

Počítačové hry jsem hrál takřka celý život. Naopak verzování jsem začal používat až jako dospělý. Mám takové podezření, že v tom nejsem sám, a právě porovnání těchto dvou věcí může přinést lepší možnost vysvětlení a pochopení problému.

Představte si, že změny v kódu, dokumentu či čemkoli, jsou vlastně hra. Jak uděláte velký pokrok, rádi byste uložili. A uděláte to tím, že kliknete na tlačítko „Uložit“ ve vašem věrném editoru.

Jenže tohle přepíše předchozí verzi. Je to jako ty staré hry, které umožňovaly uložit pouze jednu pozici: můžete si postup uložit, ale již nikdy se nedokážete vrátit ke starší rozehrané pozici. Což je docela škoda, protože předchozí uložení mohlo být zrovna v nějaké zvláště vydařené části hry, kterou byste si rádi jednoho dne zahráli znovu. Nebo hůře je právě rozehraná hra v nevyhratelném stavu a musíte tedy začít odznova.

Verzování

Když soubor upravíte, avšak chcete, aby starší verze byla zachována, můžete kliknout na „Uložit jako…“ a zvolit jiný název souboru, nebo nejdříve původní soubor někam zkopírovat. Taky můžete staré soubory zkomprimovat, abyste ušetřili místo. Toto je primitivní lopotný způsob verzování. Je to již dlouho, co se v tomto počítačové hry zlepšily, mnoho z nich obsahuje ukládání pozic i s časem, kdy k uložení došlo.

Udělejme si ale situaci ještě těžší. Řekněme, že máte pár souborů, které spolu souvisí (jako například kód nějakého projektu nebo webové stránky). Teď když potřebujete udržovat staré verze, musíte vždy zabalit celý adresář. Starat se takhle ručně o staré verze je nepohodlné a časově i prostorově náročné.

U některých počítačových her se uložená pozice opravdu skládá z celého adresáře plného souborů. Avšak hráči to může být jedno a hra mu pouze ukazuje hezké rozhraní pro spravování různých verzí tohoto adresáře.

Verzovací systémy se v tomto nijak neliší. Všechny mají hezké rozhraní ke spravování takového adresáře. Můžete kdykoli uložit stav adresáře a poté jakýkoli z předchozích stavů opět vyvolat. Narozdíl od her jsou taky verzovací systémy chytré v tom, jak ušetřit zabrané místo. Obvykle se od verze k verzi změní jen pár souborů, a to ne nijak výrazně – ukládání změn, a ne celých souborů, šetří místo.

Verzování distribuovaně

Teď si ale představte velmi složitou počítačovou hru. Dokonce tak těžkou k dokončení, že se mnoho zkušených hráčů z celého světa rozhodne spojit a sdílet své uložené hry, aby se konečně dobrali vítězství. Speedrun hry mohou být příkladem: hráči se specializují na různá kola hry a spolupracují, aby předvedli úžasné výsledky.

Jak byste vytvořili takový systém, kde by hráči mohli jednoduše získávat uložené hry ostatních? A nahrávat nové?

Dříve každý projekt používal centralizované verzování. Na jednom serveru byly uloženy všechny pozice, nikde jinde, a každý hráč u sebe měl jen pár uložených pozic. Pokud hráč chtěl ve hře nějak pokročit, stáhnul si poslední uloženou hru z hlavního serveru, chvíli hrál, uložil hru a nahrál ji zpět na server, aby mohli hrát zase další.

Ale co když hráč chtěl získat starší verzi hry? Možná že současný stav byl nevyhratelný, protože někdo zapomněl vzít objekt v kole číslo tři, tudíž by se hodila poslední uložená pozice, ze které může být hra dokončena. Nebo by někdo chtěl porovnat uložené hry, aby bylo vidět, kolik toho který hráč udělal.

Existuje hodně důvodů, proč chtít vidět starší verzi, ale výsledek je stejný – je potřeba se zeptat centrálního serveru pro každou starší verzi. A čím více jich je potřeba, tím více se musí se serverem komunikovat.

Nová generace verzovacích systémů, do které patří i Git, je známa jako generace distribuovaných verzovacích systémů a tyto systémy mohou být brány jako zobecnění těch centralizovaných. Když hráči stahují z hlavního serveru, získávájí každou uloženou pozici, nikoli jen tu poslední. Je to, jako by byli zrcadlem hlavního serveru.

Tato první operace naklonování hlav­ního serveru může být náročná, zvláště pokud má projekt velkou historii. Ale dlouhodoběji se vyplatí. Bezprostřední výhodou je, že pokud je potřeba starší verze, není nutno již více komunikovat s hlavním serverem.

Hloupá pověra

Častý omyl některých je, že distribuované verzovací systémy jsou nepatřičné pro projekty, které potřebují mít oficiální centrální repozitář. Jen těžko by mohli být dál od pravdy. Vyfotografovat někoho nezpůsobí, že duše té osoby bude ukradena. Stejně tak naklonování oficiálního repozitáře nezmenší jeho význam.

Dobrý první odhad je to, že cokoli dokáže centralizovaný verzovací systém, dokáže dobře navrhnutý distribuovaný verzovací systém lépe. Síťové zdroje jsou prostě dražší než zdroje lokální. Jak uvidíme později, i distribuovaný přístup má své nedostatky.

Malý projekt může potřebovat pouze zlomek z funkcí, které distribuovaný systém nabídne. Ale říkat, že by jeden měl použít systém, u kterého využije všechny funkce, pokud je projekt malý, je jako říkat, že by se pro počítání s malými čísly měly používat římské číslice.

Navíc projekt může přerůst vaše původní očekávání. Používat Git od začátku je jako nosit s sebou švýcarský armádní nůž (Swiss army knife), i když s ním třebas jenom budete otvírat lahve. Až jednou budete zoufale potřebovat šroubovák, budete rádi, že máte něco víc než jen otvírák.

Konflikty slučování

Teď začíná být naše analogie s počítačovou hrou již trochu krátká. A proto uvažujme opět změny v nějakém dokumentu.

Předpokládejme, že Alice vloží na začátek souboru nový řádek a Bob jeden řádek přidá na konec. Oba nahrají svoje změny. Většina systémů automaticky usoudí, co udělat: přijme obě změny a sloučí je, takže obě úpravy – Alicina i Bobova – jsou použity.

Nyní si představte, že Alice a Bob udělali různé změny na stejné řádce souboru. Pak už není možné pokračovat bez lidského zásahu. Ten z nich, kdo zkusí svoje úpravy nahrát jako druhý, je informován o tzv. „konfliktu slučování“ a musí si vybrat jednu nebo druhou změnu, nebo řádek přepsat úplně jinak.

Mohou nastat ještě složitější situace. Verzovací systémy řeší jednodušší případy samy a nechávají ty těžké pro lidi. Obvykle je jejich chování nastavitelné.

Tento článek je překladem první kapitoly – Introduction – z GitMagic od Bena Lynna. V další kapitole se můžete těšit na některé základy práce s Gitem.

×Odeslání článku na tvůj Kindle

Zadej svůj Kindle e-mail a my ti pošleme článek na tvůj Kindle.
Musíš mít povolený příjem obsahu do svého Kindle z naší e-mailové adresy kindle@programujte.com.

E-mailová adresa (např. novak@kindle.com):

TIP: Pokud chceš dostávat naše články každé ráno do svého Kindle, koukni do sekce Články do Kindle.

Hlasování bylo ukončeno    
0 hlasů
Google
(fotka) Jakub KulhanAutor momentálně studuje na osmiletém gymnáziu v Kralupech nad Vltavou. Programování se věnuje od 11 let, kdy ho poprvé uchvátila možnost "mít vlastní stránky". Nakrátko poté objevil PHP a už se to s ním "vezlo". Webové aplikace zůstaly jeho hlavní doménou, ale ve svém volném čase probádává nejrůznější zákoutí světa programování, programovacích jazyků a všeho kolem nich.
Web    

Nové články

Obrázek ke článku Stavebnice umělé inteligence 1

Stavebnice umělé inteligence 1

Článek popisuje první část stavebnice umělé inteligence. Obsahuje lineární a plošnou optimalizaci.  Demo verzi je možné použít pro výuku i zájmovou činnost. Profesionální verze je určena pro vývojáře, kteří chtějí integrovat popsané moduly do svých systémů.

Obrázek ke článku Hybridní inteligentní systémy 2

Hybridní inteligentní systémy 2

V technické praxi využíváme často kombinaci různých disciplín umělé inteligence a klasických výpočtů. Takovým systémům říkáme hybridní systémy. V tomto článku se zmíním o určitém typu hybridního systému, který je užitečný ve velmi složitých výrobních procesech.

Obrázek ke článku Jak vést kvalitně tým v IT oboru: Naprogramujte si ty správné manažerské kvality

Jak vést kvalitně tým v IT oboru: Naprogramujte si ty správné manažerské kvality

Vedení týmu v oboru informačních technologií se nijak zvlášť neliší od jiných oborů. Přesto však IT manažeři čelí výzvě v podobě velmi rychlého rozvoje a tím i rostoucími nároky na své lidi. Udržet pozornost, motivaci a efektivitu týmu vyžaduje opravdu pevné manažerské základy a zároveň otevřenost a flexibilitu pro stále nové výzvy.

Obrázek ke článku Síla týmů se na home office může vytrácet. Odborníci radí, jak z pracovních omezení vytěžit maximum

Síla týmů se na home office může vytrácet. Odborníci radí, jak z pracovních omezení vytěžit maximum

Za poslední rok se podoba práce zaměstnanců změnila k nepoznání. Především plošné zavedení home office, které mělo být zpočátku jen dočasným opatřením, je pro mnohé už více než rok každodenní realitou. Co ale dělat, když se při práci z domova ztrácí motivace, zaměstnanci přestávají komunikovat a dříve fungující tým se rozpadá na skupinu solitérů? Odborníci na personalistiku dali dohromady několik rad, jak udržet tým v chodu, i když pracovní podmínky nejsou ideální.

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý