====== GIT - přehled základních příkazů ====== * ''%%git status%%'' zjistí aktuální stav repozitáře v dané větvi ===== Inicializace ===== * ''%%git init%%'' inicializace nového repozitáře (adresář nesmí obsahovat repozitář, aniž žádný nadřazený) * ''%%git remote add origin [url]%%'' přidání adresy serveru se kterým chceme repozitář synchronizovat * ''%%git clone [url]%%'' zkopírování repozitáře z //url// adresy (vytvoření složky, která se jmenuje jako repozitář) * ''%%git clone [url] [adresar]%%'' zkopírování repozitáře z //url// adresy do vlastního //adresáře// ===== Větve (branch) ===== Větve jsou jeden z nejdůležitějších částí GITu, jelikož umožňují větvit kód na různé části. Používají se v následujících případech: - Umožňují odlišit různé chování programu např. v závislosti na nastavení. Poté může repozitář obsah i více hlavních větví. - Když uživatelé upravují kód mimo hlavní větev. Výhodou je, že kód v hlavní větvi by měl být vždy ve stabilní verzi. Další úpravy se přidají až po finálním otestování. Téměř vždy přítomnou větví je větev //master//, kde by měl být uložený hlavní kód **Příkazy:** * ''%%git branch [jmeno]%%'' vytvoří novou větev (v případě, že ještě neexistuje) * ''%%git checkout [jmeno]%%'' přepne aktuální větev na //jmeno// * ''%%git merge [jmeno]%%'' spojí větev //jmeno// s aktuální větví * ''%%git branch -d [jmeno]%%'' smaže větev //jmeno// ===== Štítky (tagy) ===== Štítky jsou vhodné pro rychlý přehled o stavu daného commitu. Používají se zpravidla pro verzování //release// kódů (např. ''%%v0.1%%'' nebo ''%%odevzdani-1%%''). * ''%%git tag%%'' zobrazí všechny štítky (tagy) v daném repozitáři * ''%%git tag [nazev]%%'' nastaví současnému commitu štítek (tag) s označením //nazev// * ''%%git tag -d [nazev]%%'' smaže štítek (tag) s označením //nazev// ===== Změny v repozitáři ===== * ''%%git log%%'' zobrazí historii změn v dané větvi * ''%%git log --follow [soubor]%%'' zobrazí historii změn souboru //soubor// v dané větvi * ''%%git diff [vetev1]...[vetev2]%%'' zobrazí změny mezi dvěmi větví //vetev1// a //vetev2// * ''%%git show [commit]%%'' zobrazí hlavičku daného commitu * ''%%git add [soubor]%%'' přidá soubor(y) nebo obsah složek k přidání do repozitáře * ''%%git commit -m"zpráva"%%'' potvrzení změn se //zprávou//. Zpráva by měla obsahovat souhrn změn a délka by neměla přesáhnotu 50 znaků. Možno přidat přepínač //-a//, který zahrne všechny modifikované soubory automaticky do commitu. ===== Návrat ke změnám ===== * ''%%git reset [commit]%%'' vrácení se ke stavu pod označením **commit** * ''%%git reset --hard%%'' tvrdé obnovení současného commitu **bez možnosti návratu** * ''%%git reset --hard [commit]%%'' tvrdé obnovení commitu **bez možnosti návratu** ===== Synchronizace se serverem ===== * ''%%git fetch%%'' stáhne veškeré změny ze serveru * ''%%git merge [nazev]%%'' spojí větev s číslem commitu nebo názvem //nazev// do současné větve * ''%%git pull%%'' stáhne veškeré změny ze serveru a aktualizuje současnou větev (příkaz je kombinací ''%%git fetch%%'' a ''%%git merge%%'') * ''%%git push%%'' nahraje veškeré lokální změny ze serveru ====== Přehled pokročilých příkazů ====== ===== Uložení práce a pokračování v ní ===== V případě, že se potřebujete přepnout do jiné větve a máte rozdělanou práci, kterou nechcete nyní commitnout, můžete využít příkazů ''%%git stash%%''. * ''%%git stash%%'' uloží Vaší práci do repozitáře a přepne se zpátky na původní commit * ''%%git stash pop%%'' návrat k rozpracovanému projektu * ''%%git stash drop%%'' zahození změn rozpracovaného projektu ===== Submoduly ===== Projekty se obvykle sestávají z několika částí, jako jsou zdrojové kódy, knihovny, případně hardware a dokumentace. Udržet všechny tyto části v jednom repozitáři by bylo neúsnosné a i nepraktické (ne každý potřebuje všechny části). Z tohoto důvodu zde existují submoduly, které se obvykle sdružují do jednoho velkého projektu. Submodul není nic jiného než vlastní repozitář umístěný uvnitř jiného repozitáře. Fyzicky v něm ovšem není, nadřazený repozitář obsahuje pouze adresu, kde se submodul nachází. Následující příkazy pracují se submoduly: * ''%%git submodule add [url]%%'' přidá submodul z adresy //url// do adresáře, kde se zrovna nacházíte a jméno složky bude jméno repozitáře * ''%%git submodule add [url] [adresar]%%'' přidá submodul z adresy //url// do adresáře, kde se zrovna nacházíte a jméno složky bude mít název //adresar// * ''%%git submodule init%%'' inicializuje všechny submoduly v nadřazeném repozitáře (provádí se zpravidla po klonování) * ''%%git submodule update%%'' checkout všech submodulů do stavu commitu nadřazeného repozitáře (provádí se zpravidla po ''%%git submodule init%%''). Jednotlivé submoduly poté nemusí být v poslední verzi a doporučuji provést příkaz ''%%git checkout master%%'' pro každý submodul nebo hromadně ''%%git submodule foreach git checkout master%%'' nebo tomu obdobný příkaz * ''%%git submodule foreach [příkaz]%%'' provede //příkaz// pro každý submodul v daném repozitáři (viz. předchozí příklad) ====== Další návody a odkazy ====== Vizualizovaný cheatsheet pro GIT můžete nalézt [[http://ndpsoftware.com/git-cheatsheet.html|zde]] Oficiální zjednodušený cheatsheet GitLabu [[https://about.gitlab.com/images/press/git-cheat-sheet.pdf|zde]] Kompletní dokumentace ke GITu v češtině (není kompletní zatím) [[https://git-scm.com/book/cs/v2|zde]] nebo v angličtině v podobě PDF, MOBI, EPUB nebo webově [[https://git-scm.com/book/en/v2|zde]]