Verzování

Byly doby, kdy ani profesionální programátoři verzovací systémy nepoužívaly. Ty už jsou pryč. Naštěstí. V této a následující kapitole se vás pokusím přesvědčit, že i vy chcete verzovat :-).

Motivace

Jestli jste nikdy neslyšeli o verzovacích nástrojích, sem si jistý, že budete nadšení. Jsou to takové „stroje času“, které vás mohou vzít do minulosti a ukázat vám, jak vaše projekty vypadaly.

Verzovací systém je systém na správu verzí. Představte si, že vyvíjíte nějaký program a rozhodnete se, že byste chtěli vylepšit nějakou jeho část. Začnete s úpravou zdrojových kódů a upravujete a upravujete až najednou zjistíte, že je to na prd a že byste se chtěli vrátit k původní verzi. A tak zase upravujete a upravujete …

Pokud jste byli chytří, tak jste si původní verzi někam zkopírovali stranou. Vlastně kdykoliv kdy se chystáte udělat nějakou větší změnu, tak si celý projekt zkopírujete stranou.

Pokud jste ještě chytřejší, použili jste verzovací systém. Ten totiž nezkopíruje stranou celý projekt, ale jen změny od poslední verze, kterou jste uložili.

Verzovací systém vám navíc snadno ukáže, co jste změnili. Stačí mu říct, jaké uložené verze chcete porovnat. Snadno vám ukáže i změny v aktuálně rozpracovaném projektu oproti poslednímu uloženému projektu (nebo jakékoliv jiné verzi projektu).

Verzovací systém toho umí ale víc. Můžete si udělat kopii projektu na jiném počítači a pracovat tak na různých místech. Když pak přijde na věc, verzovací systém dokáže vaši práci z různých míst sloučit (merge) do jedné. To taky nehorázně zjednodušuje práci několika lidí na stejném projektu.

Verzovací systém nemusíte používat jen při vývoji softwaru. Já třeba používám na počítači dva operační systémy - Linux i Windows. Často mezi nimi přepínám a protože jsem na obou systémech potřeboval dokumenty do školy, vložil jsem je do verzovacího systému. V každém OS jsem si udělal kopii a mohl jsem bez starostí pracovat. Verzovací systém se už postaral o to, abych měl vždy přehled o tom, co jsem kde změnil a abych snadno přenesl změny z jednoho adresáře (z jednoho OS) do druhého.

Verzovací systém si pamatuje obsah adresáře a pozná, když něco přidáte nebo smažete. U textových sobourů dokonce dokáže porovnat řádku po řádce a říci vám, co se změnilo. Díky verzovacímu systému už nikdy neztratíte přehled ve své práci.

Verzovací systémy navíc dokážou pracovat přes internet, díky čemuž můžete mít dostupné verze vašeho projektu kdykoliv a odkudkoliv (kde je internet).

Verzování ale není to samé jako zálohování. Verzovací systém ukládá verze do něčeho, čemu se říká repozitář. V repozitáři jsou uloženy všechny verze vašeho verzovaného adresáře. Když o repozitář přijdete, přijdete o možnost „cestovat v čase“. Nemluvě o tom, když máte repozitář na stejném počítači jako váš pracovní adresář s projektem. Pak příjdete o počítač a máte úplně smůlu.

CVS

Není možné psát o verzovacím systému a nezmínit CVS. CVS (Concurrent Versions System) byl svého času bomba. Byl všude a znal ho každý. A kdo neměl projekt v CVS byl považován za zpátečníka. Ještě dnes je v něm (z historických důvodů) spousty projektů.

CVS se vyvinul z nástroje RCS (Revision Control System), který je ještě dnes dostupný v některých linuxových distribucích. V porovnání s CVS RCS neumí skoro nic :-).

Časem se ale ukázalo, že má CVS své mouchy. Předně, CVS verzuje každý soubor zvlášť. Můžete tak snadno cestovat časem v jednom souboru, ale podívat se na to, jak vypadal celý projekt v jeden okamžik, to už bylo složitější. CVS neverzuje přesuny nebo přejmenování souborů (zaregisturje jen smazání starého a narhání nového souboru, ale nepozná, že šlo o přejmenování téhož souboru).

Uživatelské rozhraní taky nebyla zrovna procházka růžovým sadem. Pokud někdy narazíte na nějaký projekt v CVS, doporučuji vám vyzkoušet grafikcý nástroj www.jcvs.org.

