44
Verzování zdrojových kódů Úvod Připravil: Ing. Jiří Lýsek, Ph.D. Verze: 20.3.2017

Verzování zdrojových kódůlysek/data/avtk/02verzovani.pdf · Verzování zdrojových kódů Úvod Připravil: Ing. Jiří Lýsek, Ph.D. Verze: 20.3.2017

  • Upload
    others

  • View
    16

  • Download
    0

Embed Size (px)

Citation preview

Verzování zdrojových kódů

Úvod

Připravil: Ing. Jiří Lýsek, Ph.D.

Verze: 20.3.2017

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

Nevýhody

• musím vědět, jak to použít

• nesmím zapomenout, že to mám

používat

strana 6

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

Git

Názvosloví

• remote: vzdálené úložiště (origin)

– master: hlavní větev

• push/pull/rebase

• add, commit

• branch/merge

• diff

strana 17

Workflow - základní

strana 18

Workflow - větvení lokální

strana 19

Workflow - větvení remote

strana 20

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

Git klient - CLI

strana 23

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

Git klient - Source Tree

strana 27

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

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

Názvosloví

• update

• add

• commit

• branch

• merge

strana 40

GUI klient

• Tortoise SVN

– Integrováno do průzkumníku Windows

– https://tortoisesvn.net/

• Pluginy pro IDE

strana 41

Workflow - základní

strana 42

Workflow - větvení

strana 43

Další VCS a odkazy

• https://en.wikipedia.org/wiki/Comparis

on_of_version_control_software

– Bazaar, Mercurial

• https://akela.mendelu.cz/~lysek/

strana 44