Hlavní navigace

GIT: distribuovaná správa revizí

Karel Žák 21. 4. 2008

Každý, kdo spravuje velké množství obsahu, časem přijde na to, že by potřeboval software, který by mu pomohl nad tímto obsahem držet ochrannou ruku. Velmi často mezi uživatele takových aplikací patří vývojáři, ale hodí se také (ne)pořádným administrátorům. Představíme si velmi silný nástroj GIT.

Na úvod nebude špatné ujasnit si, proč vlastně používat nějaký nástroj na správu změn, a nebo, chcete-li, na správu obsahu (SCM – source code management). Obsahem je v tomto případě většinou myšlen zdrojový kód, prostý text apod.

Asi téměř každý, kdo se vydal na nejistou cestu úpravy nějakého textu, měl chuť mít v záloze pro případ neúspěchu předešlou verzi. Někteří z nás mají i tak neuspořádaný život a projekty, že musejí pracovat na několik různých variantách téhož projektu najednou. A největší masochisté pak zapojují do této činnosti i další nadšence. Výsledkem může být košatě se větvící projekt o mnoha lidech.

Prvně asi každý, kdo je postaven před podobný problém, sáhne po velmi snadném a obvyklém řešení v podobě příkazu cp foo foo.old". Ty tvořivější a tvrdohlavější pak ještě po mv foo.old foo.old2; cp foo foo.old. To je často metoda hodná admina ničícího vlastní /etc, ale nehodí se na dlouhodobější prá­ci.

Časté a podstatně sofistikovanější řešení je nainstalovat CVS. Tedy ono to není zase tak moc přímočaré. Je nutné mít nejen klienta, ale i server. Nějak řešit práva, bezpečnost apod. Důsledkem je, že CVS nacházíme jen tam kde to úsilí za to stojí. Bohužel CVS je opravdu zastaralé a většinou vede lidi a celé projekty k tomu, že přizpůsobují styl své práce a celé své uvažování o projektu tomuto nástroji. (Věřím, že ti co i dnes ráno pazourkem rozdělávali oheň ve své IT jeskyni se s námi o své „nesahejte nám na CVS“ podělí v debatě pod článkem.

Lze to i jinak. Lze nalézt novější nástroje které stejně dobře poslouží na správu několika konfiguračních souborů jako i na udržení projektu o mnoha stovkách souborů a stovkách přispěvatelů s tokem i několika stovek změn za měsíc.

V našem případě budeme mluvit o GITu. Předpokládejme, že čtenář nějaké zkušenosti s nějakým SCM již má.

Motivací pro vznik GITu bylo prázdné místo po z licenčních důvodů dále již nepoužitelném BitKeepru. V té době se pro linuxový kernel nehodil žádný existující nástroj. Inspirací pro GIT byl jiný SCM, a to Monotone. Důkazem toho, že se GIT opravdu povedl, je neustále se zvětšující počet projektů, které ho používají. A už dávno nejde jen o projekty okolo linuxového kernelu.

Asi nejpodstatnější pro pochopení GITu je celkový pohled, jakým se GIT kouká na projekt a jeho správu.

Obecně můžeme svět SCM rozdělit na centralizovaný a distribuovaný. Srdcem centralizovaného modelu je server na kterém se uchovávají veškeré změny. Server je sdílen vývojáři, a ti ho aktivně používají pro svou práci. Na první pohled to vše vypadá jednoduše a snadno použitelně. Ale…

Vše je centrální. Nelze být pro práci s takovým SCM offline. Generování diffů, procházení historie je pomalé. (Ve světě CVS existuje pro tento a pár dalších problémů workaround jménem Subversion.)

Je nutné rozdat vývojářům práva zápisu do centrálního repositáře a zajistit bezpečnost. Práva znamenají nutnost definovat, kdo je a kdo není dostatečně zodpovědný a prověřený. To vede k vytvoření určitých politik okolo projektu.

Protože repositář je sdílený a práce jednoho vývojáře ovlivňuje ostatní, je nutné definovat pravidla, co je a co není vhodné pro „oficiální“ commit.

U větších projektů jsou pak politiky a pravidla zdrojem třenic mezi vývojáři.

Výsledkem je, že nástroje používající centralizovaný model jsou degradovány do pozice pouhého archivačního nástroje, který uchovává, kdo co udělal (a v případe CVS ani to pořádně). Podobný nástroj pak není nástrojem vývojářským. V případě CVS pak vývojář volá příkaz commit až na dokončený a relativně stabilní patch (aby mu nikdo nenadával). Centralizovaný SCM tak minimálně pomáhá s vlastním vývojem a prací na kódu.

Dalším problémem je, že patch může být opravdu rozsáhlý a práce na něm trvat i mnoho dní. Během této doby se kód v centrálním repositáři může změnit a je tedy nutné před finálním umístěním změny do repositáře řešit konflikty. Práce s velkým souborem změn je pak pro zlost.

Řešením je používat nějaký privátní branch a rozdělovat práci na menší části, a do oficiálního repositáře pak umístit až vše najednou. Nepříjemností u centralizovaného modelu je, že i každý váš branch bude na centrálním serveru. Může tak trpět vaše chuť na soukromí a hlavně takový branch se podobně jako celý centralizovaný repositář obtížně používá. (V porovnání se schopnostmi GITu je větvení projektu v CVS téměř nepoužitelné.) Další komplikací je nutnost mít právo zápisu v centrálním repositáři. Výsledkem je, že minimum lidí vůbec tuší k čemu je branch a raději nic takového nepoužívá.

Ve světě open source je celkem běžné, že na kódu příležitostně pracují i lidé kteří nemají zájem věnovat se projektu dlouhodobě, ale jen si chtějí něco ověřit, přidat nějakou vlastnost, opravit nějakou chybu. Centralizovaný SCM je pro ně jen způsob, jak se dostat k aktuálnímu kódu. Nic víc. Nemají právo zápisu v centrálním repositáři a nemohou udělat commit, branch apod. Většinou jsou nuceni vystačit s  diff -u old new.

Distribuovaný model je daleko otevřenější. Nedělá rozdíl mezi vývojáři. Každý má možnost používat naplno všechny vlastnosti daného SCM.

V případě GITu má každý uživatel plnou kopii repositáře daného projektu a může s ní dělat, co se mu zlíbí. Váš lokální repositář může obsahovat i kopie libovolného počtu jiných repositářů v podobě samostatných branchů. Tedy nemusíte následovat jen základní linii daného projektu, ale i různé dočasné větve apod.

Nejzajímavější je pak tok změn (patchů). Ač je to technicky možné, je u GITu neobvyklé sdílet repositáře a rozdávat právo zápisu. Naopak každý má plnou kontrolu nad svým repositářem. Maintainer si sám rozhoduje, v jakém pořadí bude aplikovat změny a čemu se bude věnovat.

Patche se předávají e-mailem nebo se read-only zpřístupní repositář, kde je daná změna uložená a kdo má zájem, si ji stáhne do svého repositáře. V praxi pak projekt má nějaký oficiální repositář, který je read-only (zápis má jen maintainer) a obsahuje to, co se připravuje pro oficiální release. Takový veřejně dostupný repositář si pochopitelně může udělat každý. Podobě lze vytvářet i mirrory apod. Tyto veřejné repositáře se většinou nepoužívají k vlastní práci. Na práci má každý svou repositáře na svém stroji.

Mezi jednotlivými repositáře lze předávat změny pomocí příkazu pull a push. Je, ale běžné, že k maintainerům se posílají patche pomocí e-mailu prostřednictvím nějakého mailing-listu. Vede to k tomu, že patch je prohlédnut vice lidmi a je možné nad ním debatovat. Pro práci s e-mailem má GIT solidní podporu (extrahováni patche z mailu a posláni patche).

V následujícím článku se seznámíme s repositáři.

Našli jste v článku chybu?

21. 4. 2008 9:07

EPP (neregistrovaný)
hm, ale takový urejpaný komentář je taky prudění:-)

