verziókövető rendszerek alkalmazása fejlesztési projektekben

22
Verziókövető Verziókövető rendszerek alkalmazása rendszerek alkalmazása fejlesztési projektekben fejlesztési projektekben Gyöngyösi Péter, BalaBit Gyöngyösi Péter, BalaBit

Upload: open-academy

Post on 08-Jun-2015

1.009 views

Category:

Documents


1 download

DESCRIPTION

Mi az, amit minden fejlesztőnek tudnia kellene, de szinte nincs egyetem, ahol oktatnák? Ezek a verziókövető rendszerek, amit minden jól működő fejlesztőcég alkalmaz.

TRANSCRIPT

Page 1: Verziókövető rendszerek alkalmazása fejlesztési projektekben

Verziókövető Verziókövető rendszerek alkalmazása rendszerek alkalmazása fejlesztési projektekbenfejlesztési projektekben

Gyöngyösi Péter, BalaBitGyöngyösi Péter, BalaBit

Page 2: Verziókövető rendszerek alkalmazása fejlesztési projektekben

Mi az a verziókezelés?Mi az a verziókezelés?

Egy adathalmaz konzisztens állapotait és Egy adathalmaz konzisztens állapotait és változását rögzíteni képes és azt változását rögzíteni képes és azt visszakövethetővé tevő rendszer.visszakövethetővé tevő rendszer.

Page 3: Verziókövető rendszerek alkalmazása fejlesztési projektekben

Miért verziókezelünk?Miért verziókezelünk?

Mert egy nagyon jó eszköz.Mert egy nagyon jó eszköz.

(és a jó eszközöket szeretjük)(és a jó eszközöket szeretjük)

Page 4: Verziókövető rendszerek alkalmazása fejlesztési projektekben

Hogy tudjuk, mi történtHogy tudjuk, mi történt

• mikor mi és hogyan mikor mi és hogyan került a kódbakerült a kódba

• látni a kontextustlátni a kontextust

• ticketekkel, bugokkal ticketekkel, bugokkal összekötni a kódotösszekötni a kódot

• ad egy timeline-tad egy timeline-t

Page 5: Verziókövető rendszerek alkalmazása fejlesztési projektekben

BackupBackup

• nem kell félni a változtatásoktólnem kell félni a változtatásoktól

• szimpla backup egy idő után töröl, ha te törölszszimpla backup egy idő után töröl, ha te törölsz

• könnyen vissza lehet nyerni bármi korábbi könnyen vissza lehet nyerni bármi korábbi állapototállapotot

• olcsón ki lehet próbálgatni dolgokatolcsón ki lehet próbálgatni dolgokat

• build-management alapvetése: mindent build-management alapvetése: mindent lehessen újrabuildelni!lehessen újrabuildelni!

Page 6: Verziókövető rendszerek alkalmazása fejlesztési projektekben

Regression-keresésRegression-keresés

• „„Ez hogy működhetett valaha, és mikor törtük Ez hogy működhetett valaha, és mikor törtük el?”el?”

Page 7: Verziókövető rendszerek alkalmazása fejlesztési projektekben

EgyüttműködésEgyüttműködés

• több ember dolgozik a projekten – valahogy több ember dolgozik a projekten – valahogy össze kell fésülni a munkájukössze kell fésülni a munkájuk

• „„Na és ezért kinek törjem el a kezét?”Na és ezért kinek törjem el a kezét?”

Page 8: Verziókövető rendszerek alkalmazása fejlesztési projektekben

Mindez a gyakorlatbanMindez a gyakorlatban

• miért a git?miért a git?

• kollaborációkollaboráció

• fejlesztés-trackingfejlesztés-tracking

• backupbackup

• regression-keresésregression-keresés

Page 9: Verziókövető rendszerek alkalmazása fejlesztési projektekben

Miért a git?Miért a git?

• gyors, effektívgyors, effektív

• sok hasznos tool létezik hozzások hasznos tool létezik hozzá

• az elosztottság rengeteg speciális helyzetben az elosztottság rengeteg speciális helyzetben egy nagyon kényelmes, hasznos dologegy nagyon kényelmes, hasznos dolog

• az open source világhoz ezer szállal kötődünk, az open source világhoz ezer szállal kötődünk, ott meg egyre dominánsabb...ott meg egyre dominánsabb...

Page 10: Verziókövető rendszerek alkalmazása fejlesztési projektekben

