Videa Blog

Git - proč se jej učit v příkazové řádce

Václav Makeš  

Tento článek je určen pro začátečníky, kteří se chystají začít učit verzovací systém Git. Popisuje proč se vyplatí používat Git v příkazové řádce namísto v grafickém prostředí externích SW či IDE.

Ještě před tím, než se programátor začne učit s Gitem, vybírá či nechává náhodě volbu jak s Gitem bude pracovat. To, jak začne, může ovlivnit dále jeho práci. Chci vám ukázat, že se vyplatí používat Git v příkazové řádce namísto všech ostatních GUI aplikací. Důvody jsem rozdělil do několika bodů seřazených podle důležitosti pro začátečníky.

Dokumentace i návody jsou psané pro příkazovou řádku

Co se týče dokumentace samotné, lze už z principu předpokládat, že je psána v základní podobě, jíž Git nabízí, tedy v příkazech pro CLI. Návody a články na internetu jsou převážně psány stejně. Učením se z příkazové řádky tedy odstraníte mezikroky, které by tvořily pokusy o aplikování příkazů v rámci vašeho GUI.

Vyhledatelnost řešení

Pokud hledám řešení nějakého problému, tak jej na Stack Overflow velmi často dostanu. Ovšem většina těchto řešení je zapsána v příkazech. Pokud používám denně CLI, tak není problém příkaz nejen použít, ale zároveň se z něj i něco naučit.

Ukažme si příklad

Při práci na pracovní stanici (přenastavoval jsem Ansible) se mi omylem povedlo v projektovém adresáři změnit práva k souborům. Jelikož jsem měl nezaverzované úpravy na projektu, chtěl jsem resetovat pouze nastavení práv do původního nastavení. Změny v souborech, tedy moji rozdělanou práci, jsem chtěl ponechat. Jak toto udělat v GUI? Popravdě vůbec netuším, odhaduji, že to rychlou cestou nelze provést. Na Stack Overflow jsem řešení našel ihned, bylo napsáno formou příkazu:

git diff -p -R --no-color \
    | grep -E "^(diff|(old|new) mode)" --color=never  \
    | git apply

Ohromení okolí

Čím dál více lidí nějakou část pracovní doby s počítačem pracuje. Tudíž jsou na programy s GUI poměrně zvyklí. Ovšem práce s příkazovým řádkem bývá obdivována jako magie znalých vývojářů. Neplatí to vždy jen pro běžné lidi mimo IT. Stává se mi, že se diví i vývojáři programující řadu let.

Rozšiřitelnost a přenositelnost

Podívejme se na Git ve dvou různých pohledech.

Prvním z nich je spolupráce s dalšími nástroji. Může jimi být například CI server, privátní repositář hostovaný na vlastním serveru a podobně. Ke konfiguraci se hodí umět pracovat s příkazy Gitu. Například vytvoření prázdného repositáře při nastavování pro deploy může vypadat takto:

cd /var/projects/
mkdir project-name
cd project-name
git init --bare

Druhým pohledem je používání Gitu s ostatními nástroji příkazové řádky. Například: jak rychle zjistit, kolik commitů řeší fixování chyb? Předpokládejme, že commit opravující chybu má v názvu "fix". Využijeme příkazu wc, jenž umí spočítat počet řádků.

git log --oneline | wc -l  # počet všech commitů
git log --oneline | grep -i "fix" | wc -l  # počet commitů řešících opravy chyb

Funkcionalita

CLI podporuje naprosto všechnu funkcionalitu Gitu. Oproti tomu funkcionalitu v GUI bychom mohli zjednoduše shrnout tak, že obsahuje jen to, k čemu vývojáři GUI softwaru udělali "tlačítko". Tudíž nejsem limitován funkcionalitou a vše co přečtu v článcích o Gitu mohu použít.

Reprodukovatelnost

Velmi často se hodí opakovat sekvenci kroků. Může jít o to, že posíláte své řešení problému kolegovi či skriptujete na serveru. Příkazy můžete zapsat v textové podobě například do spustitelného souboru a ten poslat kolegovi do Slacku, všem programátorům do Stack Overflow či třeba zaverzovat u projektu a používat na produkci.

Univerzálnost

Práce v CLI je stejná v každém OS, ale i v každé technologii. Je jedno jestli právě programujete aplikační kód v PhpStormu, řešíte PL/pgSQL procedury v DataGripu nebo si připravujete diplomovou práci v LaTeXu. Zaverzujete cokoliv je potřeba.

Kde bych GUI použil?

A abyste si nemysleli, že jsem na GUI úplně zanevřel, existuje use-case, kde mi dává GUI smysl. Jsou jím diffy. Zkoumání rozdílů v GUI, minimálně pro začátek, je o mnoho přehlednější.

Nejčastěji používáným GUI právě pro zkoumání rozdílů jsou služby typu GitHub, BitBucket a GitLab. Jejich výhodou je jejich webové rozhraní a tudíž možné rychlé vyzkoušení. Podívejte se na ukázku z webu pehapkari.cz.

Zápory použití příkazové řádky

Abych byl spravedlivý, musím zmínit zápor práce s Gitem v příkazové řádce. Je jím určitá složitost a nekonzistence CLI rozhraní. To způsobuje minimálně ze začátku nepříjemné stavy, kdy člověk používá jeden a ten samý příkaz na několik různých činností. Například použití příkazů checkout a reset.

Příklad složitějšího rozhraní

Nekonzistence rozhraní je kupříkladu vidět při mazání větví oproti smazání sledovaných repositářů (například vzdálené repositáře na GitHubu). Podívejte se na ukázku:

git branch -d nazev-vetve  # odstraní lokální začleněnou větev
git branch -D nazev-vetve  # odstraní lokální jakoukoliv větev
git remote remove origin   # odstraní sledování repositáře

Kladných důvodů bylo uvedeno mnoho. Napadá vás další? Nebo máte přesvědčivé argumenty pro nepoužívání Gitu v CLI? Napište do diskuze pod článkem!