CVS (Concurrent Versions System)
1,
Általános ismertetés
CVS egy kliens-szerver architektúrára épülő, ingyenes
verzió követő rendszer, melynek alapjait Dick Grune fektette le 1986 júliusában
pár shell script formájában. Segítségével egyszerre több emberek dolgozhat
ugyanazon a projekten (akár ugyanazokon a file-okon!), anélkül, hogy a
különböző fejlesztők változatai összekeverednének.
A CVS az RCS (Revision Control System) változatkezelő
rendszeren alapul, kiterjesztve azt olyan módon, hogy a fájlok csoportjaira menedzsment
eszközöket biztosít (az RCS egyes file-ok menedzselését valósította meg).
2,
Működése
A projekthez szükséges file-okat egy központi
„repository”-ban tárolja a CVS. A file-okat verzió-követve tárolja, vagyis
minden „commit”-olás után új verzió keletkezik (de a régiek sem vesznek el!).
Ebből a „repository”-ból (a megfelelő jogosultságok
birtokában) egy adott fejlesztő bármikor készíthet egy lokális másolatot a
saját filerendszerébe a „check out” paranccsal. Később, amennyiben újabb verzió
érhető el valamelyik file-ból, az „update” paranccsal frissítheti azt.
A „check out”-olt file-okat szabadon lehet módosítani. Ha
ezalatt valamilyen módosítás kerül be a „repository”-ba, akkor az „update”
össze-„merge”-öli az új részeket a lokálisan tárolt változatban a felhasználó
változtatásaival. Amennyiben ezt nem tudja megtenni, „conflict” keletkezik, ami
emberi beavatkozást igényel (ez akkor szokott előfordulni, ha a lokális és a
központi változások azonos részeket érintenek, de még ilyenkor sem minden
esetben).
Ha a fejlesztő elkészült a változtatásaival, feltöltheti
azokat a „repository”-ba a „commit” paranccsal. Ezzel minden érintett file
verzió száma („revision”) megnő eggyel.
Mivel CVS az egyes file-ok minden verzióját tárolja, így
egy korábbi állapot bármikor visszaállítható.
3, Alapfogalmak
„repository” – a cvs-ben tárolt adatok központi „raktára”
„module” – a CVS egy logikai egysége, általában egy module-t használunk projektenként
„revision” – egy filecsoport adott verziója
„revision number” – numerikus szimbólum egy filecsoport adott verziójának jelölésére a következő módon: ’.’-al elválasztott számpárok sorozata és általában 1.1-ről indul (elágaztatás, vagyis branch készítése esetén ez a számsor kibővülhet újabbakkal)
„head-revision” – az elérhető legfrissebb verzió
„check out” – az adott projekthez tarozó file-ok letöltése a „repository”-ból, lokális másolat készítése
„update” – az előző „update” (ha még nem volt akkor a „check out”) óta a „repository”-ba bekerült változtatások letöltése a felhasználó filerendszerében tárolt másolatba
„commit” – a lokális másolat változásainak feltöltése a „repository”-ba
„add” – új file hozzáadása a „head-revision”-höz (innentől a projekt része)
„remove” – már a „repository”-ban lévő file-t lehet eltávolítani a „head-revision”-ből (korábbi verziói ettől függetlenül elérhetőek)
„history” – adott file „családfáját”, azaz előzményeit (korábbi verzióit) lehet lekérdezni vele
„merge” – két különböző verzió összefésülése
„conflict” – olyan eltérés két változat között, amit a CVS maga képtelen feloldani (főként „update” vagy „commit” esetén fordulhat elő)
„status” – egy CVS felügyelet alatt álló file állapota, ami a lokális másolatra vonatkozik
- up-to-date: azonos a repositoryban lévő változattal
- locally modified: a file-t lokálisan módosították, ezért „commit” szükséges
- needing update: valaki más módosított és „commit”-ált egy újabb változatot a „repository”-ba, de a lokális másolat még nem módosult
- needing merge: valaki más módosított és „commit”-ált egy újabb változatot a „repository”-ba, és a lokális másolat is módosult
4, Branch
A CVS segítségével szét lehet választani a fejlesztést különböző ágakra, ezeket hívjuk „branch”-eknek. Amikor egy file-t megváltoztatunk a „branch”-ben, a módosítások nem jelennek meg a fejlesztés fő ágában („trunk”, azaz törzs). Később természetesen egybe lehet őket olvasztani a megfelelő változtatások átvitelével egyikből a másikba („merge”-ölés).
Példáult egy fejlesztő szeretne kipróbálni valamit, de nem biztos abban, hogy az működni fog. Ilyenkor indíthat egy saját „branch’-et (ágat), ami elágazik a „trunk”-ből. Megtehetné azt is, hogy a saját renszerén kísérletezik ezzel, de így nem használná ki a CVS nyújtotta előnyöket.
Okot adhat egy új branch létrehozására az is, ha például új „release”-t szeretnénk kiadni a szoftverből.

5, Tag (symbolic names)
A CVS tag-eket használ a projekt egyes verzióinak megkülönböztetésére. Egy adott tag-hez a aktuális branch vagy trunk legfrissebb file-jainak verziószámát menti el a rendszer (mintha egy pillanatkép lenne az aktuális állapotról).
Hasznos lehet például „merge”-ölés előtt és után „tag”-elni a „branch”-ünket, így később könnyen visszaállítható ez az állapot („check out as”-el ki lehet menteni egy adott tag-hez tarzozó file-okat). Egyébként nyugodtan használható szinte bármikor, amikor úgy gondoljuk, hogy szükség lehet rá (ártani nem árt, de sokszor nagyon hasznos lehet).
Természetesen fontos, hogy az elnevezésre itt is ügyeljünk, tartsuk be az adott „repository”-t használó csoportunk által alkalmazott konvenciókat.
6,Források, linkek és további információ
http://en.wikipedia.org/wiki/Concurrent_Versions_System
http://cvshome.org/eng/
http://ipv6.niif.hu/tipster6/papers/cvs_overview/