Git
Chapters ▾ 2nd Edition

1.1 Úvod - Správa verzí

Tato kapitola pojednává o tom, jak se systémem Git začít. Nejdříve si vysvětlíme něco o původu nástrojů pro správu verzí, poté se budeme věnovat tomu, jak spustit systém Git ve vašem počítači, a nakonec se podíváme na to, co musíme nastavit, abychom s ním mohli začít pracovat. Na konci kapitoly byste měli rozumět tomu, proč tady Git je, proč byste jej měli používat a měli byste být na jeho používání připraveni.

Správa verzí

Co je to správa verzí a proč by vás měla zajímat? Správa verzí je systém, který zaznamenává změny souboru nebo sady souborů v čase tak, abyste se mohli později k určité verzi vrátit. V této knize jsou jako příklady souborů použity zdrojové texty programů, avšak ve skutečnosti lze správu verzí použít pro libovolný typ souborů.

Pokud jste grafik nebo návrhář webů a chcete uchovávat všechny verze obrázku nebo rozložení stránky (což jistě chtít budete), je rozumné, když budete systém pro správu verzí (VCS z anglického Version Control System) používat. Umožní vám vrátit soubory zpět do předchozího stavu, vrátit celý projekt do předchozího stavu, porovnávat změny provedené v průběhu času, zjistit, kdo naposledy upravil něco, co nyní možná způsobuje problémy, kdo a kdy vytvořil diskutabilní část a mnoho dalšího. Používáte-li systém pro správu verzí a něco se pokazí, nebo přijdete o soubory, můžete se z toho snadno dostat. To vše navíc získáte jen při velmi malém zvýšení režie.

Lokální systémy správy verzí

Mnoho uživatelů realizuje správu verzí tak, že zkopírují soubory do jiného adresáře (pokud jsou chytří, dají adresáři jméno podle data a času). Takový přístup je velmi častý, protože je jednoduchý, ale je také velmi náchylný k chybám. Člověk snadno zapomene, v kterém adresáři se právě nachází, a nedopatřením začne zapisovat do nesprávného souboru, nebo kopírováním přepíše soubory, které přepsat nechtěl.

Aby k těmto potížím nedocházelo, vyvinuli programátoři už dávno lokální systémy pro správu verzí. Byly založeny na jednoduché databázi, která uchovávala všechny změny souborů zařazených do správy revizí.

Diagram lokální správy verzí.
Figure 1. Lokální správa verzí.

Jedním z oblíbených nástrojů pro správu verzí byl systém zvaný RCS, který je ještě dnes distribuován s mnohými počítači. Dokonce i populární operační systém Mac OS X obsahuje po nainstalování vývojářských nástrojů (Developer Tools) příkaz rcs. RCS je založen na uchovávání sad záplat (tj. rozdílů mezi podobami souborů), uložených na disku ve speciálním formátu. Poskládáním záplat může později znovu získat podobu libovolného souboru v libovolném čase.

Centralizované systémy správy verzí

Dalším velkým problémem, s nímž se uživatelé potýkají, je potřeba spolupráce s vývojáři pracujícími na jiných počítačích. Pro vyřešení tohoto problému byly vyvinuty tzv. centralizované systémy pro správu verzí (CVCS z anglického Centralized Version Control System). Tyto systémy, jako je CVS, Subversion a Perforce, používají jeden server, který uchovává všechny verzované soubory, a více klientů, kteří umí soubory z centrálního místa získat. Tento koncept správy verzí byl po dlouhá léta považován za standard.

Centralizovaná správa verzí.
Figure 2. Centralizovaná správa verzí.

Toto uspořádání nabízí mnoho výhod, zejména v porovnání s lokálními systémy pro správu verzí. Všichni například do určité míry vědí, co na projektu dělají ostatní účastníci. Administrátoři mají přesnou kontrolu nad tím, co kdo může dělat. A správa centrálního systému pro správu verzí je mnohem jednodušší, než potýkání se s lokálními databázemi na jednotlivých počítačích.

Avšak i tato koncepce má závažné nedostatky. Tím nejkřiklavějším je kolaps po výpadku jediného místa, kterým je centrální server. Pokud takový server na hodinu vypadne, pak během této hodiny nelze spolupracovat vůbec, nebo přinejmenším není možné ukládat změny ve verzích souborů, na nichž uživatelé právě pracují. A dojde-li k poruše pevného disku, na němž je uložena centrální databáze, a disk nebyl správně zálohován, ztratíte úplně vše — celou historii projektu, s výjimkou souborů aktuálních verzí, jež mají uživatelé v lokálních počítačích. Lokální systémy pro správu verzí trpí stejným problémem. Kdykoliv máte celou historii projektu uloženou na jednom místě, riskujete, že přijdete o vše.

Distribuované systémy správy verzí

V tomto místě přicházejí ke slovu distribuované systémy správy verzí (DVCS z anglického Distributed Version Control System). V distribuovaných systémech pro správu verzí (jako jsou Git, Mercurial, Bazaar nebo Darcs) klient nestahuje pouze nejnovější verzi souborů (tzv. snímek, anglicky snapshot), ale zrcadlí celý repozitář. Pokud v takové situaci dojde ke kolapsu serveru a pokud jej tyto systémy využívaly, můžeme obsah serveru obnovit zkopírováním repozitáře od libovolného uživatele. Každý klon je ve skutečnosti úplnou zálohou všech dat.

Diagram pro distribuovaný systém správy verzí.
Figure 3. Distribuovaný systém pro správu verzí.

Mnoho z těchto systémů navíc bez větších obtíží pracuje i s několika vzdálenými repozitáři, takže můžete v rámci jednoho projektu různým způsobem spolupracovat s různými skupinami lidí najednou. Díky tomu lze zavést několik typů pracovních postupů, které nejsou v centralizovaných systémech možné — jako jsou například hierarchické modely.