Verzovací systém Git prakticky

Proč verzovací systém a co je vůbec GIT

Určitě jste již někdy pracovali na počítači na rozsáhlejším projektu, jako například zdrojovém kódu programu, diplomové práci, ale třeba i prezentaci. Jeho příprava zabrala delší dobu a možná na něm i potřebovalo kooperovat více lidí současně. Pak jste jistě narazili na problém, kde a jak projekt udržovat a zálohovat. Nikdo nechce po měsíci sepisovaní diplomky začínat od začátku a pravidelné zálohování celého projektu do složek ve stylu Diplomka1, Diplomka2, Diplomka-final, Dimplomka-final-final je značně amatérské, nepřehledné a neefektivní.

Podobný problém trápil i člověka jménem Linus Torvalds , který je kromě mnoha dalších zásluh otcem operačního systému Linux. Aby Pan Torvalds vyřešil problém se správou svého kódu, vyvinul verzovací systém GIT. Sice to nebyl první podobný systém, který existoval, ale díky několika principům, na kterých byl založen, se stal jedním z nejoblíbenějších. Zejména pak protože je distribuovaný (neexistuje centrální úložiště, vše je rychle přístupné lokálně a není potřeba připojení k internetu) a nepracuje s celými soubory, ale pouze se změnami v nich (narozdíl od SVN ). Více o implementačních detailech GITu se lze dočíst na wiki nebo na oficiálních stránkách. A pokud by někdo ani teď nebyl přesvědčen, že GIT je ten pravý nástroj na správu kódu, můžeme zde uvést několik referencí na společnosti, které ho využívají při vývoji softwaru: Google, Microsoft, Facebook, Android, Twitter ...

Instalace GITu a podpůrných nástrojů

Jelikož je GIT linuxový nástroj, ovládá se přes příkazovou řádku. Aby si ale běžný uživatel zpříjemnil práci, vzniklo několik grafických programů, přes které lze s tímto verzovacím systémem pracovat. Velmi oblíbený je například SourceTree od firmy Atlassian. Zejména proto, že je přehledný a jednoduchý. Navíc je dostupný jak pro Windows, tak pro Mac OS (a uživatelé Unix systémů stejně raději využívají příkazovou řádku :-)).

Pro nainstalování stačí pouze stáhnout soubor z oficiálních stránek a nainstalovat běžným způsobem. Během instalace je pouze třeba vyplnit jméno a email, které se budou používat jako náš podpis. A pro zatvrzelé uživatele Linuxu bude vždy ještě přidán konkrétní příkaz, který by danou funkcionalitu provedl v příkazové řádce. Pro vytvoření GIT repozitáře můžeme použít následující příkazy:

  • Debian, Ubuntu: apt-get install git-core
  • Fedora Core, OpenSUSE: yum install git
  • Gentoo: emerge dev-util/git

Vytvoření repozitáře

První krokem je vytvoření nového repozitáře, neboli místa, do kterého budeme commitovat (přidávat) naše data. Jako ukázkový příklad si vytvoříme jednoduchou HTML stránku, kterou budeme upravovat, rozšiřovat a zároveň ji udržovat v našem repozitáři. Pro vytvoření repozitáře v SourceTree stačí v levém horním rohu kliknout na Clone/new, ve vyskočivším okně vybrat záložku Create new repository a zadat název projektu a cestu ke složce, ve které bude umístěn.

Vytvoření repozitáře pomocí příkazové řádky provedeme příkazem git init.

První commit

Nyní, když už máme vytvořený repozitář, můžeme ve stejné složce začít vytvářet obsah, který následně commitem umístíme do repozitáře. Do kořenové složky tedy přidáme testovací soubor index.html. SourceTree okamžitě rozpozná všechny změny v pracovním prostoru našeho projektu a zobrazí je ve spodním okénku Working copy changes. V pravém okénku pak zobrazuje konkrétní změny pro právě vybraný soubor.

Pro uložení těchto změn do našeho repozitáře klikneme na tlačítko Commit v horní listě a objeví se nám vyskakovací okno, viz. obrázek níže. Zde je třeba zadat název commitu, který by měl popisovat, co konkrétně v projektu měníme. V našem případě je to "Vytvoření indexu". Dále je třeba vybrat změny, které chceme přidat do repozitáře. To můžeme udělat buď tak, že přetáhneme požadované soubory ze spodního okénka do horního Staged changes, nebo že jednotlivé soubory vybereme, pokud nad zmíněnými okénky změníme Commit mode na Selected files. V pravém okénku vidíme všechny změny, které budou aplikovány na náš repozitář. Vše potvrdíme stisknutím tlačítka Commit.

Commit přes příkazovou řádku se skládá ze dvou kroků. Prvně je třeba si označit změny, které se mají přidat do repozitáře, pomocí příkazu git add  nebo případně git add .(tečka na konci) pro přidání všech souborů. Následně provedeme samotný commit označených změn pomocí git commit -m "Název commitu". Pokud nepotřebujeme vybírat jednotlivé soubory a commitnout všechny změny v pracovní složce, můžeme použít příkaz git commit -a -m "Název commitu".

Další commit

Pokud nyní provedete další změny v souboru index.html, který je již součástí repozitáře, SourceTree, respektive GIT, nabídne k uložení pouze tyto změny, viz obrázek níže, na kterém je vidět, že byla v souboru přidána hlavička. Velké okno, kde jsou vypsány všechny commity, jak šly po sobě, se nazývá strom a slouží k zpřehlednění repozitáře a k provádění některých operací. Zároveň si zde můžeme všimnout klíčového slova Master u posledního commitu. To značí jméno větve, ve které se právě nacházíme. V současné chvíli máme v repozitáři větev pouze jednu, ale příštím článku si jejich počet rozšíříme a ukážeme si, jak se s nimi pracuje, protože jde o jednu z klíčových vlastností verzovacích systémů.

Pro zobrazení aktuálního stavu repozitáře můžeme použít příkaz git status a pro výpis historie commitů pak git log.

Revert

Revert je další ze základních operací podporovaných GITem. Použijeme ho ve chvíli, kdy chceme zrušit změny provedené na našem projektu a vrátit se k jedné z dříve commitnutých verzí. Toto navíc lze provést i pro jednotlivé soubory. Jak vidíme na obrázku níže, v pracovním adresáři našeho projektu byla v souboru index.html pozměněna hlavička. Pokud se chceme vrátit k verzi s původní hlavičkou, stačí kliknout pravým tlačítkem na pozměněný soubor a zvolit položku Discard (z neznámách důvodů se funkce revert v SourceTree jmenuje discard) a soubor index.html se v pracovní složce obnoví do původní verze. Na tomto příkladu nejde o tak markantní změnu, takže bychom úpravu hlavičky zvládli udělat stejně rychle ručně. Pokud se ale jedná o rozsáhle změny na více místech, je tato funkce k nezaplacení. A mimo jiné s ní lze také obnovit omylem smazané soubory!

Z příkazové řádky je možné revertovat soubory do původního stavu pomocí příkazu git checkout -- Pokud již změny byly uloženy ke commitu, použijeme příkaz git checkout HEAD -- .