Kollaboráció – a BalaBitKollaboráció – a BalaBit

• sok programnyelv, heterogén sok programnyelv, heterogén fejlesztőkörnyezetfejlesztőkörnyezet

• security termékek → erős kontroll a mainline-onsecurity termékek → erős kontroll a mainline-on

• kis csapatok...kis csapatok...

• ...de sok közös komponens csapatok közt...de sok közös komponens csapatok közt

• újrabuildelhetőség nagyon fontosújrabuildelhetőség nagyon fontos

• sok külső, open source függőségsok külső, open source függőség

Page 11: Verziókövető rendszerek alkalmazása fejlesztési projektekben

Kollaboráció – a cherry-Kollaboráció – a cherry-pickpick

• terméken, csapaton belül terméken, csapaton belül használjuk főleghasználjuk főleg

• alapkoncepció: alapkoncepció:

• fejlesztőnek/tesztelőnek fejlesztőnek/tesztelőnek saját ág, ami az ő játszóteresaját ág, ami az ő játszótere

• az integrálandó patcheknek az integrálandó patcheknek kell jóknak lenni, azontúl kell jóknak lenni, azontúl olyan szemétdomb lehet, olyan szemétdomb lehet, amit nem szégyellamit nem szégyell

mainline

dev-gyp

patch 1 ✓

patch 2 ✓

patch 3 ✓

patch 4 ✓

patch 5 ✓

patch 6 ✓

jatekpatch 1

✓ gyp patch 1

jatekpatch 2

jatekpatch 3

✓ gyp patch 2

Page 12: Verziókövető rendszerek alkalmazása fejlesztési projektekben

Kollaboráció – a cherry-Kollaboráció – a cherry-pickpick

• integrálás:integrálás:

• közös review (személyesen, közös review (személyesen, semmi fancy tool)semmi fancy tool)

• patcheket szedünkpatcheket szedünk

• javíthatunk, összevonhatunk, javíthatunk, összevonhatunk, darabolhatunkdarabolhatunk

• conflict-feloldás itt, ha túl sok, conflict-feloldás itt, ha túl sok, visszadobjukvisszadobjuk

• tiszta, önmagában értelmezhető tiszta, önmagában értelmezhető patchek kellenekpatchek kellenek

dev-gyp

patch 1 ✓

mainline

patch 2 ✓

patch 3 ✓

patch 4 ✓

jatekpatch 1

✓ gyp patch 1

jatekpatch 2

✓ gyp patch 2

jatekpatch 3gyp feature 1 ✓

✓ gyp patch 3gyp feature 2 ✓

Page 13: Verziókövető rendszerek alkalmazása fejlesztési projektekben

Kollaboráció – a cherry-Kollaboráció – a cherry-pickpick

• fejlesztő időnként rebase-elfejlesztő időnként rebase-el

• kidobja a saját patcheitkidobja a saját patcheit

• behúzza magához a mainline-tbehúzza magához a mainline-t

• visszarakja egyesével a patcheket, visszarakja egyesével a patcheket, conflictot old felconflictot old fel

• amik már felkerültek, itt kidobjaamik már felkerültek, itt kidobja

• lehet itt is szerkeszteni, átrendezni, lehet itt is szerkeszteni, átrendezni, kidobálnikidobálni

dev-gypmainline

jatekpatch 1

✓ gyp patch 1

jatekpatch 2

✓ gyp patch 2

jatekpatch 3

✓ gyp patch 3

patch 1 ✓

patch 2 ✓

patch 3 ✓

patch 4 ✓

gyp feature 1 ✓

gyp feature 2 ✓

patch 1 ✓

patch 2 ✓

patch 3 ✓

patch 4 ✓

gyp feature 1 ✓

gyp feature 2 ✓

jatekpatch 1

jatekpatch 2

jatekpatch 3

Page 14: Verziókövető rendszerek alkalmazása fejlesztési projektekben

Kollaboráció – a cherry-Kollaboráció – a cherry-pickpick

• git alapon mindez:git alapon mindez:

• mainline, fejlesztői ág: git repository-kmainline, fejlesztői ág: git repository-k

• git remote-tal egymásnak megadvagit remote-tal egymásnak megadva

• git cherry, git cherry-pickgit cherry, git cherry-pick

• git rebase –interactivegit rebase –interactive

• kicsit buta, scripttel kell neki segítenikicsit buta, scripttel kell neki segíteni

