19. srpna 2024

Co je to Git?

Co je to Git? Možná pro někoho banální otázka, ale pro některé je to stále záhada. Krátké shrnutí, co Git je a jak se používá.

TL;DR

Git je systém pro verzování souborů, primárně textových, takže je vhodný pro zdrojový kód. Ale je možné jím spravovat všechny typy souborů.

Git umožňuje ukládání změn v čase, takže můžete vidět, co bylo změněno, kdy a kým. Dále tvorbu větví, takže můžete pracovat na více věcech najednou a následně je sloučit dohromady. A v neposlední řadě také sdílet takovýto repozitář s dalšími lidmi (v týmu) a společně pracovat na jednom projektu. Daný repozitář je uložen na Gitovém serveru, odkud si všichni stahují nejnovější změny.

Trocha historie

Git vytvořil v roce 2005 Linus Torvalds, tvůrce Linuxového jádra. Linus k tomuto kroku přistoupil, potom co předcházející systém BitKeeper (hlavně společnost vyvíjející BitKeeper) zrušila bezplatnou licenci, kterou vývojáři využívali pro vývoj jádra Linuxu.

Linus, poučený ze zkušeností s BitKeeper, se rozhodl napsat vlastní systém pro verzování kódu. Hlavními požadavky byla:

Základní stavební kameny

Repozitář

Repozitář (anglicky repository), je místo, kde jsou soubory uloženy. Na Vašem počítači to bude složka, ve které Git bude sledovat všechny soubory napříč všemi podsložkami.

Pokud nechcete, aby Git sledoval některé soubory nebo složky, můžete využít souboru .gitignore a specifikovat, které soubory nechcete sledovat.

Commit

Commit je základní element v Gitu. Jedná se o "bod v čase" ve vašem projektu. Commit obsahuje informace o tom, co bylo změněno, kdo to změnil a kdy. Commit je také označený unikátním identifikátorem (hashem). Commit patří do větve.

Větev

Větev (anglicky branch) je odnož od hlavní větve (dříve master, dnes main). Větev umožňuje pracovat na různých funkcích nezávisle na sobě. Po dokončení práce na větvi můžete tuto větev sloučit zpět do hlavní větve.

Sloučení jde dělat pomocí merge nebo rebase. Rozdíl je, že merge zanechává historii větví, zatímco rebase "přepíše" historii a vytvoří lineární historii (větve v historii nejsou vidět).

Práce s Gitem

Clone

Clone je první krok, kdy si stáhnete repozitář z Git serveru na svůj počítač. Tím vytvoříte lokální kopii repozitáře, se kterou můžete pracovat.

git clone $URL

Add

Add je krok, kdy přidáte soubory, které chcete commitnout, do tzv. stage.

git add .
# nebo
git add cesta/k/souboru.txt

Commit

Commit je krok, kdy uložíte změny do repozitáře. Musíte nejprve přidat soubory, které chcete commitnout, do tzv. stage a poté commitnout.

git commit

Push

Push je krok, kdy commit z lokálního repozitáře odešlete na Git server.

git push

Pull

Pull, slouží ke stažení změn z Git serveru do lokálního repozitáře.

git pull

Switch/checkout

Switch/checkout je krok, kdy přepnete mezi větvemi.

git switch $BRANCH
# nebo
git checkout $BRANCH

# vytvoření nové větve
git checkout -b $BRANCH
# nebo
git switch -c $BRANCH

Status

Status v příkazové řádce vypíše, v jakém stavu se Váš lokální repozitář nachází. Jestli jsou nějaké změny a zda jsou tzv. staged nebo ne.

git status

Merge

Merge slouží ke sloučení dvou větví dohromady. Merge připojuje specifikovanou větev, do aktuální (git status).

git merge $BRANCH

Rebase

Rebase umí slučovat commit historii dvou větví dohromady. Rebase přepisuje historii a vytváří lineární historii.

git rebase $BRANCH

Cherry pick

Cherry pick umožňuje vybrat jeden commit z jiné větve a aplikovat ho na aktuální větev.

Pozor, cherry pick tvoří nový commit s novým hashem, nekopíruje jej!

git cherry-pick $COMMIT_HASH

Pull/merge request

Na Git serverech (GitHub, GitLab, Bitbucket,...) je možné vytvořit tzv. pull request (GitHub, Bitbucket) nebo merge request (GitLab). Tímto způsobem můžete požádat o sloučení Vaší větve do hlavní větve. Merge/rebase (záleží na strategii pro daný repozitář) pak probíhá na straně Gitového serveru a nikoliv Vašeho lokálního reppozitáře.

