1. diel - Git - História a princípy
V dnešnom Git tutoriále si predstavíme verzovací nástroj Git. Zoznámime sa s jeho históriou, princípmi a základnými stavmi súborov. Tiež si povieme, kto kde Git používa a kde nájsť Git servery.
Minimálne požiadavky kurzu
Na tento kurz nepotrebujete žiadne špeciálne znalosti, stačí bežná práca s počítačom
Čo je to Git?
Git je distribuovaný verziovací systém určený na sledovanie zmien v súboroch a koordináciu práce medzi ľuďmi na rôznych verziách týchto súborov. Jednoducho povedané, je to nástroj, ktorý umožňuje vám a vášmu tímu pracovať na projektoch a udržiavať prehľad o tom, čo bolo zmenené, kto to urobil a kedy.
Git zaznamenáva históriu zmien vo forme commitov, ktoré obsahujú snímku stavu vášho projektu v danom okamihu. Vďaka tomu môžete kedykoľvek spätne preskúmať, ako sa váš projekt vyvíjal a vrátiť sa k predchádzajúcim verziám, pokiaľ je to nutné.
Jedným z najvýznamnejších prvkov Gitu je jeho distribuovaný charakter. Každý autor má svoju vlastnú kópiu celého repozitára (súborov a histórie) na svojom počítači. To umožňuje nezávislú prácu a následne zlúčenie zmien z rôznych kópií repozitára.
Git je široko používaný vo vývoji softvéru, ale môže byť tiež využitý na správu verzií akýchkoľvek textových alebo binárnych súborov. Je to kľúčový nástroj pre spoluprácu medzi vývojármi a udržiavanie kvalitného a štruktúrovaného kódu alebo obsahu projektu.
Prečo používať Git?
Existuje niekoľko dôvodov, prečo používať Git ako verzovací systém na správu vašich projektov:
- Sledovanie zmien: Git vám umožňuje sledovať a ukladať každú zmenu vykonanú vo vašom projekte. To znamená, že keď niečo nefunguje správne alebo sa chcete vrátiť k predchádzajúcej verzii, máte históriu zmien po ruke.
- Spolupráca: Ak pracujete s tímom alebo s ďalšími vývojármi, Git uľahčuje spoluprácu na rovnakých súboroch. Každý člen tímu môže pracovať na svojej vlastnej verzii a zmeny je možné následne ľahko zlúčiť.
- Vetvenie: Git umožňuje vytvárať odnože (vetvy) projektu, na ktorých môžete pracovať nezávisle. To je užitočné pre vývoj nových funkcií alebo opráv chýb bez toho, aby sa to premietlo do hlavného projektu.
- Spätné vrátenie zmien: Ak vykonáte niečo zle alebo zistíte, že nová funkcia spôsobuje problémy, môžete sa jednoducho vrátiť k predchádzajúcemu stavu projektu.
- Ochrana dát: Git ukladá celú históriu projektu, takže aj keby došlo k chybe alebo zlyhaniu disku, vaše dáta sú v bezpečí.
- Podpora pre tímy: Git umožňuje efektívne koordinovať prácu väčších tímov, uľahčuje sledovanie, kto a kedy vykonal zmeny a rieši problémy s konfliktami.
- Open Source a Popularita: Git je open-source nástroj so širokou komunitou používateľov a aktívnym vývojom. To znamená, že je k dispozícii bezplatne a vývoj je živý.
- Flexibilita: Git je široko používaný nielen vo vývoji softvéru, ale aj v ďalších oblastiach, ako sú písanie prác, správa obsahu webu a ďalšie.
- Rýchlosť: Git je navrhnutý tak, aby bol rýchly a efektívny. Záznamy zmien sú kompaktné, čo znamená menšie nároky na úložisko.
História a princípy
Git je podľa wiki distribuovaný systém správy verzií. Čo to ale v skutočnosti znamená? A prečo by sme ho mali používať?
Trocha povinnej histórie
Prvá oficiálna verzia Gitu bola uvoľnená 7. apríla 2005. Otcom Gitu je Linus Torvalds, jeden z hlavných vývojárov Linux kernela. Pôvodne bol Linux kernel vyvíjaný za pomoci Bitkeeperu, ale spoločnosť tento produkt spoplatnila, a tak boli vývojári Linuxu prinútení vyvinúť vlastný nástroj pre správu verzií. Túto úlohu sa ujal už spomínaný Linus Torvalds.
Git je prispôsobený na to, aby dokázal pracovať s veľkými projektmi (jadro Linuxu je toho dôkazom) a dokázal zaistiť každému vývojárovi tieto výhody:
- Každý autor pracuje na svojej kópii projektu. To znamená, že môžu pracovať offline a vykonávať zmeny bez nutnosti pripojenia k internetu alebo priameho zásahu do projektu.
- Jeho kompaktný spôsob ukladania zmien a znížená réžia znamenajú rýchlejšie operácie a menšie nároky na úložisko.
- Jedna z kľúčových výhod Gitu spočíva v jeho schopnosti vytvárať odnože (vetvy) projektu. To umožňuje vývojárom pracovať na rôznych funkciách alebo opravách zároveň bez toho, aby narušili hlavnú vývojovú verziu projektu.
Celkovo povedané, Git zlepšil efektivitu, organizáciu a spoluprácu vývojárov. Jeho výhody ako distribuovaného verzovacieho systému sú cenené nielen v softvérovom priemysle, ale aj v mnohých ďalších odvetviach.
Distribuovaný systém správy verzií
Najprv si vysvetlíme jednotlivé časti pojmu distribuovaný systém správy verzií.
Distribuovaný
Zdrojový kód je rozdistribuovaný medzi jednotlivých vývojárov. Každý autor má vlastnú kópiu projektu a je schopný pomocou svojej lokálnej kópie projekt skompilovať a spustiť. Keďže má každý autor svoju lokálnu kópiu, môže pracovať offline a nezávisle od ostatných. Svoje zmeny tak publikuje, až keď sa tak rozhodne.
Opakom distribuovaného je centralizovaný, ktorým je napríklad SVN. Konkurenčný SVN má jeden server a pokiaľ chce autor vykonávať zmeny, musí byť k tomuto serveru pripojený.
Systém
Git sa môže javiť ako sada príkazov, ktoré používame. Vnútri je však samostatným systémom, ktorý je nezávislý na ďalších nástrojoch (má napríklad vlastný Garbage collector). Git je možné skompilovať pre akúkoľvek platformu a nie je závislý na žiadnych externých knižniciach.
Správy
Git pomáha so správou projektu nezávisle od jeho veľkosti. Projektom môže byť menší textový dokument ako napríklad bakalárska či diplomová práca, ale aj jadro operačného systému.
Verzií
Stav projektu ukladáme do verzií. Git poskytuje podporu pre spätnú rekonštrukciu zmien a ľahký prechod medzi verziami. To znamená, že sa k súborom v danej verzii môžeme kedykoľvek vrátiť. Dáva nám jednoduchý prístup k celej histórii projektu. Môžeme sa ľubovoľne v histórii presúvať a máme prehľad o tom, kto vytvoril akú časť kódu a čo sa konkrétne zmenilo. V prípade, že nejaká zmena pokazí fungovanie celého projektu, vieme danú zmenu rýchlo vrátiť späť.
Využitie v praxi
Čo nám teda vlastne Git prináša? Môžeme jednoducho zákazníkom publikovať náš projekt vo verziách, ktoré nám vyhovujú. Zákazníkom to bude pripadať iba ako ďalšia verzia, aj keď medzi predchádzajúcou a aktuálnou verziou môže byť napríklad 10 vývojárskych verzií.
Vďaka vetveniu môžeme vytvárať novú funkcionalitu bez toho, aby to malo akýkoľvek vplyv na zvyšok projektu. Ak zlyhá, nie je nič jednoduchšie, než tento pokus nezahrnúť do projektu, vrátiť sa na pôvodné miesto v histórii a začať odznova. Projekt zostane po celú dobu v rovnakom stave.
Git však nie je obmedzený iba na správu zdrojového kódu. Jeho schopnosti vo verzovaní sú užitočné aj pri písaní odborných prác, ako sú bakalárske alebo diplomové práce. Môžeme ho teda pohodlne využiť aj v oblastiach mimo vývoja softvéru.
Princípy Gitu
Repositár (tiež nazývaný repo) je základným stavebným prvkom systému správy verzií Git. Ide o miesto, kde sú uložené a spravované všetky súbory, história a metadáta projektu. Repozitár môže obsahovať kompletný záznam o zmenách v kóde, súboroch, priečinkoch a ďalších artefaktoch projektu.
Repositár v Gite slúži na ukladanie a udržiavanie celej histórie projektu. Každý commit (uložený stav projektu v určitom okamihu vývoja) je zaznamenaný v repositári spolu s informáciami o tom, kto vykonal zmenu, kedy a čo konkrétne bolo zmenené. Vďaka tomu môžete sledovať vývoj projektu v čase, prechádzať medzi rôznymi verziami a zisťovať, kto a kedy pridal alebo upravil určité časti kódu.
Prvou dôležitou vecou v Gite je spôsob ukladania súborov. Git každý súbor uloží iba raz a potom ukladá len tzv. snapshoty. V každom commite sú uložené všetky súbory ako snapshot. To dáva Gitu výhody oproti ostatným verziovacím systémom (Perforce, CVS, Bazaar), ktoré ukladajú súbor vždy pri jeho zmene.
Okrem toho Git ukladá všetky súbory binárne. Je teda možné ukladať aj netextové súbory (napríklad obrázky) a Git poskytne rovnaké pohodlie. Veľkosť repositára pritom zostane prakticky rovnaká. Potom už viac závisí od formátu súboru, či sa po malej zmene zmení celý binárny súbor, alebo iba časť.
Ďalšou dôležitou vecou je, že každá operácia, ktorú urobíme, je najskôr lokálna. Než povieme, že je to nevýhoda, pretože sa medzi nás a server pridá ďalší článok reťazca, poďme sa nad tým najskôr zamyslieť. V prvom rade nám to dáva možnosť jednoduchej opravy. Akonáhle už niečo publikujeme, nie je možnosť to zmeniť, pretože niekto iný už náš kód môže mať stiahnutý a Git nenecháva žiadne zadné vrátka k ostatným používateľom. Vďaka lokálnemu repositárovi máme možnosť po sebe kód dodatočne opraviť a až potom ho umiestniť na internet.
Ďalšia výhoda, ktorá z tohto prístupu vyplýva je, že nie je prakticky nič, čo by vám Git nedovolil bez pripojenia k internetu. Môžeme pracovať na svojom lokálnom repositári a až po pripojení môžeme všetko vziať a umiestniť na internet.
Do Gitu je tiež veľmi silne zakomponovaná integrita. Pre každý súbor alebo zložku Git spočíta kontrolný súčet, ktorý sa nazýva SHA-1 hash (40-miestne hexadecimálne číslo). Nemôžeme teda zmeniť alebo poškodiť súbor bez toho, aby o tom Git nevedel. Git interne neukladá súbory podľa mena, ale práve podľa tohto kontrolného súčtu.
Git iba pridáva dáta. Aj keď vymažeme riadok, Git iba dostane informáciu o pridaní „ničoho“ do súboru. Po vykonaní commitu už je veľmi zložité súbor poškodiť do takého stavu, aby nešiel obnoviť. Ak nenastanú nejaké extrémne situácie (napríklad poškodenie pevného disku) dáta sú úplne v bezpečí.
Štyri pracovné priestory
V kontexte práce s Gitom sa celý proces správy verzií skladá zo štyroch hlavných fáz, z ktorých každá má svoju špecifickú úlohu. Tieto fázy zahŕňajú pracovnú zložku (working directory) a ďalšie dôležité aspekty, ktoré umožňujú efektívnu a koordinovanú spoluprácu pri verzovaní projektov. Pre lepšiu predstavu je možné tento proces zobraziť nasledujúcim grafom:
Poďme si vrstvy popísať.
- Pracovná zložka (Working Directory): Táto fáza zahŕňa aktuálnu verziu vášho projektu. Je to miesto, kde vykonávame úpravy a editáciu projektu. V tomto priečinku môžete vytvárať, mazať a upravovať súbory podľa svojich potrieb.
- Staging Area: Po vykonaní určitých zmien v pracovnom priečinku môžeme špecificky vybrať súbory, ktoré chcete zaradiť do ďalšieho commitu. Tento priestor slúži ako „staging area“ alebo „index“, kde si vyberáte, ktoré zmeny budú súčasťou nasledujúceho commitu.
- Lokálny repozitár: Akonáhle sme vybrali súbory v staging area, môžeme vykonať commit, čo je trvalé uloženie týchto zmien do lokálneho repozitára. Tento repozitár obsahuje kompletnú históriu nášho projektu vrátane všetkých zmien a commitov, ktoré sme urobili.
- Vzdialený repozitár: Táto fáza zahŕňa repozitár umiestnený na vzdialenom serveri. Po uložení zmien do nášho lokálneho repozitára môžeme tieto zmeny poslať/nahrať na vzdialený server, aby boli dostupné pre ostatných spolupracovníkov alebo používateľov. Tým sa umožňuje zdieľanie a koordinácia práce medzi rôznymi vývojármi.
Cesta ide samozrejme absolvovať aj opačne – stiahnuť súbory zo vzdialeného repositára a následne tento stiahnutý repositár pridať do lokálneho. Ide obnoviť pracovnú zložku do stavu, v akom bol aktuálny stav vzdialeného repositára. Ide tiež obnoviť zložku do stavu pri jednom z commitov (teda pozrieť sa, ako zložka vyzerá v tom určitom commite).
Poskytovatelia vzdialených repozitárov
Ako už bolo povedané vzdialené repozitáre sú umiestnené na serveri a umožňujú ho zdieľať s ostatnými užívateľmi. Týmto spôsobom si môžu stiahnuť náš kód a prispievať k nemu svojimi vlastnými zmenami. Je dôležité si uvedomiť, že akonáhle náš repozitár umiestnime na vzdialený server, strácame nad ním určitú mieru kontroly. Vedomie toho, kto a kedy si náš repozitár stiahol, nie je vždy zaručené. Akonáhle niekto naklonuje náš repozitár, nemôžeme už následne zmeniť verziu toho, čo si stiahol.
Existuje mnoho platform, ktoré nám umožňuje nahrať náš repozitár. Medzi najznámejšie platformy pre vzdialených repozitárov patria:
Tieto platformy sa líšia v ponúkaných službách. Všetky však umožňujú vytváranie verejných repozitárov (prístupných a sťahovateľných kýmkoľvek) aj privátnych repozitárov (s obmedzeným prístupom iba pre overených užívateľov). Rovnako sa líšia v kapacite repozitára a v niektorých prípadoch aj v maximálnom počte užívateľov, ktorí môžu mať prístup k privátnemu repozitárovi.
Existuje aj možnosť si "hostovať" náš vlastný vzdialený repozitár na našom serveri pomocou Gitea
Git v známych projektoch
Git sa stal jedným z najviac používaných verziovacích systémov dnešnej doby. Uveďme si pár projektov, ktoré používajú Git ako verzovací systém:
- Linux kernel
- Git
- Ruby on rails
- Trinity Core (WoW server)
- ASP.NET Core MVC
Ako možno vidieť, Git je používan v projektoch, na ktorých pracujú stovky až tisíce ľudí. To však neznamená, že Git nie je vhodný pre menšie projekty. Jeho využitie je pružné a ponúka sa pre rôzne merítko projektov – od projektov s niekoľkými málo commitmi až po tie s desiatkami či stovkami. Pre jednotlivcov potom môže byť Git výborným zálohovacím nástrojom. Vďaka svojej univerzálnosti a flexibilite môže nájsť využitie takmer všade, kde sa pracuje so zmenami a správou kódu.
V budúcej lekcii, Git - Inštalácia, si popíšeme Git klientov a ich integráciu do vývojových prostredí. Spomenieme si inštaláciu na Linux a podrobne si prejdeme inštaláciu na Windows.