DVOP3 WBB
Bc. Matěj Cajthaml ©
Smíchovská střední průmyslová
škola a gymnázium
Na jaké typy projektů používáme verzovací systémy?
Proč bychom potřebovali verzovat projekt?
Je např. klasické kopírování složek
verzovací systém?
Na jaké typy projektů se hodí zamykání souborů a spojování změn?
Git neukládá změny, ale jejich snímky
. Pokud se v dané verzi nezměnil, je uložen odkaz
na jeho předchozí verzi.
Pro jakoukoliv práci s Gitem je potřeba mít nainstalovaný Git v příkazové řádce (CLI). Git je pro jednoduchost podporován i s grafickým designem (GUI) — ty prozatím používat nebudeme.
git, který má podpříkazy
Cílem této a následující hodiny není, abyste si zapamatovali všech ~150 příkazů, ale abyste uměli používat každý den základní sadu cca 10 příkazů.
.git
Ve složce .git se nachází veškeré verze souborů (tj. snímky) a informace o
repozitáře. Smazáním této složky přijdete o lokální kopii verzí.
unmodified
staged
1. V repozitáři si vytvořte soubor test.txt a vložte do něj své křestní jméno. Daný
soubor označte jako staged
. Co se nachází ve výstupu příkazu git status?
2. Upravte soubor test.txt aby obsahoval na více i Vaše příjmení. Co se nachází ve
výstupu příkazu git status?
Při označení souboru jako staged
pomocí git add <soubor> se označí
daný stav souboru a ne soubor samotný. Jeho změny v budoucnu již nebudou jako
to-be-commited
označeny.
Jak uděláme, aby i další změny byly zaznamenané a označené jako staged
?
Vidíte v příkazu git status nějaký problém?
patch--staged
stagedsouborů jako revizi
Po commitu se vyčistí staged
soubory a cyklus může pokračovat.
gitGraph
commit id: "Initial commit"
commit id: "Add test.txt"
commit id: "Add test2.txt"
commit id: "feat: test.txt - add my name"
Umí Git zaznamenat přesunutí souboru?
Jak v Gitu smažeme soubor?
-A — označí vše. — označí vše v aktuální složce (rekurzivně)-u — označí modifikace a smazání, bez nových souborů
.gitignore
stagedse vezme a přidá k minulému commitu
-m
Co se stane, když provedeme změny a amend?
gitGraph
commit id: "..."
commit id: "... "
commit id: "... "
commit id: "... "
commit id: "... "
commit id: "... "
commit id: "feat: way to add unlimited pointz"
staged
Vzdálené repozitáře existují v odděleném prostředí. Změnami ve working directory je nemůžeme ovlivnit.
gitGraph
branch origin/master
checkout main
commit id: "..."
commit id: "... "
commit id: "... "
commit id: "... "
checkout origin/master
commit id: "... "
checkout main
commit id: "... "
commit id: "... "
checkout origin/master
commit id: "... "
Jak se na sebe vážou commity?
Větev, která se vytvoří na začátku (main / master) nemá žádné speciální funkčnosti.
gitGraph
branch dev
checkout main
commit id: "..."
commit id: "... "
commit id: "... "
commit id: "... "
checkout dev
commit id: "... "
merge main
checkout main
commit id: "... "
commit id: "... "
checkout dev
commit id: "... "
checkout main
merge dev
-d / -D
Co se stane, když přepneme do nové větve, když máme nějaké rozpracované soubory?
Jak Git ví, v jaké větvi se aktuálně nacházíte?
git log můžeme vidět odkazy na HEAD a větvePři vytvoření commitu ve větvi se rozdělí (rozběhne) historie. Pomocí git log --graph --all zobrazíme celý seznam.
Kolik větví může repoziář mít?
Slučování může být jednoduché (jen se posune ukazatel větve) a nebo složitější, které vytváří speciální commit.
Všechny nevyřešené merge conflicty lze vidět pomocí git status. Až soubory opravíte, můžete se slučováním pokračovat pomocí git commit.
<jméno vzdáleného repozitáře>/*git push vytvořitgit fetch
git fetch změny jen stáhnegit fetch a git merge
gitGraph
branch origin/main
commit id: "1-1a3bee1"
checkout main
commit id: "1-1a3bee1"
commit
commit
commit
checkout origin/main
merge main
commit
commit
commit
checkout main
merge origin/main
Git je verzovací nástroj, který nám dovoluje hlídat verze. Jak se můžeme vrátit k nějaké revizi?
Pro co byste používali Projects?
MAJOR.MINOR.PATCH-*+*Jsou verze správné dle sémantického verzování? Jaká je jejich další verze v MAJOR, MINOR a PATCH?
Jak lze verze seřadit?
Repozitáře mohou být veřejné i soukromé a lze nastavovat, kdo jaké práva k přístupu má.
Veřejné repozitáře se často považují za open-source, tj. že se můžete podívat kód a dokonce jej i sami spustit. Vždy je ale důležitá licence, která má být uvedena.
V případě, že chcete do veřejných repozitářů přispívat, musíte si repozitář forknout (tj. nakopírovat jako vlastní) a nebo ho přidat jako vzdálený repozitář. Poté často tvoříte pull requests.
Přispívat do veřejných repozitářů musíte však často až po tom, co podepíšete
smlouvu s tím, že Vaše práce je veřejná a v podstatě se vzdáváte nějakých práv (nelze smazat, ...).
Bez práv do veřejného repozitáře nelze pushovat, vytvářet větve a další věci.
README.mdKaždý commit by měl být funkční (resp. spustitelný). Proč?
Zpráva commitu by měla reprezentovat, co se v commitu stalo, aby se dalo v historii jednoduše orientovat.
Je důležité znát firemní (nebo personální) styl práce, syntaxe a sémantiky. Názvy commitů by měli být konzistentní (např. v přítomném čase, anglicky, ...).
Historie repozitáře by se měla číst jako kniha a nezveřejňovat nedokončené části
.
Nějaký koncept, který jsme si ukázali, nám toto rozbil — jaký?
Pro jednotlivé issues se tvoří větve, ve kterých se daná issue tvoří — názvy často referují na číslo a zkrácený název.
Např. issue#21: redirects are not consistent
se pojmenuje jako 21-redirect.
.git složka obsahujeNejlepší způsob, jak se učit, je se učit za běhu, když něco děláte a Googlit!
Git nyní bude v různých samostatných i týmových pracích vyžadován a kontrolován.
Děkuji za pozornost!