Fork

Na Git serveru je také možné vytvořit tzv. fork, tj. kopii repozitáře do Vašeho účtu. Tímto způsobem můžete pracovat na projektu, který není Váš, a následně vytvořit pull/merge request.

Git klient

S Gitem je možná pracovat skrze příkazovou řádku, ale i s grafickými klienty.

Git do příkazové řádky

Git je možné používat z příkazové řádky. Stačí mít nainstalovaný Git a můžete začít používat příkazy jako git clone, git commit, git push, git pull, git merge, git rebase, git cherry-pick, git branch, git checkout, git log, git status, git diff, git blame, git tag, git fetch, git remote, git config, git stash, git revert, git reset, git show, git grep, git bisect, git reflog, git submodule, git worktree, git clean, git help, git version,...

Git, klienti s grafickým rozhraním

GitHub Desktop, GitKraken Desktop, SourceTree, Fork (pouze macOS), Tower a další...

Git server

Git server je nepostradatelnou součástí Git ekosystému. Je to centrální bod, kde se ukládají změny a odkud si mohou ostatní stahovat změny. Dnes existuje několik serverů, kteří Vám umožní hostovat Vaše repozitáře zdarma a za rozšířené funkce si můžete zaplatit. Nebo můžete některé provozovat na vlastním serveru.

GitHub

github.com

GitHub je dnes jednoznačně nejpopulárnější Git server. GitHub nabízí zdarma hostování veřejných repozitářů a za poplatek i soukromých. GitHub je vlastněn firmou Microsoft.

Github dominuje v open-source světě a je také oblíbený mezi programátory, kteří chtějí mít svůj kód veřejně dostupný.

GitHub nabízí i CI/CD pomocí GitHub Actions, které jsou zdarma pro veřejné i soukromé repozitáře.

GitLab

gitlab.com

GitLab je číslo dva na poli Gitových serverů. Je open-source s dvojtou licencí (za některé funkce je třeba zaplatit). GitLab je možné velmi snadno provozovat na vlastním serveru.

GitLab je velmi populární mezi firmami, které chtějí mít svůj kód na svých serverech a ne v cloudu.

Zároveň GitLab už dlouho nabízí CI/CD řešení, které je velmi snadné a velmi populární.

GitLab se zároveň stal velice populární mezi vývojáři.

Bitbucket

bitbucket.org

Bitbucket je Git server vlastněn firmou Atlassian. Bitbucket je oblíbený mezi firmami, které používají další produkty od Atlassianu, jako je Jira, Confluence, Trello,...

Bitbucket nabízí CI/CD pomocí Bitbucket Pipelines, které jsou zdarma pro veřejné i soukromé repozitáře.

V dnešní době se netěší takové popularitě jako dříve, ale ve velkých korporátech má stále velké zastání, právě kvůli integraci s ostatními produkty od Atlassianu.

Další

Gogs, Gitea, Forgejo, cgit,...

To jsou jména některých z mnoha alternativních Git serverů, které si můžete provozovat sami nebo u některých (např. Gitea) můžete využít hostované verze. Jedná se o menší, často komunitou řízené projekty. V posledních letech se však těší stále větší popularitě.

Forgejo je fork Gitea, kde komunita udržuje kompatibilitu s Gitea, ale projekt jako takový je řízen komunitou a ne firmou, jako tomu je u Gitea.

Gitea a Forgejo dnes podporují CI/CD, jejichž definice je syntakticky identická s GitHub Actions, díky čemu je snadné migrovat mezi nimi.

Alternativy ke Gitu

Protože Git je dnes dominantní verzovací systém, je těžké najít alternativu, která by byla tak populární. Ale existují.

Primárně jde o starší systémy nebo některé obrovské firmy jako Google nebo Meta využívají vlastní systémy, protože svou velikostí a tím, že mají vše v jednom repozitáři (tzv. monorepo) je velice náročné takový verzovací systém škálovat.

Mezi stále aktivně používané alternativy patří:

Závěr

Git je skvělý a prakticky nepostradatelný nástroj při vývoj softwaru. Bez něj je práce na větším projektu prakticky procházka peklem.

Díky serverům jako GitHub a GitLab se stal Git nejpopulárnějším verzovacím systémem na světě.

Git školení

Zajímá Vás Git a chcete jej využít naplno nebo se s ním teprve seznamujete? Neváhejte přijít na moje školení, kde se dozvíte a vyzkoušíte, vše co potřebujete vědět o Gitu.