# Verziókezelés

Mi is az a verzió kezelés?  
Talán a legegyszerűbb egy példán keresztül szemléltetni.  
Tegyük fel egy docx fájlt szerkesztünk és ezt hetente
frissítve rendszeresen el kell küldenünk emailben valakinek.
Ilyenkor különböző verziók keletkeznek a fájlból és ezeket
a postafiókunkból könnyedén elő tudjuk szedni.

Na ugyanazen a példán tovább mehetünk.  
Mi van ha lokális kezdjük ezeket a fájlokat tárolni?  
Gondolom mindenki találkozott már hasonló fájlnevekkel:

```
├── elso_beadasom.docx
├── masodik_beadasom.docx
├── masodik_beadasom (1).docx
├── masodik_beadasom (1) Javított.docx
├── masodik_beadasom (1) Javított másolata.docx
├── asd.docx
├── asdasd.docx
└── asdasdasdasd.docx
```

Ha ügyesek vagyunk még mappákat is készítünk és dátumot is hozzá cimkézünk.

```
└── 2021
    └── 02
        ├── 13
        │   └── elso_beadasom.docx
        ├── 19
        │   └── masodik_beadasom_felkesz.docx
        ├── 20
        │   ├── masodik_beadasom.docx
        │   ├── masodik_beadasom_javitott.docx
        │   └── masodik_beadasom_vegleges.docx
        └── ideiglenes
            ├── asd.docx
            ├── asdasd.docx
            └── asdasdadsads.docx
```

Persze az operációs rendszer képes dátum alapján rendezni,
és megspórol nekünk pár lépést, de mi van ha ezt valakinek
el is szeretnénk küldeni? Mi van ha a módosítás dátuma közben
módosul? Hogyan biztosítjuk, hogy közben nem sérülnek a fájlok?

Ezekre megoldást adnak a különböző verziókezelő rendszerek.  
Többek közt dolguk, hogy fájljaink számon tartsák, ahogy például
kézileg tettük.

### Milyen verzió kezelő rendszereink lehetnek?

#### Helyi

Erre a fenti példa a legjobb példa.  
Vannak különböző verziói a fájlunknak és ezeket valamilyen
adatbázisban rögzítjük.

<div style="text-align:center"><img src="guide/intro/img/vcstype_local.png" alt="Local Version Control Systems" /></div>

Ilyen az [RCS](https://www.gnu.org/software/rcs/).

### Központosított

Ez már egy fokkal okosabb.
A különböző verziókat a központi szerverre rakjuk fel és
onnan szedjük le.  
Például van egy Fájlszerverünk amit minden gépről elérnek
az emberek és oda dolgoznak közösen...  
Érezhető probléma, hogy így ha meghal a központi szerver,
akkor mindent elvesztünk (eskü nem volt még ilyen 😅).  
Továbbá probléma lehet, hogy egymás munkáját felülírjük,
szerencsére egy jó rendszernél erről értesítést kapunk,
hozzá és nem felülírjuk a módosításaink.

<div style="text-align:center"><img src="guide/intro/img/vcstype_central.png" alt="Centralized Version Control Systems" /></div>

### Megosztott

Na és itt lépünk be a ma is használt Git világába.
Ennél a megoldásnál már az a trükk, hogy mindenkinek megvan
a teljes projekt az összes verziójával. Felmerül, hogy na
de akkor honnan szedjük le a legújabb verziót?
Különböző megoldások léteznek, például a fejlesztők a
módosításokat azonnal megosztják egymással
(pl.: p2p Torrenthez hasonló módon) vagy
kijelölnek egy központi szervert amivel mindenki
szinkronban van.
Ilyen központi szerver lehet például a [Github](https://github.com/) vagy a [Gitlab](https://gitlab.com/).  
Csak megjegyzem, akár a módosításokat emailben is el lehet
küldeni és a szoftver automatikusan megcsinálja a többit a mi részünkön.

<div style="text-align:center"><img src="guide/intro/img/vcstype_distributed.png" alt="Distributed Version Control Systems" /></div>