Készítette: Hugyák Tamás
E-mail: [email protected]
v3.0.0 - 2019.05.02.
A Git alapvető használatának elsajátítása.
„Git thinks of its data more like a set of snapshots of a mini filesystem.”
Az elosztott szoftverfejlesztés alapvetően különbözik a központosított verziókezelő rendszerektől. Ahelyett, hogy a fájl információkat egyetlen központi repository-ban tárolnánk, minden egyes fejlesztő rendelkezik a tároló teljes másolatával.
A verziókezelői tevékenységek nagyon gyorsak. A központi szerverrel történő hálózati kommunikáció helyett a lokális gépen hajtódnak végre a parancsok, így a fejlesztés offline megy végbe a workflow megváltoztatása nélkül.
Mivel minden egyes fejlesztő lényegében teljes biztonsági másolattal rendelkezik a teljes projektről, ezért a szerver meghibásodásának, a tároló megsérülésének vagy bármilyen más típusú adatvesztésnek a kockázata sokkal kisebb, mint a központosított rendszerek által támasztott pont-hozzáférés.
A Git repository minden egyes példánya – akár local, akár remote – rendelkezik a projekt teljes történetével, így egy teljes, elszigetelt fejlesztői környezetet biztosít minden fejlesztő számára, hogy szabadon kísérletezzenek új funkciók fejlesztésével mindaddig, amíg egy tiszta, publikálható verziót nem képesek előállítani.
A projekt teljes története azt is jelenti, hogy eltérő history-val rendelkezhetnek az egyes fejlesztők. Egy commit létrehozása még nem jelenti a többi fejlesztővel történő szinkronizációt. A Git már egy tökéletes commit-olási, összevonási, összefésülési technikával rendelkezik a fejlesztés különböző sorainak összefűzéséhez.
Átmeneti terület a munkakönyvtár és a local database között. A fájlok módosításáról egy úgynevezett pillanatkép (snapshot) készül, mely a "staged" állapotot jelenti. A stage folyamatos változása még nem része a local adatbázisnak.
Minden pillanatkép eltárolása előtt (commit) készül egy SHA-1 checksum a fájlokról, így lehetetlen megváltoztatni bármely könyvtár vagy fájl tartalmát anélkül, hogy a Git ne tudna róla. Ez a legalapvetőbb része a verziókezelőnek. Az SHA-1 egy 40, hexadecimális karakterekből álló string, mely a fájl tartalma vagy a könyvtár struktúrája alapján generálódik.
például: 24b9da6552252987aa493b52f8696cd6d3b00373
Az adatbázisban a tárolásának alapját nem a fájlnév jelenti, hanem az SHA-1 hash érték, mely egyben a tartalomra is utal.
A legalapvetőbb adat tároló a blob. A Git csak a fájlok tartalmát tárolja. A tartalomra a 40 karakter hosszú SHA-1 hash mutat, mely garantáltan minden esetben különbző lesz (unique).
Lehetővé teszik az elágazásokat, hogy a fejlesztés ne csak egy szálon történjen. Az egyidejű, párhuzamos fejlesztések egymástól teljesen elszeparálva működnek.
$ git branch testing
A HEAD az adott branch-ben a legutolsó commitra való hivatkozás.
$ git checkout testing
$ vim test.rb
$ git commit -a -m 'made a change'
$ git checkout master
$ vim test.rb
$ git commit -a -m 'made other changes'
Kettő vagy több fejlesztési szál, történet egybefűzése.
$ git checkout -b hotfix
Switched to a new branch 'hotfix'
$ vim index.html
$ git commit -a -m 'fixed the broken email'
$ git checkout master
$ git merge hotfix
Updating f42c576..3a0874c
Fast-forward
README | 1 -
1 file changed, 1 deletion(-)
$ git checkout iss53
$ vim index.html
$ git commit -a -m 'finished the new footer [issue 53]'
$ git checkout master
$ git merge iss53
$ git branch -d iss53
A szerver (remote) és a kliens (local repo) között lehetséges:
1. Elhelyezkedés szerint:
2. Hozzáférhetőség szerint:
Olyan fájl, melyben azokat a fájlokat és könyvtárakat sorolják fel, melyeket a Git ne kövessen, indexeljen.
A Git célja az adott projekt menedzselése, ill. az adatok változásának nyomon követése. Ezen információk adatstruktúrákban történő tárolását repository-nak, röviden repo-nak, avagy lokális adatbázisnak nevezik.
A working directory, working copy vagy history az adott projektről, a gyökérkönyvtárról – amelyben a fájlok, forráskódok és mappák találhatóak – egy változatot, verziót, állapotot tartalmaz.
Snapshot egy adott pillanatban, időpontban a könyvtárak, fájlok aktuális állapotát, tartalmát, verzióját jelenti. A pillanatkép tulajdonképpen nem más a fájlok esetében, mint egy teljes másolat azok tartalmáról.
Commit-olásnak nevezik azt a folyamatot, amely során a Git a megjelölt és a staging area-ben lévő fájlokról készült snapshot-okat a lokális adatbázisában (a .git könyvtárában) eltárolja, és a tartalmuk alapján egy SHA-1 hash kódot (commit id) generálva hivatkozik rájuk.
A working directory-t tisztának (clear) nevezik, ha a fájlokon végzett összes módosítás el van mentve a lokális Git adatbázisba, a repo-ba. Ilyenkor az utolsó commit óta nem történt változtatás az adatokon. A working directory-t piszkosnak (dirty) nevezik, ha a legutolsó commit óta a verziókezelt fájlokon történtek olyan változtatások, módosítások, amelyek még nem lettek stage-elve, azaz a staging area-ba helyezve.
Staged/cached jelzővel illetik azokat a fájlokat, amelyek verziókezelve vannak a Git által és a legutolsó commit óta módosítva lettek, illetve az állapotukról, verziójukról, tartalmukról snapshot készült.
Az adott repository-nak külső szerveren lévő klónja.
HEAD az aktuális lokális branch-ben a legutolsó commit-ra való hivatkozás.
A working directory ennek a commit-nak a teljes történetét (history) mutatja.
Egy HEAD-et detached tulajdonsággal illetik, ha az aktuális commit, amelyre mutat, egyik lokális branch-nek sem a legutolsó commit-ja.
A következő parancsok kiadása a git bash-ben vagy a terminálban:
$ git config --global user.name "Név"
$ git config --global user.email "e-mail"
$ git config --global color.ui true
$ git config --global core.editor vim
Létező tároló klónozása az aktuális mappába, a repo nevével azonos könyvtárba.
$ git clone https://github.com/hakimel/reveal.js.git
$ git clone ssh://[email protected]/hakimel/reveal.js.git
A working directory állapotának megtekintése.
Fájltartalom hozzáadása a staging area-hoz.
Módosítások, snapshot-ok eltárolása a repository-ban.
Local adatbázis módosításának feltöltése a remote repo-ba.
A working directory frissítése a remote repository-ból. Az éppen aktív branch-hez új vagy változott commit-ok letöltése a remote repository-ból.
Branch-ek listázása, létrehozása és törlése a fejlesztés megkönnyítése érdekében.
Átváltás egy másik branch-re vagy egy commit-ra.
Kettő vagy több fejlesztői történet (history) összefűzése egybe. Branch-ek összefésülése.
Commit ellátása névvel vagy címkével.
A working directory módosításainak ideiglenes elmentése, s a legutóbbi commit-nak megfelelő tiszta working directory kiírása.
Commit napló, a korábbi commit-okról szolgáltat információt.
A commit-ok, branch-ek közötti módosítások kilistázása. (Snapshot-ok közötti különbségek megjelenítése.)