Írta: tom1964h

Bevezetés a verziókezelésbe

Beszéljünk arról, hogy hogyan dolgozunk együtt másokkal. Ugyanis a programozás világában - vagy inkább a szoftverfejlesztés világában, hiszen ebben nem csak programozók vesznek részt - nagyon fontos, hogy együtt tudj dolgozni másokkal a csapatodon belül, vagy akár más csapatokkal.

Hogy néz ki ez a való életben? Akár kicsi, akár nagy cégnél dolgozol, alapvető, hogy elég pár embernek hozzáférést biztosítani a kódhoz, és az is nagyon fontos, hogy ez védve legyen az illetéktelen és/vagy hozzá nem értő felhasználóktól. Itt az “illetéktelen” alatt nem feltétlenül azt kell érteni, hogy a konkurens cég embere vagy egy mezei felhasználó ne férhessen hozzá, de gondoljunk arra, hogy az egyik igazgató - aki lehet hogy nem ért semmit a programozáshoz - nehogy hozzáférést kapjon ahhoz a kódhoz, amit napi szinten frissítetek. Ebben lehet egy csomó félkész vagy nem teljesen működő kód.

Nagyon fontos annak a felismerése, hogy egy fejlesztés során különböző embereknek különböző interakcióba lépnek egymással és a termékkel. A produktum lehet bármi: lehet egy szakdolgozat, egy többszerzős tudományos munka, egy regény kézirata, egy zeneszám kottái, egy weboldal, tudásbázis, wiki-oldalak, forráskódok, konfigurációs file-ok, egy Java-FX alkalmazás, lehet egy Java szerver, vagy bármi más szoftvertermék mobiltelefonra vagy laptopra. Az üzembiztonság javítására sokféle módszertant dolgoztak ki, hogy maga ez a folyamat rendszerezetten menjen végbe és a produktum megbízhatóan leszállítható legyen.


A szoftverfejlesztési módszertani keretekben alkalmazott három alapvető megközelítés (Wikipedia)


A profi, kiterjedt, távoli elérésű szoftverek korában ráadásul a fejlesztésnek soha nincs vége, folyamatos gondozást igényel a projekt, számos alprojektre bomlik, új verziók készülnek, stb. Erre a helyzetre is készültek pl. CI/CD módszertanok, amit számos eszköz, pl. a GitHub vagy a Docker vagy a Kubernetes vagy akár az Amazon AWS támogat.

A repository - tároló

Ismerkedjünk meg a repository fogalmával, ami egy tárhely, egy virtuális raktár. Ez eltárolja a munkánkat, de annál többet is tesz, mint egy egyszerű raktár: rendszerez és hozzáférést biztosít. A repository helyes működése leginkább egy személyi asszisztenshez hasonlítható. A többféle értelemben használt repository-ra itt a software repository megjelölés vonatkozik. Ezzel összefüggésben említhetjük a information repository fogalmát, amely alatt inkább digitális könyvtárat értünk, illetve a knowledge base-t, azaz a tudásbázist, amellyel itt nem foglalkozunk.

Tételezzük fel, hogy egy nagyon egyszerű projekten dolgoztok hárman, egy weboldal készül, ami 3 db html fájlból áll: az index.html, ami megjelenik a szervereden (egy webszerveren). Ez az index.html tartalmaz linkeket is - mondjuk egy menüben - ami átirányít a kapcsolat.html-re, illetve van benne egy “rólunk” menü is. Mindenkinek külön feladatai vannak:

  • te megírod a kezdőképernyőt,
  • a Flóra megírja a “rólunk” szekciót,
  • és valaki (Peti) pedig a “kapcsolat” menüponton dolgozik.

Hogyan lehetne ezt nagyon egyszerű módon csinálni? Ha egy közös tárhelyre töltitek fel az állományokat, akkor könnyen előfordulhat, hogy kell valamit módosítani, ami mégse lett olyan jó, hanem a kettővel előbbi verzió mégis megfelelőbb lehet. Ha nincs nálad a régi verzió helyi másolata (local copy), akkor a régi jó tartalom elveszett.

Erre a problémára találták fel a veriókezelést. A Git vagy az SVN vagy bármilyen verziókezelő rendszer pont azért lett kifejlesztve, hogy ebben nekünk segítsen. A verziókezelő rendszerek fogják a fájlokat és azt mondják: ami most van nekem, egy adott könyvtárban (repository-ban) (egy tárolóban) megtalálható, azt egy verzónak tekintem (a repository-t általában repó szóval rövidítik).

Ha úgy dönt Peti barátod, hogy módosít a kapcsolat.html-en és ezt elküldi, a verziókezelő rendszer megkapja: “el-commit-olták” (tehát elküldték neki ezt a módosítást), elmenti ezt az új fájlt, de őrzi még a régit is!

Mert ha bármelyik programozó vagy a projektmenedzser (egy adott projektben ő szokta ezeket irányítani általában) úgy veszi észre, hogy a friss nem megfelelő (hibás, nem tetszik a színe, a szaga, tönkretesz más dolgokat, félreértés az egész, stb stb), akkor bármikor vissza tudunk állni az előző verzióra, amiben még a régi fájl volt. Ezt a repository őrzi rendezetten.

Nagy fejlesztéseknél a programozási feladat hamar komplex lehet, hiszen amikor egy újabb verziót hozunk létre, akkor összekeverjük a mostani változatot egy régi változat kódrészletével. Fontos megőrizni a visszakereshetőséget és a visszaállíthatóságot, mert nagyobb projektek esetén nem mindig tudhatunk róla sajnos, hogy a módosítás, amit elvégeztünk egy projekten az milyen hatást gyakorol mások munkájára.


teammunka Git segítségével: a központi repo másolatait a fejlesztők gépei is őrzik

A verziózás - versioning

A szoftverek fejlesztésének és értékesítésének szabályos életciklusa van. Ebben lényeges elemek a fejlesztési irányok kijelölése, majd a fejlesztési időszak lezárása, a különböző verziók kialakítása, a szoftver-kiadás és a hibakezelés. Maga a verzió kifejezés is sok értelmet kapott már a fejlesztésben, pl.:

  • a kereskedelmi szoftvertermékeket (operációs rendszereket, irodai eszközöket és játékszoftvereket egyaránt) marketing és más szempontok szerint nevezik el sokszor, a versioning gyakorlata cégenként eltérő lehet;
  • megint más a belső verziószámozás;
  • a napi programozói rutin ehhez képest projektekre és azon belül elemi fejlesztési lépésekre bomlik, amelyek elnevezése / jelölése sokszor teljesen eltérhet a nyilvános verziószámozásoktól.