# For more fun, see https://github.com/Gibbsdavidl/CatterPlots
library(CatterPlots)
<- -10:10
x <- -x^2 + 10
y <- catplot(xs=x, ys=y, cat=3, catcolor='#000000FF')
purr cats(purr, -x, -y, cat=4, catcolor='#FF0000')
aneb jak vyvíjet, verzovat a sdílet kód
Představte si, že všichni společně píšeme nějaký článek a zkuste do Autorů dopsat své jméno:
Git je v informatice distribuovaný systém správy verzí (VCS) vytvořený Linusem Torvaldsem pro vývoj jádra Linuxu.
Wikipedia – upraveno
Poznámka
Ke stejným účelům slouží i Mercurial, Subversion (SVN) a GNU Bazaar – ty jsou avšak značně méně používané.
Git si neukládá pouze změny v souborech, ale vždy aktuální verzi. Pokud se soubor nezmění, git si uloží pouze ukazatel na stejný soubor do poslední verze, ve které se změnil.
Repozitář
Git si databázi (nejen) změněných souborů uchovává ve složce .git/
.
Každá verze se v gitu nazývá commit a posloupnost po sobě jdoucích commitů se nazývá branch (větev). Celý projekt i s databází verzí (složka .git/
) nazýváme repozitář (repo).
Sloučení 2 větví se nazývá merge a provádíme ho často pomocí tzv. merge requestu.
working_script.R
a broken_script.R
working_script.R
Ignorované soubory
Některé soubory můžeme chtít ignorovat (např. velké datasety nebo citlivé údaje) – to provedeme přidáním do .gitignore
souboru
git init
git add <file>
*
pro libovolný soubor)
git stage <file>
git commit
git status
Nesledované soubory / nezměněné soubory / změněné soubory / připravené změny / repozitář
git clone
git fetch
git merge
new-feature
a main
)
git pull
git fetch
následovaný git merge
git push
Do většiny populárních textových editorů a IDE, včetně RStudia, VS Code (viz také plugin Gitlens), Matlabu…
Linux
Závislé na distribuci:
sudo apt-get install git
(nebo git-all
)sudo yum install git
Na školních počítačích ve Windows je git nainstalován.
Nebo jej můžeme otevřít v textovém editoru – ukážeme si postup v RStudiu
V momentální chvíli bude potřeba přidat nebo editovat nějaký soubor. Na ukázku můžeme např. přidat working_script.R
library(devtools) # CatterPlots installation
install_github("Gibbsdavidl/CatterPlots")
# For more fun, see https://github.com/Gibbsdavidl/CatterPlots
library(CatterPlots)
x <- -10:10
y <- -x^2 + 10
purr <- catplot(xs=x, ys=y, cat=3, catcolor='#000000FF')
cats(purr, -x, -y, cat=4, catcolor='#FF0000')
# For more fun, see https://github.com/Gibbsdavidl/CatterPlots
library(CatterPlots)
x <- -10:10
y <- -x^2 + 10
purr <- catplot(xs=x, ys=y, cat=3, catcolor='#000000FF')
cats(purr, -x, -y, cat=4, catcolor='#FF0000')
View > Show Git
)git add working_script.R
git commit -m "Added script which uses CatterPlots R package"
Lokální HEAD
ukazuje na náš nový commit, zatímco origin/HEAD
(tj. HEAD
na serveru) ukazuje na Initial commit, který udělal GitLab za nás.
V RStudiu “pushneme” lokální commity pomocí
V příkazové řádce bychom použili příkaz git push
.
To stejné bude i vidět i na GitLabu.
Na GitLabu pod Code > Branches > New Branch
můžeme vytvořit novou větev
V RStudiu můžeme jednoduše změnit větev pomocí
change-color
změňte barvu koček konvexní parabolychange-shape-and-color
z main
1
, 2
nebo 3
)Merge request je “žádost” o sloučení dvou větví. Na GitHubu je to Pull request.
Samostatná práce
Vytvořte merge request na sloučení change-shape-and-color
do main
Situace
Našli jsme na GitLabu (nebo GitHubu apod.) nějaký užitečný repozitář, který bychom chtěli pozměnit pro naše potřeby
Při vývoji projektu je dobré používat větve. Zvláště pokud na projektu dělá více lidí.
Je tak možno mít rozpracovaných několik věcí zároveň a přitom i funkční verzi projektu na hlavní větvi.
Dobré je i používat větve pro různá prostředí:
main
— “produkce” (něco, co se nesmí rozbít)testing
— prostředí, do kterého se “mergují” hotové větve předtím, než se dostanou do produkcestaging
pro krok mezi testovacím prostředí a produkcíJe dobré psát stručné a srozumitelné komentáře ke commitům, aby bylo jasné, co se v nich změnilo a nikdo se nemusel dívat přímo do kodu
README.md
– krátký úvod do projektu, který by měl obsahovat:
LICENSE
– licence, pod kterou je projekt publikován
CHANGELOG.md
, CONTRIBUTING.md
,…
README.md
)Situace
Bylo by užitečné označit některý commit za význačný – např. se může jednat o stabilní verzi projektu.
Řešení: Tags
Štítky (tags) slouží právě k tomuto účelu – umožňují ostatním se jednoduše zorientovat, jak by měli projekt naklonovat, aby měli stabilní verzi apod.
Navíc: Releases
Zvláště u repozitáře nějakého programu můžeme chtít spolu s označením commitu stabilní verze ještě přiložit např. zkompilovaný kód – přesně to “release” umožňuje.