Tento článek patří do seriálu Jak na git. Ostatní články seriálu:
- Jak na git díl 0 - Co, proč, jak?
- Jak na git - díl 1. - git init, remote, config, clone, add, commit, push
- Jak na git - díl 2. - git status, log, checkout, reset
- Jak na git - díl 3. - git revert, stash, diff, clean
- Jak na git - díl 4. - git pull, git fetch, git branch, git merge
- Jak na git - díl 5. - git tag, git cherry-pick a opravy rozbitého gitu
- Jak na git - díl 6. - git rebase a interaktivní rebase
- Git - přidávání částí souborů do commitu
- Git - tutoriály a návody
Oficiální dokumentace k dnešním příkazům: git init, git remote, git 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]
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í.
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 😁