DVOP WBB
Bc. Matěj Cajthaml — SSPŠ
©
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 30 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.md
Kaž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.