Jak na git - díl 1.

(publikováno 11.10.2016) 7 Git, Windows, Linux

První díl lehkého úvodu do verzovacího systému GIT. Probereme vytváření repozitáře, základní nastavení, staging area, vytvoření prvního commitu a nahrání do vzdáleného repozitáře.

Jak na git - díl 1.

Tento článek patří do seriálu Jak na git. Ostatní články seriálu:


Oficiální dokumentace k dnešním příkazům: git init, git remotegit clone, git config, git status, git add, git commit, git push

Centrální vzdálený a lokální repozitář

Repozitář je úložiště vašeho projektu a může být lokální, tudíž vše je uloženo na vašem PC, nebo centrální vzdálený, který je někde na serveru. Nejčastěji se však používá kombinace obou a veškeré změny nahrajete také na vzdálený repozitář. Odtud si poté můžou vaši kolegové projekt stáhnout a pracovat na něm s vámi.

Pokud nemáte v plánu si rozjet vlastní Git server např. s GitLabem, asi využijete GitHub, nebo BitBucket či GitLab v cloudu. Na BitBucketu můžete mít soukromý repozitář zdarma, ale jste omezeni počtem spolupracovníků. Github i GitLab momentálně nabízí i ve free verzi kvalitní zázemí bez velkého omezení, minimálně pro začátečníky a hobby projekty.

Tutoriál popisuje práci s Gitem v příkazové řádce. Existuje ale také množství grafických nástrojů, jako například GitKraken, o kterém je zde také článek.

Vytvoření lokálního repozitáře a propojení s centrálním

Vytvořit lokální repozitář jde více způsoby. Pokud již vzdálený repozitář existuje, stačí využít klonování. Jinak se nový repozitář prvně musí založit na Git serveru. Poté, i když je prázdný, lze využít klonování, nebo můžete založit lokální repozitář a propojit je.

# Vytváření lokálního repozitáře
# buď určíme cestu, nebo se vytvoří v aktuální složce
git init [slozka]
# Připojíme k centrálnímu repozitáři, který pojmenujeme origin
# pojmenování je libovolné, ale ve 99,99% je to origin
git remote add origin https://example.com/pavel/test-git.git

# Klonování repozitáře je o něco jednodušší, složku pro repozitář vytvoří
# nebo ji můžeme definovat, pak ale musí být prázdná
git clone https://example.com/pavel/test-git.git [slozka]

Centrální a lokální repozitář

Nutná konfigurace

Na začátku je potřeba nastavit podpis pod budoucí commity. Jméno a email se poté zobrazí u vašich commitů, aby ostatní věděli kdo co dělal. Nastavit lze tyto údaje globálně, nebo také lokálně. Pokud u soukromých repozitářů používáte jiný email, než u pracovních, soukromý email nastavíme globálně, pracovní pak u každého repozitáře zvlášť.

# S těmito údaji se vaše commity zobrazí ostatním
# Doporučuji nastavit vždy globálně, až pokud je to nutné lokálně je přepsat
git config [--global] user.name "Pavel Kutáč"
git config [--global] user.email "pavel.kutac@gmail.com"

Tvorba commitů a staging area

Commit si můžete představit jako 1 kus práce, který spolu souvisí. Přiložíme veškeré soubory, které jsme upravili a vytvoříme commit. Například v budoucnu chceme všechny úpravy zrušit, vrátíme celý commit a všechny úpravy commitu se vrátí zpět.

Staging area je zvláštní prostor mezi změnami v souborech a commitem. Git vypíše změněné soubory, ty poté přidáte do staging area a později celý staging area se přidá do commitu. Pokud soubor přidaný do staging area se upraví, musí se přidat znova. Ve staging area je totiž stále soubor ve verzi, kdy byl přidán.

# Vypíše aktuální stav souborů, které jsou změněny
git status [slozka]

# Přidání souborů do staging area, tečka reprezentuje vše
git add .
git add soubor [soubor...]
git add slozka

.gitignore

Soubor .gitignore určuje, které soubory nikdy nenahrávat do repozitáře. Vložit jej můžete kam chcete. Nejčastěji je v kořenu projektu, ale můžete další vložit také do podsložek. Chování znaků * je možná trochu matoucí, viz příklad souboru .gitignore

# cesta je vždy relativní k souboru, zde se ignoruje vše v
# node_modules i sass-cache, který je přímo v kořenu projektu
.sass-cache/*
node_modules/*
# Tento zápis ale ignoruje soubory sql v celém projektu
*.sql

# Pokud neznáme přesné zanoření, můžeme využít **
# ignoruje www/d21.cache, www/html/tpl.cache i www/html/tpl/xx.cache ...
www/**/*.cache

# Ignorování všeho ve složce, kromě jediného souboru je trochu náročnější. Je potřeba
# ignorovat vše, kromě samotné složky a až poté kromě samotného souboru.
# V případě většího zanoření je potřeba vypsat všechny složky s ! na začátku
cover/* !cover/ !cover/placeholder.jpg

Na GitHubu jsou příklady nejčastějších .gitignore souborů, stojí za prohlédnutí.

Staging area a vytvoření commitu

Vytvoření commitu

Do commitu se přidají veškeré soubory, které jsme dříve přidali do staging area. Ke každému commitu je dobré také uvést zprávu, která pomůže ostatním i vám v budoucnu rozpoznat, co daný commit vytvořil, upravil apod.

Někdy se používá ještě jiné pojmenování. Část v obrázku výše úplně vlevo se nazývá workspace, pro staging areu se používá výraz index a jednotlivé commity již jsou v repozitáři.

# Doporučuji přepínač -m vynechat, otevře se editor a zprávu napíšete
# v něm, je to přehlednější a lépe se píší víceřádkové zprávy
git commit [-m "MSG"]

# Editor který se otevře je většinou vim, můžete si ale nastavit
# jakýkoli editor v příkazové řádce, na Ubuntu třeba nano
git config --system core.editor <editor>

Nahrávání na centrální repozitář

Commit je vytvořen, ale zatím je pouze v lokálním repozitáři, je potřeba ho nahrát do centrálního repozitáře. Commit je vždy obsažen v nějaké větvi, prozatím jsme větve neřešili, takže stačí vědět, že ta hlavní se jmenuje master. Můžete si ji pojmenovat jinak, ale nedoporučuji to. Git navíc sám první větev pojmenuje master.

Lokální větev ve vzdáleném repozitáři bude vytvořena, pokud neexistuje. Je dobré ale Gitu říct, že lokální a vzdálená větev jsou stejné a budou se "sledovat". Při dalším spuštění příkazu push se alias repozitáře a název větve nebude muset určovat.

# První push nastavíme s --set-upstream přepínačem pro propojení větví
git push --set-upstream origin master

# Od teď Git ví, kam pushnout master větev
git push

Pro dnešek toho bylo více než dost. Pokračování příště. Pokud ale máte tipy, na co bych určitě neměl zapomenout, podělte se v komentářích nebo mi napište mail.

K tomuto článku již není možné přidávat další komentáře

Komentáře

Super článek

Ahoj,,dal bys nějaké tipy, které typy souborů by se měli zadávat do .gitignore? Dále mi chbí v článku tvoření aliasů

Fakt díky moc za článek! Hodí se mi do nové práce.

Moc hezký článek, díky! :)

Paradne zpracovane a dobre popsane. Uz ctu treti web a zadny nebyl takto dobre formulovan.

Diks
Robert

Děkuji všem za komentáře :) jsem rád, že mé články jsou k užitku

Super stránka, super článek. Zjišťuji, že mám s gitem velké nedostatky 😁