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
K tomuto kurzu 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ý ke sledování změn v souborech a ke 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 softwaru, 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 se chcete vrátit k předchozí verzi, máte historii změn po ruce.
- Spolupráce: Pokud pracujete v týmu 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 opravy chyb, aniž se změny promítnou 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 je 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 Wikipedie distribuovaný systém správy verzí. Co to ale ve skutečnosti znamená? A proč bychom jej měli používat?
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 pomocí 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 zajistil každému vývojáři tyto výhody:
- Každý vývojář pracuje na své kopii projektu. To znamená, že programátoři 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 systém 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 ukládáme do verzí. 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. Git nám dává 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, ačkoli mezi předchozí a aktuální verzí může být například deset vývojářských verzí.
Díky větvení můžeme vytvářet novou funkcionalitu, aniž by to mělo jakýkoli dopad na zbytek projektu. Jestliže novinka 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
Repozitář (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.
Repozitář 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 repozitáři spolu s informacemi o tom, kdo provedl změnu, kdy a co bylo konkrétně změněno. Díky tomu můžeme 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 všechny soubory uloženy 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 repozitáře přitom zůstane prakticky stejná. Poté už závisí více na formátu souboru, zda se po drobné úpravě změní celý binární soubor, nebo pouze jeho část.
Další důležitou věcí je, že každá operace, kterou uděláme, je nejdříve lokální. Dříve než prohlásíme, ž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 repozitáři máme možnost po sobě kód dodatečně opravit a teprve poté jej umístit na internet.
Další výhodou, která z tohoto přístupu vyplývá, je, že neexistuje prakticky nic, co by nám Git nedovolil bez připojení k internetu. Můžeme pracovat na svém lokálním repozitář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 (40mí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á ze č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:
Pojďme si vrstvy popsat:
- Pracovní složka (working directory): Tato fáze zahrnuje aktuální verzi našeho projektu. Je to místo, kde provádíme úpravy a editace projektu. V této složce můžeme 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áme, 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é ostatním spolupracovníkům nebo uživatelům. Tím se umožňuje sdílení a koordinace práce mezi různými vývojáři.
Cestu lze samozřejmě absolvovat i opačně – stáhnout soubory ze vzdáleného repozitáře a následně tento stažený repozitář přidat do lokálního. Lze obnovit pracovní složku do stavu, v jakém byl aktuální stav vzdáleného repozitáře. Lze 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 ostatní mohou náš kód stáhnout 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áhl, 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 platforem, které nám umožňují 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 k privátnímu repozitáři přístup.
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é Git používají jako verzovací systém:
- Linux kernel,
- Git,
- Ruby on Rails,
- TrinityCore (WoW server),
- ASP.NET Core MVC.
Jak lze vidět, Git je používán 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ěřítka 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.