Návod ke gitu Osnova 1. K čemu je to dobré? 2. Základní pojmy 3. Větvení 4. Pracovní postup K čemu je to dobré? --------------------- Git je distribuovaný verzovací systém. Pokud předchozí větě rozumíte, můžete tuto sekci celou přeskočit. Pokud jí nerozumíte, potřebujete pro pochopení celého návodu krátkou exkurzi do principů správy verzí. Když na nějakém projektu pracujete delší dobu, určitě vás časem napadne, že by se vám hodila možnost vrátit se k některé starší verzi, která není tak rozvrtaná. Nebo by se vám hodila možnost provnat změny oproti starší verzi. Pokud neznáte verzovací systémy, nejspíše vás jako první napadne zkopírovat si celý adresář projektu stranou jako zálohu "čisté" verze. Kopírování adresářů je ale těžkopádné řešení, protože s rostoucím počtem záloh ubývá místo na disku a ztrácíte přehled, ve které záloze byly jaké úpravy. Verzovací systémy umožňují udržovat historii změn velmi podrobnou, ale zároveň přehlednou a kompaktní, co se týče velikosti na disku. Navíc nabízejí užitečné nástroje pro porovnávání změn, hledání příčin chyb v programech a kombinování úprav od více přispěvatelů do jednoho celku. Celá historie projektu se ve verzovacím systému skládá z revizí a ukládá se do repozitáře (podrobné vysvětlení těchto pojmů najdete v následující sekci). Revize musíte do repozitáře vkládat ručně, když vám připadá, že je příslušná úprava dokončená. Každá revize by měla představovat jednu ucelenou změnu. Pro lepší orientaci v historii se ke každé revizi navíc ukládá stručný popis, co jste změnili. Pamatujte, že verzovací systém nerozumí obsahu souborů, jejichž historii spravuje. Pouze zaznamenává změny tak, aby mohl na požádání zrekonstruovat jejich přesný obsah k okamžiku uložení každé jednotlivé revize. Teď už by vám mělo být jasné, co je to verzovací systém a k čemu je dobrý. Co tedy znamená to slovíčko "distribuovaný"? Starší verzovací systémy vyžadují, aby byl repozitář uložen na centrálním serveru. Git nepotřebuje centrální server, protože každá pracovní kopie zároveň obsahuje i kopii repozitáře a nové revize se dají mezi různými kopiemi stejného repozitáře kopírovat prakticky libovolně. Díky tomu můžete verzovací systém používat, i když zrovna nemáte přístup k síti nebo nejste oficiálním členem projektu. Základní pojmy (příkazy verzovacího systému) --------------------- Repozitář - úložiště kompletní historie projektu. Git je distribuovaný verzovací systém, takže umožňuje repozitář kopírovat příkazem git clone. Nový repozitář založíte příkazem git init v hlavním adresáři projektu. Tím se z adresáře projektu zároveň stane pracovní adresář Gitu. Revize (commit) - základní prvek historie projektu. Každá revize by měla představovat jednu ucelenou změnu. Revize nevznikají automaticky, ale musíte je vytvořit příkazem git commit, kdykoliv to uznáte za vhodné. Pokud se některá změna dotýká více souborů současně, měly by být změny všech těchto souborů uloženy společně v jediné revizi. Anglické slovo "commit" může vystupovat jako podstatné jméno i jako sloveso. Jako podstatné jméno je to synonymum slova "revize", jako sloveso označuje vytvoření nové revize. Větev (branch) - paralelní historie části projektu. Git umožňuje rozdělit historii projektu na více oddělených linií, aby například experimentální vývoj nových funkcí programu nebránil opravám chyb ve stabilní verzi. Historie projektu se rozdělí založením nové větve (pro pojmenování větve slouží příkaz git branch), každá sada změn se provede odděleně v příslušné větvi, a pak se obě větve opět sloučí příkazem git merge. Pro přepínání mezi větvemi slouží příkaz git checkout. Mechanizmus větví se interně využívá také pro začleňování změn z jiných kopií repozitáře. Pokud změny z cizího repozitáře nelze triviálně zařadit za poslední změnu ve vlastním repozitáři, Git pro cizí změny vytvoří novou větev a automaticky spustí příkaz merge. Pracovní adresář - složka se soubory, ve které pracujeme a upravujeme soubory (git je zaměřen na psaní zdrojového kódu počítačových programů, tj. zejména textové soubory, např. s koncovkou .txt) Ukládání souborů na pevný disk počítače vždy verzi přepisuje, pak ztrácíme data -> požadavek uchovávání více minulých verzí pracovního adresáře, nejen té poslední V daném pracovním adresáři aktivujeme git příkazem git init nebo můžeme stáhnout existující repozitář (viz níže) příkazem git clone. Git od počátku nesleduje pracovní adresář vůbec. Aby git nějaký soubor sledoval, musíme mu to přikázat příkazem git add soubor.txt. Pak bude git hlídat, zda se soubor změnil. Soubory, které nechceme vůbec sledovat, naopak vypočteme v souboru .gitignore. Změny a celkový stav zobrazíme příkazem git status. Všechny informace o sledovaných souborech, verzích atd. se uchovávají ve skryté složce .git v pracovním adresáři. Všimněte si, že po dalších změnách sledovaného souboru vypisuje příkaz git status změny červeně. Tyto změny ještě nejsou připraveny k zápisu. Abychom je připravili k zápisu, použijeme opět příkaz git add soubor.txt. Tím se soubor dostane do tzv. přípravného prostoru. Přípravný prostor - seznam souborů, které si sem odkládáme, aby byly v následující verzi uloženy, pak je uložíme najednou git add má tedy vedle pokynu ke sledování souboru i druhý význam, a to umístění změněných souborů do přípravného prostoru Zapisovaná verze obsahuje všechny soubory, které jsme umístili do přípravného prostoru, ale také všechny další soubory, které sledujeme a které nebyly změněny. Jakmile je verze zapsána příkazem commit, můžeme ji v budoucnu kdykoliv vyvolat. Před prvním zápisem verze pracovního adresáře (commit) ale musíme správně nastavit svou identitu: git config -g "mail" atd. git commit -m "Popis změny" Tím jsme si také vysvětlili, co je to verzovací systém. Verzovací systém - ukládá jednotlivé předchozí verze pracovního adresáře a po zadání vhodného příkazu (checkout) je schopen je zobrazit změnou obsahu pracovního adresáře Repozitář - pracovní adresář s verzovacím systémem, uložený buď lokálně (na vašem počítači) nebo na serveru (např. github) Větvení ----------- Pracovní postup ---------------------- Model push Model pull request