Git SCM (Source Code Management, čiže správca zdrojového kódu) je slobodný softvér s otvoreným zdrojovým kódom, ktorý slúži na distribuovanú správu revízií zväčša obyčajných textových súborov (Distributed Version Control System, čiže DVCS). Ak potrebujete jednoduchý, no pritom sofistikovaný, rýchly a spoľahlivý spôsob uchovávania verzií súborov offline aj online, Git je pravdepodobne tá najlepšia voľba pre malé ako aj pre veľké projekty.
História systému Git
Nie je presne určené, čo vlastne názov “Git” znamená. Priamo v zdrojovom kóde systému Git sa však píše, že si môžeme vybrať podľa nálady: Ide o 3 náhodne vybraté písmená, ktoré sa dobre vyslovujú, a zároveň v tomto poradí nie sú používané v inom UNIXovom príkaze. Môže ísť aj o slangový výraz pre jednoduchého až hlúpeho človeka, ak sme nahnevaní. Ak naopak máme dobrú náladu, Git môže znamenať “Global Information Tracker”. No a keď sa nám nálada výrazne zhorší, poslúži význam, citujeme, “Goddamn idiotic truckload of sh*t”.
Autorom pôvodného návrhu systému Git je otec linuxového jadra Linus Torvalds. Správu nad celým projektom však už na začiatku prebral Junio Hamano. Pri vývoji linuxového jadra sa komunita v roku 2002 dohodla, že ako SCM systém bude používať neslobodný BitKeeper. S týmto systémom (a ani s ostatnými vtedajšími SCM systémami) komunita spokojná nebola. Linus Torvalds preto v roku 2005 navrhol vlastný SCM systém na správu zdrojového kódu linuxového jadra a nazval ho Git.
Dnes sa Git používa ako nepísaný štandard, ak ide o udržiavanie verzií súborov na jednom počítači, či na viacerých počítačoch naraz (napr. cez služby ako GitHub alebo GitLab). Vysokú kvalitu systému Git jeho používaním potvrdzujú aj tie najväčšie spoločnosti ako Adobe, Amazon, Facebook, Google, IBM, Microsoft alebo Netflix. Jeho znalosť aspoň na základnej úrovni sa bežne vyžaduje už od začínajúcich programátorov. Aj keď Git najčastejšie využívajú softvéroví vývojári, pokojne ho môže použiť ktokoľvek, kto pracuje s prakticky ľubovoľnými formátmi súborov.
Výhody systému Git
Git navrhol tvorca jadra operačného systému Linux, ktorý spolu s komunitou potreboval, aby SCM spĺňal určité základné náležitosti. Tieto náležitostí a vlastnosti z nich vyplývajúce tvoria výhody systému Git:
- Rýchlosť a jednoduchosť – už od začiatku bol Git navrhnutý a vyvíjaný tak, aby zmena obsahu spravovaných súborov aj vo veľkom projekte zabrala iba niekoľko sekúnd. To je dosiahnuté samotnou rýchlosťou systému Git, ale tiež jednoduchými príkazmi na zapísanie zmeny obsahu súborov a údajov pre SCM.
- Nelineárnosť a distributívnosť – keďže linuxové jadro bolo a je vyvíjané tisíckami programátorov z celého sveta, je veľmi dôležité zabezpečiť, aby si každý vývojár mohol stiahnuť kompletnú históriu zmien (distribuovaný repozitár v priečinku .git) a pracovať s ňou offline na svojom počítači bez potreby pripojenia na server. Zmeny, ktoré vývojár vo svojej offline verzii urobí, pošle do testovacej vetvy projektu (čiže ide o nelineárny vývoj). Neovplyvní teda stabilitu hlavnej vetvy (origin/main), no aj tak pošle svoj návrh na úpravu, ktorý správca skontroluje a (ne)pridá do hlavnej vetvy.
- Bezpečnosť a spoľahlivosť – systém Git každú zapísanú zmenu súborov (commit) označí jedinečným identifikátorom, ktorý vypočíta na základe kryptografického algoritmu SHA-1. Takýmto spôsobom Git chráni obsah súborov a históriu zmien pred nechcenými zmenami od autora alebo od tretej strany. Vďaka systému Git je teda takmer nemožné urobiť chybu z nepozornosti, pod vplyvom únavy, či na základe iných externých faktorov.
- Flexibilita a akceptácia – systém Git ponúka komplexný súbor profesionálnych nástrojov, vďaka ktorým je možné zvládnuť správu aj veľmi zložitých projektov. A keďže sa Git osvedčil veľkým spoločnostiam pri dôležitých projektoch, postupne si získal dobré meno a prirodzene sa stal všeobecne akceptovaným nástrojom. Git však tiež môžeme použiť iba lokálne na jednom počítači, s ktorým pracuje len jeden človek spravujúci napr. verzie svojich súkromných poznámok.
- Otvorenosť a multiplatformnosť – systém Git je slobodný softvér s otvoreným zdrojovým kódom, ktorý vyvíja komunita veľmi skúsených programátorov z celého sveta už od roku 2005. Výsledkom je produkt, ktorého kvalitu potvrdzujú aj tí najnáročnejší používatelia na všetkých relevantných operačných systémoch (Windows, MacOS, Linux).
Inštalácia a použitie offline
Systém Git je možné nainštalovať na všetkých relevantných operačných systémoch (Windows, MacOS, Linux), pričom funguje všade rovnako. V tomto návode si ukážeme inštaláciu a použitie na operačnom systéme ľubovoľného hostingu od Websupportu, čiže na Ubuntu Linuxe. Väčšina linuxových distribúcií ponúka Git vo vlastných repozitároch, takže inštalácia je zväčša otázkou dvoch riadkov:
sudo apt update && sudo apt upgrade -y
sudo apt install -y git
Pre potreby tohto návodu predpokladáme, že Git používa jeden človek, iba na jednom počítači a nepotrebuje Git pripájať do siete. Môže teda ísť napr. o študenta, ktorý sa rozhodol naučiť sa Git na príklade z reálneho života povedzme pri písaní poznámok. V domovskom priečinku si vytvoríme priečinok s názvom git-test
a presunieme sa doň:
mkdir ~/git-test
cd ~/git-test
Náš študent sa rozhodol, že si prvé poznámky z prednášky zapíše narýchlo do obyčajného textového súboru, ktorý nazve poznamky.txt
. Vytvoríme si teda súbor s názvom poznamky.txt a zapíšeme doň prvý riadok “Poznámky z prednášky”:
nano ~/git-test/poznamky.txt
Vložíme skopírovaný obsah, uložíme pomocou klávesovej skratky Ctrl + X
a následne stlačením klávesu y
a potvrdením klávesom Enter
.
Počas prednášky si náš študent zapísal niekoľko dôležitých bodov, ktoré potrebuje neskôr naštudovať podrobnejšie. Doma sa teda rozhodne, že poznámky rozšíri, no zároveň si chce ponechať aj túto stručnú osnovu. V priečinku ~/git-test
preto zachytí aktuálny stav poznámok pomocou nástroja Git. Najskôr však musí nastaviť používateľské meno (user.name
) a e-mailovú adresu (user.email
), ktorými sa bude podpisovať každá uložená zmena:
git config --global user.name "Náš Študent"
git config --global user.email "nas.student@websupport.sk"
Teraz náš študent nástroju Git povie, že si má v priečinku ~/git-test
vytvoriť repozitár (skrytý priečinok s názvom .git
), do ktorého si bude zaznamenávať jednotlivé zmeny v poznámkach:
git init
Overí si, ako Git vidí obsah priečinka s poznámkami:
git status
Zistí, že Git síce súbor poznamky.txt
vidí, ale nesleduje zmeny v ňom, preto ho zaradil červenou farbou do sekcie “Untracked files” (nesledované súbory). Aby Git zmeny v obsahu súboru začal aj sledovať, potrebujeme nástroju Git prikázať, aby si ho pridal medzi sledované súbory (add
):
git add poznamky.txt
Opäť si overí, ako Git vidí obsah priečinka s poznámkami a zistí, že súbor poznamky.txt
je už zaradený zelenou farbou do sekcie “Changes to be committed” (zmeny na uloženie):
git status
Teraz už môže nástroju Git prikázať, aby si uložil (commit
) aktuálny stav poznámok do repozitára:
git commit -am "Prvá verzia poznámok"
Overí si, ako presne sa aktuálny stav poznámok zapísal (log
) a čo sa zmenilo v jednotlivých súboroch (-p):
git log -p
Zistí, že prvý riadok (hnedým písmom) začína slovom commit
a nasleduje unikátny textový reťazec, ktorý môžeme vnímať ako rodné číslo uloženej zmeny (jednoznačne ju identifikuje). Aj vďaka tomuto identifikátoru Git garantuje vysokú mieru bezpečnosti a spoľahlivosti do repozitára ukladaných údajov. Ďalšie riadky obsahujú meno používateľa a jeho e-mailovú adresu, nižšie dátum a čas uloženej zmeny a nakoniec stručný popis uloženej zmeny. Výpis ukončí malým písmenom q
(ako quit).
Teraz si náš študent stručné poznámky z prednášky rozšíri. Stihne však bližšie popísať iba prvý bod, ostatné si nechá nabudúce. Uloží si dopísaný text do súboru poznamky.txt
a zároveň mu napadne niekoľko otázok, na ktoré nevie nájsť odpovede. Tie si zapíše do súboru otazky.txt
, aby sa ich mohol opýtať v škole:
nano ~/git-test/otazky.txt
Vložíme skopírovaný obsah, uložíme pomocou klávesovej skratky Ctrl + X
a následne stlačením klávesu y
a potvrdením klávesom Enter
.
Aby Git novovytvorený súbor otazky.txt
začal sledovať a ukladať zmeny v jeho obsahu, musí ho náš študent pridať (add
) medzi sledované súbory:
git add otazky.txt
Teraz náš študent zaznamená vytvorené zmeny do repozitára systému Git (commit
):
git commit -am "Rozšírenie prvého bodu poznámok a pridanie otázok"
Takto si náš študent uchoval už 2 verzie poznámok, ku ktorým sa môže kedykoľvek vrátiť bez toho, aby musel otvárať a prehľadávať jednotlivé súbory. Stačí si nechať vypísať zoznam uložených zmien (prvý riadok) a následne si vybrať označenie tej uloženej zmeny, ku ktorej sa chce vrátiť (druhý riadok):
git log -p
git reset --hard 4fc055b580fcd4242a64d8b92725c4c01efdb64a
V druhom riadku náš študent zadal textový reťazec 4fc055b580fcd4242a64d8b92725c4c01efdb64a
, ktorý jednoznačne identifikuje prvú uloženú zmenu s komentárom "Prvá verzia poznámok"
. Vo vašom prípade sa s najväčšou pravdepodobnosťou bude líšiť. V každom prípade po spustení príkazu z druhého riadku náš študent zistil, že súbor poznamky.txt
obsahuje iba stručné body zapísané na prednáške a súbor otazky.txt
zmizol, pretože vtedy ešte neexistoval.
Aby sa náš študent mohol vrátiť späť k rozšíreným poznámkam a k otázkam, stačí sa v nástroji Git vrátiť k druhej zapísanej zmene s komentárom "Rozšírenie prvého bodu poznámok a pridanie otázok"
:
git reset --hard 7e1922cca9ffc9715f2302d798c71e36c86b56c6
Textový reťazec
7e1922cca9ffc9715f2302d798c71e36c86b56c6, jednoznačne identifikujúci druhú uloženú zmenu, sa aj v tomto prípade u vás pravdepodobne bude líšiť.
Pochopiteľne, náš študent si môže takýchto zmien uložiť ľubovoľné množstvo, pričom sa ku ktorejkoľvek môže kedykoľvek vrátiť. Celý repozitár so všetkými uloženými zmenami sa zatiaľ nachádza iba v jeho počítači offline. Vďaka službám ako GitHub alebo GitLab si však náš študent môže repozitár zálohovať aj online, a to verejne alebo súkromne. Môže tak na poznámkach spolupracovať so spolužiakmi alebo s kýmkoľvek, kto bude mať prístup k jeho online repozitáru. O tom však už bude druhá časť tohto seriálu.
Zhrnutie
V prvej časti seriálu o systéme Git sme stručne popísali históriu vývoja a vyzdvihli sme jeho výhody. Ďalej sme Git nainštalovali a vyskúšali sme použitie v praxi. Všetko prebiehalo offline na jednom počítači. V druhej časti seriálu sa pozrieme na použitie nástroja Git v online prostredí určenom na spoluprácu.