GIT alapok
Posted by Lázár István
A Git egy nyílt forráskódú, elosztott verziókezelő alkalmazás. A Git fejlesztője eredetileg Linus Torvalds volt, aki a Linux kernel fejlesztéséhez készítette azt el. Minden Git munkamásolat - egy teljes értékű repository - teljes verziótörténettel és teljes revíziókövetési lehetőséggel, amely alapvetően nem függ a hálózat elérésétől vagy központi szervertől.
Alapvetően a Git annyit csinál, hogy amikor azt mondjuk neki (commit), akkor az aktuális munkakönyvtárunkban megjelölt fájlokról és alkönyvtárakról csinál magának egy helyi adatbázist, másolatot a .git nevű alkönyvtárba. Mindennek köszönhetően:
- nyomon tudja követni, hogy mi és hogyan változott a munkakönyvtárunkban,
- vissza tud állni bármelyik korábban (commit-olt) állapotába a könyvtárunkat,
- szinkronizálni tudja munkakönyvtárunk tartalmát egy másik gépen levő hasonló könyvtárral, közben intelligensen átvezeti a változásokat.
Alapvető fogalmak
- repository, repo: az adatok változásának nyomon követése, illetve ezen folyamat során keletkező információk adatstruktúrákban történő tárolása
- workspace, working directory: az adott project gyökérkönyvtára, mely fájlokat könyvtárakat és alkönyvtárakat tartalmaz
- snapshot: a könyvtárak, fájlok aktuális állapota, egy adott pillanatban akár egy fotó a teljes kódról.
- staged, cached: azokat a fájlok, amelyek módosítva lettek és az állapotukról, verziójukról, tartalmukról snapshot készült
- Commit: az a folyamat, amely során a Git a megjelölt és a staging area-ban lévő fájlokról készült snapshot-okat a .git könyvtárában, azaz a lokális adatbázisában tárolja el, valamint és egy SHA-1 hash kódot generál, amellyel az adott pillanatképre hivatkozik.
- HEAD: az utolsó kommitra történő hivatkozás
- branch: egy névvel ellátott fejlesztési ág, a kommitok egymásutánja
- MASTER: default branch
- tag: egyedi címkével ellátott pillanatkép
A Git három pillére
A verziókezelés három legfontosabb állomása:
- working directory
- staging area
- local repository
A Git tekintetében a fájlok két nagy csoportra oszthatóak, untracked és tracked fájlokra. Az untracked fájlok azok, melyek még nem verziókezeltek, nem készült róluk snapshot. A fentiekből következik, hogy a tracked jelölésű fájlok azok, melyek változásai szerepelnek a staging area-ban vagy a local repository-ban. A tracked állapotú fájloknak mtovábbi három stációja lehetséges:
- unmodified: a fájl nem módosult a legutolsó commitot követően
- modified: a fájl módosult a legutolsó commit óta, de nem került még staging area-ba (nem szerepelt a git add parancsban), így a következő commit nem fogja szerepeltetni a local repository-ban sem
- staged, cached: a fájl módosult a legutolsó commit óta, hozzá lett adva a staging area-hoz (git add paranccsal), a következő commit részét fogja képezni
Mutatkozzunk be a git-nek
A Git első használata előtt érdemes bemutatkozni a Git számára. A verziókezelés során az egyes commit-okhoz automatikusan hozzáfüzi a módosítást végző személy nevét és e-mail címét. Ezen adatokat az alábbi parancsok segítségével tehetjük meg:
$ git config --global user.name ""
$ git config --global user.email ""
A verziókezelés alap folyamata
Első lépés egy új local repository létrehozása, mely a git init paranccsal hajtható végre. A parancs hatására abban a könyvtárban melyben kiadtuk azt (továbbiakban gyökérkönyvtár), létrejön .git elnevezésű alkönyvtár, amely a local repository-t reprezentálja. Ebben az alkönytárban fogja a tárolni a Git verziókezeléshez kapcsolódó adatokat. A git init parancs kiadását követően a gyökérkönyvtár valamennyi változását - fájlokkal és alkönyvtárakkal kapcsolatos változásokat - érzékelni fogja a Git.
Ha létrehozunk egy fájlt, akkor azt a Git érzékeli és automatikusan untracked jelöléssel látja el (nem része az indexnek, a fájl még nem verziókezelt). Ahhoz, hogy célunkat elérjük és a verziókezelés alá vonjuk a fájlt, a git add paranccsal hozzá kell azt adnunk az indexhez. A parancs hatására az adott fájlról:
- egy pillanatkép készül a local repoba,
- az elkészült pillanatképet reprezentáló hash kód feljegyzésre kerül a staged area-ba, a fájl tracked / staged jelölésűre változik.
A commit parancs hatására a fájl állapota és tartalma mentésre kerül a local repoba és a fájl jelölése unmodified-re módosul. Amenyiben módosítjuk a fájlunkat, az modified jelölésűre változik és ahhoz, hogy újból commit képessé tegyük ismét a git add parancsot kell használnunk...