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

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 of Verziókövető rendszerek alkalmazása fejlesztési projektekben

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