Lekce 1 - Git - Historie a principy
V dnešním Git tutoriálu si představíme verzovací nástroj Git. Seznámíme se s jeho historií, principy a základními stavy souborů. Také si řekneme, kdo kde Git používá a kde najít Git servery.
Minimální požadavky kurzu
Na tento kurz nepotřebujete žádné speciální znalosti, stačí běžná
práce s počítačem
Co je to Git ?
Git je distribuovaný verzovací systém určený pro sledování změn v souborech a koordinaci práce mezi lidmi na různých verzích těchto souborů. Jednoduše řečeno, je to nástroj, který umožňuje vám a vašemu týmu pracovat na projektech a udržovat přehled o tom, co bylo změněno, kdo to udělal a kdy.
Git zaznamenává historii změn ve formě commitů, které obsahují snímek stavu vašeho projektu v daném okamžiku. Díky tomu můžete kdykoli zpětně prozkoumat, jak se váš projekt vyvíjel a vrátit se k předchozím verzím, pokud je to nutné.
Jedním z nejvýznamnějších prvků Gitu je jeho distribuovaný charakter. Každý vývojář má svou vlastní kopii celého repozitáře (souborů a historie) na svém počítači. To umožňuje nezávislou práci a následně sloučení změn z různých kopií repozitáře.
Git je široce používán ve vývoji software, ale může být také využit pro správu verzí jakýchkoli textových nebo binárních souborů. Je to klíčový nástroj pro spolupráci mezi vývojáři a udržování kvalitního a strukturovaného kódu nebo obsahu projektu.
Proč používat Git ?
Existuje několik důvodů, proč používat Git jako verzovací systém pro správu vašich projektů:
- Sledování změn: Git vám umožňuje sledovat a ukládat každou změnu provedenou ve vašem projektu. To znamená, že když něco nefunguje správně nebo chcete se vrátit k předchozí verzi, máte historii změn po ruce.
- Spolupráce: Pokud pracujete s týmem nebo s dalšími vývojáři, Git usnadňuje spolupráci na stejných souborech. Každý člen týmu může pracovat na své vlastní verzi a změny lze následně snadno sloučit.
- Větvení: Git umožňuje vytvářet odnože (větve) projektu, na kterých můžete pracovat nezávisle. To je užitečné pro vývoj nových funkcí nebo oprav chyb, aniž by se to promítlo do hlavního projektu.
- Zpětné vrácení změn: Pokud provedete něco špatně nebo zjistíte, že nová funkce způsobuje problémy, můžete se jednoduše vrátit k předchozímu stavu projektu.
- Ochrana dat: Git ukládá celou historii projektu, takže i kdyby došlo k chybě nebo selhání disku, vaše data jsou v bezpečí.
- Podpora pro týmy: Git umožňuje efektivně koordinovat práci větších týmů, usnadňuje sledování, kdo a kdy provedl změny a řeší problémy s konflikty.
- Open Source a Popularita: Git je open-source nástroj s širokou komunitou uživatelů a aktivním vývojem. To znamená, že je k dispozici bezplatně a vývoj je živý.
- Flexibilita: Git je široce používán nejen ve vývoji softwaru, ale také v dalších oblastech, jako jsou psaní prací, správa obsahu webu a další.
- Rychlost: Git je navržen tak, aby byl rychlý a efektivní. Záznamy změn jsou kompaktní, což znamená menší nároky na úložiště.
Historie a principy
Git je dle wiki „distribuovaný systém správy verzí “. Co to ale ve skutečnosti znamená? A proč bychom jej měli používat?
![Git logo - Git](images/6863/git/uvod/pic.png)
Trocha povinné historie
První oficiální verze Gitu byla uvolněna 7. dubna 2005. Otcem Gitu je Linus Torvalds, jeden z hlavních vývojářů Linux kernelu. Původně byl Linux kernel vyvíjen za pomoci Bitkeeperu, ale společnost tento produkt zpoplatnila, a tak byli vývojáři Linuxu přinuceni vyvinout vlastní nástroj pro správu verzí. Tohoto úkolu se ujal již zmiňovaný Linus Torvalds.
Git je přizpůsobený k tomu, aby dokázal pracovat s velkými projekty (jádro Linuxu je toho důkazem) a dokázal zajistit každému vývojáři tyto výhody:
- Každý vývojář pracuje na své kopii projektu. To znamená, že mohou pracovat offline a provádět změny bez nutnosti připojení k internetu nebo přímého zásahu do projektu.
- Jeho kompaktní způsob ukládání změn a snížená režie znamenají rychlejší operace a menší nároky na úložiště.
- Jedna z klíčových výhod Gitu spočívá v jeho schopnosti vytvářet odnože (větve) projektu. To umožňuje vývojářům pracovat na různých funkcích nebo opravách zároveň, aniž by narušili hlavní vývojovou verzi projektu.
Celkově řečeno, Git zlepšil efektivitu, organizaci a spolupráci vývojářů. Jeho výhody jako distribuovaného verzovacího systému jsou ceněny nejen v softwarovém průmyslu, ale i v mnoha dalších odvětvích.
Distribuovaný systém správy verzí
Nejprve si vysvětlíme jednotlivé části pojmu distribuovaný systém správy verzí.
Distribuovaný
Zdrojový kód je rozdistribuován mezi jednotlivé vývojáře. Každý vývojář má vlastní kopii projektu a je schopen pomocí své lokální kopie projekt zkompilovat a spustit. Jelikož má každý vývojář svou lokální kopii, může pracovat offline a nezávisle na ostatních. Své změny tak publikuje až když se tak rozhodne.
Opakem distribuovaného je centralizovaný, kterým je například SVN. Konkurenční SVN má jeden server a pokud chce vývojář provádět změny, musí být k tomuto serveru připojen.
Systém
Git se může jevit jako sada příkazů, které používáme. Uvnitř je však samostatným systémem, který je nezávislý na dalších nástrojích (má například vlastní Garbage collector). Git lze zkompilovat pro jakoukoli platformu a není závislý na žádných externích knihovnách.
Správy
Git pomáhá se správou projektu nezávisle na jeho velikosti. Projektem může být menší textový dokument jako například bakalářská či diplomová práce, ale i jádro operačního systému.
Verzí
Stav projektu ukladáme do verzií. Git poskytuje podporu pro zpětnou rekonstrukci změn a snadný přechod mezi verzemi. To znamená, že se k souborům v dané verzi můžeme kdykoli vrátit. Dává nám jednoduchý přístup k celé historii projektu. Můžeme se libovolně v historii přesouvat a máme přehled o tom, kdo vytvořil jakou část kódu a co se konkrétně změnilo. V případě, že nějaká změna pokazí fungování celého projektu, umíme danou změnu rychle vrátit zpět.
Využití v praxi
Co nám tedy vlastně Git přináší? Můžeme jednoduše zákazníkům publikovat náš projekt ve verzích, které nám vyhovují. Zákazníkům to bude připadat pouze jako další verze, i když mezi předchozí a aktuální verzí může být například 10 vývojářských verzí.
Díky větvení můžeme vytvářet novou funkcionalitu, aniž by to mělo jakýkoliv dopad na zbytek projektu. Jestliže selže, není nic jednoduššího, než tento pokus nezahrnout do projektu, vrátit se na původní místo v historii a začít znovu. Projekt zůstane po celou dobu ve stejném stavu.
Git však není omezen pouze na správu zdrojového kódu. Jeho schopnosti ve verzování jsou užitečné také při psaní odborných prací, jako jsou bakalářské nebo diplomové práce. Můžeme ho tedy pohodlně využít i v oblastech mimo vývoj softwaru.
Principy Gitu
Repositář (také nazýván repo) je základním stavebním prvkem systému správy verzí Git. Jedná se o místo, kde jsou uloženy a spravovány všechny soubory, historie a metadata projektu. Repozitář může obsahovat kompletní záznam o změnách v kódu, souborech, složkách a dalších artefaktech projektu.
Repositář v Gitu slouží k ukládání a udržování celé historie projektu. Každý commit (uložený stav projektu v určitém okamžiku vývoje) je zaznamenán v repositáři spolu s informacemi o tom, kdo provedl změnu, kdy a co konkrétně bylo změněno. Díky tomu můžete sledovat vývoj projektu v čase, přecházet mezi různými verzemi a zjišťovat, kdo a kdy přidal či upravil určité části kódu.
První důležitou věcí v Gitu je způsob ukládání souborů. Git každý soubor uloží pouze jednou a poté ukládá jen tzv. snapshoty. V každém commitu jsou uloženy všechny soubory jako snapshot. To dává Gitu výhody oproti ostatním verzovacím systémům (Perforce, CVS, Bazaar), které ukládají soubor vždy při jeho změně.
Kromě toho Git ukládá všechny soubory binárně. Je tedy možné ukládat i netextové soubory (například obrázky) a Git poskytne stejné pohodlí. Velikost repositáře přitom zůstane prakticky stejná. Poté už závisí více na formátu souboru, zda se po malé změně změní celý binární soubor, nebo pouze část.
Další důležitou věcí je, že každá operace, kterou uděláme, je nejdříve lokální. Než řekneme, že je to nevýhoda, protože se mezi nás a server přidá další článek řetězce, pojďme se nad tím nejdříve zamyslet. V první řadě nám to dává možnost snadné opravy. Jakmile již něco publikujeme, není možnost to změnit, protože někdo jiný již náš kód může mít stáhnutý a Git nenechává žádná zadní vrátka k ostatním uživatelům. Díky lokálnímu repositáři máme možnost po sobě kód dodatečně opravit a teprve poté jej umístit na internet.
Další výhoda, která z tohoto přístupu vyplývá je, že není prakticky nic, co by vám Git nedovolil bez připojení k internetu. Můžeme pracovat na svém lokálním repositáři a teprve po připojení můžeme vše vzít a umístit na internet.
Do Gitu je také velmi silně zakomponována integrita. Pro každý soubor nebo složku Git spočítá kontrolní součet, který se nazývá SHA-1 hash (40-ti místné hexadecimální číslo). Nemůžeme tedy změnit nebo poškodit soubor, aniž by o tom Git nevěděl. Git interně neukládá soubory podle jména, ale právě podle tohoto kontrolního součtu.
Git pouze přidává data. I když vymažeme řádek, Git pouze dostane informaci o přidání „ničeho“ do souboru. Po provedení commitu už je velmi složité soubor poškodit do takového stavu, aby nešel obnovit. Nenastanou-li nějaké extrémní situace (například poškození pevného disku) data jsou naprosto v bezpečí.
Čtyři pracovní prostory
V kontextu práce s Gitem se celý proces správy verzí skládá z čtyř hlavních fází, z nichž každá má svou specifickou úlohu. Tyto fáze zahrnují pracovní složku (working directory) a další důležité aspekty, které umožňují efektivní a koordinovanou spolupráci při verzování projektů. Pro lepší představu lze tento proces zobrazit následujícím grafem:
![Graf stavů souboru - Git](images/6863/git/uvod/graf.png)
Pojďme si vrstvy popsat.
- Pracovní složka (Working Directory): Tato fáze zahrnuje aktuální verzi vašeho projektu. Je to místo, kde provádíme úpravy a editace projektu. V této složce můžete vytvářet, mazat a upravovat soubory podle svých potřeb.
- Staging Area: Po provedení určitých změn v pracovní složce můžeme specificky vybrat soubory, které chcete zařadit do dalšího commitu. Tento prostor slouží jako "staging area" nebo "index", kde si vybíráte, které změny budou součástí následujícího commitu.
- Lokální repozitář: Jakmile jsme vybrali soubory ve staging area, můžeme provést commit, což je trvalé uložení těchto změn do lokálního repozitáře. Tento repozitář obsahuje kompletní historii našeho projektu včetně všech změn a commitů, které jsme provedli.
- Vzdálený repozitář: Tato fáze zahrnuje repozitář umístěný na vzdáleném serveru. Po uložení změn do našeho lokálního repozitáře můžeme tyto změny poslat/nahrát na vzdálený server, aby byly dostupné pro ostatní spolupracovníky nebo uživatele. Tím se umožňuje sdílení a koordinace práce mezi různými vývojáři.
Cesta jde samozřejmě absolvovat i opačně - stáhnout soubory ze vzdáleného repositáře a následně tento stažený repositář přidat do lokálního. Jde obnovit pracovní složku do stavu, v jakém byl aktuální stav vzdáleného repositáře. Jde také obnovit složku do stavu při jednom z commitů (tedy podívat se, jak složka vypadá v tom určitém commitu).
Poskytovatelé vzdálených repozitářů
Jak již bylo řečeno vzdálené repozitáře jsou umístěny na serveru a umožňují jej sdílet s ostatními uživateli. Tímto způsobem si mohou stáhnout náš kód a přispívat k němu svými vlastními změnami. Je důležité si uvědomit, že jakmile náš repozitář umístíme na vzdálený server, ztrácíme nad ním určitou míru kontroly. Vědomí toho, kdo a kdy si náš repozitář stáhnul, není vždy zaručeno. Jakmile někdo naklonuje náš repozitář, nemůžeme již následně změnit verzi toho, co si stáhl.
Existuje mnoho platform, které nám umožňuje nahrát náš repozitář. Mezi nejznámější platformy pro vzdálené repozitáře patří:
Tyto platformy se liší v nabízených službách. Všechny však umožňují vytváření veřejných repozitářů (přístupných a stahovatelných kýmkoli) i privátních repozitářů (s omezeným přístupem pouze pro ověřené uživatele). Rovněž se liší v kapacitě repozitáře a v některých případech také v maximálním počtu uživatelů, kteří mohou mít přístup k privátnímu repozitáři.
Existuje také možnost si "hostovat" náš vlastní vzdálený repozitář na našem serveru pomocí Gitea
Git ve známých projektech
Git se stal jedním z nejvíce používaných verzovacích systémů dnešní doby. Uveďme si pár projektů, které používají Git jako verzovací systém:
- Linux kernel
- Git
- Ruby on rails
- Trinity Core (WoW server)
- ASP.NET Core MVC
Jak lze vidět, Git je používám v projektech, na kterých pracují stovky až tisíce lidí. To ovšem neznamená, že Git není vhodný pro menší projekty. Jeho využití je pružné a nabízí se pro různé měřítko projektů – od projektů s několika málo commity až po ty s desítkami či stovkami. Pro jednotlivce pak může být Git výborným zálohovacím nástrojem. Díky své univerzálnosti a flexibilitě může najít využití téměř všude, kde se pracuje se změnami a správou kódu.
V příští lekci, Git - Instalace, si popíšeme Git klienty a jejich integraci do vývojových prostředí. Zmíníme si instalaci na Linux a podrobně si projdeme instalaci na Windows.