Subversion

Subversion

Architektura Subversion

Odpovědí na problémy s CVS se stalo Subversion, též známé jako svn. Jedná se o přímého následníka CVS (na jeho vývoji se podílel i autor původnícho CVS). Uživatelské rozhraní zkrásnělo, všechny nedostatky byly vychytány a z subversion se stal projekt Apache foundation, proto si teď Subversion říká Apache™ Subversion.

Stejně jako CVS se jedná o Open Source a můžete si ho stáhnout, nainstalovat a používat zdarma (je součástí každé dobré linuxové distribuce).

Subversion (ostatně, jako všechny verzovací systémy zmíněné v této kapitole) funguje nejen v Linuxu, ale i na Windows, MAC OSX a bůhví kde ještě.

Subversion je nejpoužívanějším verzovacím systémem. Mnoho open source projektů používá veřejné uložiště sourceforge.net, které používá SVN. Tam můžete zveřejnit své projekty i vy (zdarma).

Já se ale zaměřím hlavně na používání lokálního úložiště (repository), což si myslím bude pro začinající programátory, kteří pracují sami na svých soukromých projektech, nejvýhodnější.

Velkou konkruencí SVN je dnes Git. Možná je jen otázka času, kdy se stane Git číslem 1, viz Git. Důvod, proč jsem se rozhodl popisovat SVN a ne Git je ten, že SVN je jednodušší na pochopení i používání. A navíc, Git má tutoriál v češtině, takže psát o něm by bylo zbytečné.

V příští kapitole se pokusím prakticky ukázat, jak můžete SVN používat. Půjde o takový rychlý minikurz, kurz krok za krokem. Rozhodně tu není dost místa na to, abych popsal všechny úžasnosti, co SVN umí :-).

Git

Git je hlavním zástupcem tzv. DCVS (Distributed Concurrent Versions System). V SVN (a CVS) to funguje tak, že máte jeden repozitář, ze kterého si děláte kopie. Kopie obsahuje pouze poslední, aktuální verzi projektu. Všechny změny pak odesíláte do repozitáře a u vás zůstává stále jen ta nejaktuálnější verze.

V Gitu to funguje tak, že každá kopie repozitáře je vlastně samostatný repozitář. Obsahuje všechny verze. Změny odesíláte „sami k sobě“ a jen když se vám zachce, odešlete změny do nějakého jiného repozitáře.

Výhoda je jasná. Při odesílání změn neodesíláte změny (přes síť) nikam jinam, takže je to mnohem rychlejší. Nevýhoda neexistence centrálního repozitáře je ta, že se brzo snadno ztratíte v tom, kde jste co změnili a kam jste změny poslali a kam ne.

Nic vám ale nebrání vzít nějakou kopii, říci si, že to bude váš centrální repozitář a fungovat podobně jako SVN.

Git má taky něco, čemu se říká „staging area“, což je jakýsi mezikrok mezi změněným souborem a souborem odeslaným do repozitáře. To je další praktická věc, kterou mohou uživatelé SVN závidět.

Výhoda DCVS (distribuovaného …) je v tom, že si práci můžete posílat do svého úložiště, tím si vytvářet lokální verze, a až uznáte za vhodné, poslat změny do úložiště, které používáte se svými kolegy (nějaký ten „centrální“ repozitář.) Nikdy se vám taky nestane, že je repozitář nedostupný (třeba kvůli nefunguící síti), protože repozitář je součástí vašeho projektu.

Pokud vás Git zaujal, můžete si ho nastudovat z Online dokumentace (v češtině). Berte ji ale trochu s rezervou, je to tak trochu reklama na DCVS, takže se snaží zastírat, okolik je Git složitější a přehání jeho výhody v porovnání s cenetralizovanými CVS. A některé informace, které se tam píší o SVN, už jsou zastaralé.

Komentář Hlášení chyby
Vytvořeno: 18.8.2014
Naposledy upraveno: 10.10.2014
Tato stánka používá ke svému běhu cookies, díky kterým je možné monitorovat, co tu provádíte (ne že bych to bez cookies nezvládl). Také vás tu bude špehovat google analytics. Jestli si myslíte, že je to problém, vypněte si cookies ve vašem prohlížeči, nebo odejděte a už se nevracejte :-). Prohlížením tohoto webu souhlasíte s používáním cookies. Dozvědět se více..