Page 15: Verziókövető rendszerek alkalmazása fejlesztési projektekben

Kollaboráció – a mergeKollaboráció – a merge

• főleg csapatok közt, közös főleg csapatok közt, közös komponensekhezkomponensekhez

• a git jobban „szereti”, a git jobban „szereti”, effektívebb eszközökeffektívebb eszközök

• de kifogástalan minőségű de kifogástalan minőségű ágakra van szükség!ágakra van szükség!

• egy Linux kernel-szintű egy Linux kernel-szintű dolognál ez belefér...dolognál ez belefér...

• ...de egy átlagos fejlesztői ...de egy átlagos fejlesztői projektnél ez túl drágaprojektnél ez túl drága

scb-mainline

zorp patch 1 ✓

zorp-mainline

zorp patch 2 ✓

zorp patch 3 ✓

zorp patch 4 ✓

✓ scb patch 2

✓ scb patch 4

✓ scb patch 1

✓ scb patch 3

Page 16: Verziókövető rendszerek alkalmazása fejlesztési projektekben

Kollaboráció – a mergeKollaboráció – a merge

• tipikusan mainline-ok tipikusan mainline-ok közöttközött

előre meghatározott előre meghatározott pontokon (pl. új pontokon (pl. új release kezdetekor) release kezdetekor) merge-ölünkmerge-ölünk

scb-mainline

zorp patch 1 ✓

zorp-mainline

zorp patch 2 ✓

zorp patch 3 ✓

zorp patch 4 ✓

✓ scb patch 2

✓ scb patch 4

✓ scb patch 1

✓ scb patch 3

merge ✓

zorp patch 4 ✓

zorp patch 5 ✓

✓ scb patch 5/A

✓ scb patch 5/B

Page 17: Verziókövető rendszerek alkalmazása fejlesztési projektekben

Fejlesztés követéseFejlesztés követése

- rendes verziókezelést követelünk meg, amit a git támogat- rendes verziókezelést követelünk meg, amit a git támogat

nem fájlonként, hanem patchenként commitnem fájlonként, hanem patchenként commit

olcsó, egyszerű brancheket csinálni, emiatt könnyebb tisztán olcsó, egyszerű brancheket csinálni, emiatt könnyebb tisztán tartani a dolgokattartani a dolgokat

alap git toolok elegendőek:alap git toolok elegendőek:

git loggit log

gitkgitk

gitwebgitweb

Page 18: Verziókövető rendszerek alkalmazása fejlesztési projektekben

BackupBackup

pofátlanul könnyen indítható verziókezeléspofátlanul könnyen indítható verziókezelés

git init; git add .; git commitgit init; git add .; git commit

olcsó, könnyű branchelésolcsó, könnyű branchelés

git stashgit stash

git checkoutgit checkout

git taggit tag

Page 19: Verziókövető rendszerek alkalmazása fejlesztési projektekben

Regression-keresésRegression-keresésgit checkout → visszaállás tetszőleges állapotragit checkout → visszaállás tetszőleges állapotra

git log fájlra, git blamegit log fájlra, git blame

best thing since slice bread: git bisectbest thing since slice bread: git bisect

git bisect startgit bisect start

git bisect good release-1.0.0git bisect good release-1.0.0

git bisect badgit bisect bad

[make check][make check]

git bisect good/bad...git bisect good/bad...

(scriptelhető is!!!)(scriptelhető is!!!)

Page 20: Verziókövető rendszerek alkalmazása fejlesztési projektekben

ÖsszegzésÖsszegzésa verziókezelés nem szükséges macera, hanem a verziókezelés nem szükséges macera, hanem

eszköz!eszköz!

...de ehhez az kell, hogy ne legyen útban:...de ehhez az kell, hogy ne legyen útban:

akkor kelljen dolgozni vele, amikor akarunkakkor kelljen dolgozni vele, amikor akarunk

legyen gyorslegyen gyors

legyen megbízhatólegyen megbízható

legyen flexibilislegyen flexibilis

...és a git erre nagyon jó....és a git erre nagyon jó.

Page 21: Verziókövető rendszerek alkalmazása fejlesztési projektekben

Köszönöm.Köszönöm.

Gyöngyösi PéterGyöngyösi Pé[email protected]@balabit.hu

Page 22: Verziókövető rendszerek alkalmazása fejlesztési projektekben