21. 4. 2008 18:15

Jo jo, v některých firmách se dosud nepoužívá žádný VCS, natož aby někdo používal něco sofistikovanějšího než CVS. Navíc tam "projektového manažera" dělá člověk, který je ve firmě nejdéle, je nejstarší nebo má nejlepší vztahy se šéfem, ale chybí mu potřebný rozhled a teoretické základy, takže ty projekty se dělají de facto na koleně. Taková je skutečně realita některých menších firem.
DigiZone.cz: Česká televize mění schéma ČT :D

Česká televize mění schéma ČT :D

120na80.cz: Bojíte se encefalitidy?

Bojíte se encefalitidy?

Podnikatel.cz: Přehledná titulka, průvodci, responzivita

Přehledná titulka, průvodci, responzivita

Root.cz: Vypadl Google a rozbilo se toho hodně

Vypadl Google a rozbilo se toho hodně

Lupa.cz: Slevové šílenství je tu. Kde nakoupit na Black Friday?

Slevové šílenství je tu. Kde nakoupit na Black Friday?

Měšec.cz: U levneELEKTRO.cz už reklamaci nevyřídíte

U levneELEKTRO.cz už reklamaci nevyřídíte

Vitalia.cz: To není kašel! Správná diagnóza zachrání život

To není kašel! Správná diagnóza zachrání život

DigiZone.cz: ČT má dalšího zástupce v EBU

ČT má dalšího zástupce v EBU

Vitalia.cz: Chtějí si léčit kvasinky. Lék je jen v Německu

Chtějí si léčit kvasinky. Lék je jen v Německu

Vitalia.cz: Paštiky plné masa ho zatím neuživí

Paštiky plné masa ho zatím neuživí

Podnikatel.cz: Víme první výsledky doby odezvy #EET

Víme první výsledky doby odezvy #EET

Vitalia.cz: Láska na vozíku: Přitažliví jsme pro tzv. pečovatelky

Láska na vozíku: Přitažliví jsme pro tzv. pečovatelky

Podnikatel.cz: 1. den EET? Problémy s pokladnami

1. den EET? Problémy s pokladnami

DigiZone.cz: Sony KD-55XD8005 s Android 6.0

Sony KD-55XD8005 s Android 6.0

Měšec.cz: Finančním poradcům hrozí vracení provizí

Finančním poradcům hrozí vracení provizí

Vitalia.cz: Jsou čajové sáčky toxické?

Jsou čajové sáčky toxické?

Měšec.cz: Zdravotní a sociální pojištění 2017: Připlatíte

Zdravotní a sociální pojištění 2017: Připlatíte

Měšec.cz: Kdy vám stát dá na stěhování 50 000 Kč?

Kdy vám stát dá na stěhování 50 000 Kč?

Lupa.cz: Avast po spojení s AVG propustí 700 lidí

Avast po spojení s AVG propustí 700 lidí

Lupa.cz: Propustili je z Avastu, už po nich sahá ESET

Propustili je z Avastu, už po nich sahá ESET