Upload
others
View
20
Download
0
Embed Size (px)
Citation preview
Co to je?
• Systém, který dokáže uchovat historii
změn ve zdrojovém kódu
– datum, autor, konkrétní změny
– každá změna je identifikovatelná
strana 2
VCS = version control
system
K čemu je to dobré?
• uchováme historii změn v textových
souborech
– zdrojové kódy
– TeX dokumenty
– obecně jakákoliv data v textovém formátu
• můžeme řídit verze
strana 3
K čemu je to dobré?
• když pracujeme v týmu
– komentáře změn
• možnost sledovat změny
– možnost najít autora chyby
• možnost vrátit se k jiné verzi
• možnost větvit kód a spojovat větve
• záloha
– server je obvykle jiný stroj
strana 4
K čemu je to dobré?
• možnost automatizace
– v repositáři lze zajistit např. automatické
spuštění testů
• reálně se to
využívá
– není to žádný
akademický
výmysl :-)
strana 5
Jak kód NEsdílet
• Flashdisky, e-mail apod.
– nemůžete pracovat paralelně
– nemáte zálohu
• už vůbec ne historii
• Dropbox, Google Drive apod.
– nemáte historii kódu a komentáře
– při paralelní práci dvou a více lidí je kód
často v nefunkčním stavu
strana 7
Čím tedy
• Git
• SVN - Subversion
• A jiné
– CVS - Concurrent version system
– Mercurial
– …
strana 8
Obecné názvosloví
• working copy
• repository/repo
• commit
– balík změn ve zdrojovém kódu
• branch/merge
– větev, větvení, spojení větví
• tag
– označení významného commitu (nové verze)
strana 9
Centralizovaný VS distribuovaný
• Distribuovaný systém pracuje lokálně
– lokální přírůstky
– práce i offline
– složitější workflow
– rychlejší
• Git je distribuovaný
• SVN je centralizovaný
strana 10
Doporučení
• na server by se měl vždy dostat
spustitelný a funkční kód
– vazba na CI
• pokusy a nové nápady je dobré umístit
do větví
• jedna větev pro to, co distribuujeme a
jiná pro vývoj (stable/release)
strana 11
Doporučení
• každý commit by měl být dostatečně
malý, aby ho mohl každý v týmu
pochopit (zkontrolovat)
– stručně popsat změny v kódu a ideálně i
důvody k nim
• oprava chyby, žádost zákazníka…
• návaznost na tiketovací systém (ID požadavku)
• => dohledatelnost návazností
• tagujte verze
strana 12
Týmové programování
• nebojte se sdílet kód
– společně vytvoříte lepší produkt
• nebojte se připomínek
– posunou vás
• čtěte cizí kód
– naučíte se spoustu věcí nebo pomůžete
• připomínkujte, vylepšujte
– věcně
strana 13
Co do repositáře nepatří?
• velká binární data
– výsledný build aplikace, vývojové nástroje, …
• lokální konfigurace (hesla!)
– nahradit např. souborem *.example
– nemazat *.example!!! v repo!
• knihovny a frameworky (lze stáhnout)
– přes Composer, Bower, npm nebo Maven
apod.
strana 14
Veřejné
repositáře
Jak na větve
strana 15
• minimálně
– release
– pracovní
• lépe
– release
– pracovní
– nové vydání
– pro funkce
Názvosloví
• remote: vzdálené úložiště (origin)
– master: hlavní větev
• push/pull/rebase
• add, commit
• branch/merge
• diff
strana 17
Kde a jak si můžu Git vyzkoušet
• doma - jen lokálně
– nemáte origin, můžete jen větvit a
commitovat
• GitHub, BitBucket, ProjectLocker, …
– za určitých podmínek zdarma
strana 21
Git - setup
• na windows lze instalovat globálně
nebo jen ve speciální příkazové řádce
(bash)
• je nutné zadat email a jméno vývojáře
pro commity
• někdy se generuje SSH klíč pro
komunikaci s remote bez nutnosti psát
heslo
strana 22
Základní příkazy
• git fetch, git pull
• git add .
• git status
• git diff
• git commit -m "…"
• git push
strana 24
Základní příkazy větvení
• git branch
• git checkout
• git merge
– spojení větví
• git rebase
– stažení změn do větve z jiné větve
• před přepnutím větve vše commit-nout!
strana 25
Git klienti - GUI
strana 26
• SourceTree - jen Win a Mac
– https://www.sourcetreeapp.com/
• GitKraken - Win+Mac+Linux
– https://www.gitkraken.com/
• další GUI:
– https://git-scm.com/downloads/guis
– možné použít i pluginy pro IDE
Konflikt
• konflikt
– situace, kdy změníte paralelně stejný
soubor jako někdo jiný
• nebo vy sami v jiné větvi
– oba programátoři mají stejný výchozí bod
– oba udělali změnu ve stejné části kódu
strana 28
Jak se vyvarovat konfliktu?
• !!! před vlastní prací si stáhnout
vždy aktuální verzi !!!
• malé a časté commity
strana 29
Pull i před
commitem
Jak konflikt vyřešit?
• je nutné ručně projít soubory, které
jsou problémové a vybrat kód, který
chcete zachovat
– ten, který mažete můžete např.
zakomentovat
• ale stejně je v historii
strana 30
.gitignore
• soubor s cestami, kde definujeme
nesledované soubory
– může být i v podadresáři
– viz. slide "Co do repositáře nepatří?"
– pozor:
• /cesta/k/souboru VS soubor VS *maska*
– https://git-scm.com/docs/gitignore
strana 31
.gitattributes
• Lokální nastavení Gitu
– Např. zakončení řádků v určitých
souborech
• CRLF x LF
– https://git-scm.com/docs/gitattributes
strana 32
Hooks
• lze automaticky spustit nějakou úlohu
– post-commit, pre-push apod.
– skripty ve složce .git/hooks
– vhodné např. pro centrální server, kde je
automatické spuštění testů nebo deploy
• záleží na roli repozitáře
strana 33
Git na serveru
• pokud máte vlastní server, kde chcete
hostovat Git repo:
– git init --bare
strana 34
prázdný repozitář,
do kterého můžete
poslat vlastní kód
přes push
SVN
• Starší projekt (r. 2000)
• Nyní pod Apache foundation
– http://subversion.apache.org/
strana 36
SVN x Git
• SVN nemá lokální historii
– vše se musí přenést na server
– nelze commitovat offline
• Použitelné na rychlé (lokální) síti
strana 37
SVN x Git
• Git je decentralizovaný
• Git je rychlejší (lokální historie,
commity, komprese)
• Git může mít jen 1 projekt v repositáři
– jinak to nedává smysl
• SVN připomíná spíš souborový server
s pamětí změn
• větve jsou kopie v jiné složce
strana 38
SVN - hlavní složky
• trunk: hlavní větev
• branch: adresář s větvemi
• tag: adresář
s tagovanými
verzemi
strana 39
GUI klient
• Tortoise SVN
– Integrováno do průzkumníku Windows
– https://tortoisesvn.net/
• Pluginy pro IDE
strana 41
Další VCS a odkazy
• https://en.wikipedia.org/wiki/Comparis
on_of_version_control_software
– Bazaar, Mercurial
• https://akela.mendelu.cz/~lysek/
strana 44