Vzhled
14 • Verzovací systémy (Git & GitHub)
řeší problém “jak pracovat v týmu na jednom kódu” a “jak se vrátit, když něco rozbiju”
nahrazuje peklo typu oauth_final_v2_opravdu_final_final2.zip
teorie, historie
- git stvořil Linus Torvalds, potřeboval spravovat vývoj Linux Kernelu
- centralizované vs distribuované:
- SVN (subversion): starší systém
- existuje jeden centrální server
- když nejde internet, nemůžeš verzovat
- ukládá primárně rozdíly (diffs/deltas)
- git (distribuovaný):
- každý vývojář má na disku kompletní kopii celé historie projektu
- můžeš pracovat offline a na server (GitHub) to poslat až potom
jak to funguje uvnitř
- staré systémy (SVN) ukládal změny (diffy) mezi soubory
- git ukládá snapshoty.
- každý commit je odraz celého souborového systému v daný moment
- git je chytrý - aby nezabíralo tunu místa, git si udělá jen odkaz
- složka
.git- skrytá složka v kořenu projektu
- tady je celá db historie
- pokud ji smažeš, přijdeš o historii
git workflow
tři stavy, kde se soubor může nacházet:
- working directory (kde reálně píšeš kód)
- staging area: přípravná zóna (
git add), sem dáváš to, co chceš dál poslat - repository: uložená historie (
git commit)
příkazy
základ:
git init - založení nového repozitáře (složka .git)
git clone <url> - stáhne existující projekt ze serveru
klasika:
git add . - přesune změny do “staging area” (. znamená všechno)
git status - řekne ti, co je změněno, co je ve staging area, na jaký branchi seš
git commit -m "zpráva" - vytvoření commitu (checkpointu v historii)
historie a návrat:
git log - historie commitů (kdo, kdy, hash)
git diff - rozdíl mezi 2 verzemi (konkrétní změny, řádek po řádku)
git revert - vrácení commitu
větvení (branching) - umožňuje pracovat mimo master/main
git branch - výpis větví
git branch <název> - vytvoření větve
git switch <název> nebo git checkout - přepnutí do jiné větve
git merge <název> - sloučení větve do té aktuální
- merge conflict: když dva lidi změní stejný řádek - git neví, co je správně
- nutno opravit ručně
vzdálené repozitáře (remotes: GitHub, GitLab)
git = ****nástroj u tebe. GitHub = webová služba (hosting) pro git repozitáře. ****
GitLab = selfhostovatelná obdoba GitHubu
git remote add origin <url> - propojení local gitu se serverem
git push - odeslání změn na server
git pull - stažení změn ze serveru, sloučení
git fetch - jen stažení informací
features githubu:
- fork - kopie cizího projektu k tobě na účet
- pull request (PR) - schvalování tvých změn správci repa - základ open-source metodiky
- issues: nahlašování chyb, úkolů (Jira)
- GitHub Actions: CI/CD - např. automatické testy po každém pushi
.gitignore- tam píšeš, co git nemá vůbec vidět (hesla, .env,node_modules,bin)
praktická úloha
vytvořte repozitář
přidejte
README.mda vytvořte zmněnuzměnte sobor
přidejte změnu
zobrazte historii
porovnejte změny
řešení
1. Vytvořte repozitář
bashmkdir MaturitaProjekt cd MaturitaProjekt git init2. Přidejte README.md a vytvořte změnu
bash# Vytvoření souboru (na Windows v PowerShellu: echo "# Můj Projekt" > README.md) echo "# Můj Projekt" > README.md3. Přidejte změnu (Staging)
bashgit status # Uvidíš, že README.md je červené (untracked) git add README.md git status # Teď je zelené (ready to commit)4. Vytvoření commitu
bashgit commit -m "Initial commit: Přidán README"5. Změňte soubor
bash# Připíšeme další řádek echo "Další text v souboru" >> README.md6. Porovnejte změny
bashgit diff # Ukáže ti + "Další text v souboru"7. Zobrazte historii
bashgit add . git commit -m "Update README" git log # Uvidíš dva commity pod sebou
primárně příkazová řádka
- dale ve vscode, github desktop