Verziókövető rendszerek alkalmazása fejlesztési projektekben
-
Upload
open-academy -
Category
Documents
-
view
1.009 -
download
1
description
Transcript of 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
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.
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)
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
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!
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?”
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?”
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
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...
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
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
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 ✓
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
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
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
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
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
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
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!!!)
Ö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ó.
Köszönöm.Köszönöm.
Gyöngyösi PéterGyöngyösi Pé[email protected]@balabit.hu