03. Git extension használat

A Git Extensions egy grafikus felület Windowsban a Githez, okosabb, mint a Git Gui alább, úgyhogy aki ezt használja annak a Git Guit és a parancsoros leírást alább nem kell elolvasni. Először nézzük meg, hogy hogyan hozunk létre új repót. Hozzunk létre valahol egy sajat nevű könyvtárat, tegyünk vagy írjunk bele egy filet. (Ékezetet semilyen filenévben és felhasználónévben sem célszerű használni. :-) ) A Git Extensions elvileg már az Asztalon van (tehén), ha mégsem, a Start menüben ott kell lennie. Kezdő felületén először a

Settings --> Settings

menüben csupa zöld csíkot kell látnunk. Ha valami piros szereljük meg, nekem otthon rögtön minden zöld volt. Megjegyzés az Intézet Octopus nevű szerveréhez: első indításkor nem találja a Git programokat, mert ezek nem a szokásos helyekre lettek telepítve, hanem:

- Git: C:\Program Files (x86)\main\Git\bin\git.exe
- KDiff3: C:\Program Files (x86)\main\KDiff3\kdiff3.exe

Ezen kívül az Octopuson egy shell extensions tartalmú csík piros marad, de ez úgy tűnt nem okoz problémát.
Ezután a

Global settings

fülben ellenőrizzük, hogy a nevünk és email címünk jól van-e beírva, ha nem, javítsuk. A Settings bezárása után klikkeljünk oda, hogy

Create new repository

adjuk meg az előbb létrehozott sajat könyvtárat, és legyen ez egy Personal repository (és nem Central). Ekkor létrjön a könyvtárunkban egy .git adatbázis, amiben még nincsen benne a fileunk. Nekem egy zöld nyíl keringett körbekörbe amíg rá nem klikkeltem, hogy Refresh (két zöld görbe nyilacska) a bal felső sarokban. Ezután egy szürkés ablak jön fel egy Edit .gitignore és egy Commit gombbal. Az előzőt egyelőre hagyjuk, klikkeljük a

Commit

gombra. Ez felhoz egy ablakot a fileunkkal. Nyomjuk meg, hogy

Stage

ezzel ajánlottuk a filet a Git figyelmébe. Ezután a jobb alsó részbe írjunk valami olyasmit, hogy "Elso commit". Humanitárius okokból itt ne használjunk ékezeteket. :-) Majd alul klikkeljünk rá a

[zöld pipa] Commit

gombra. Ezzel a változások / az új fileunk bekerült a Git (egylőre csak helyi) adatbázisába. (Megjegyzés: meg lehet mondani a Git-nek, hogy bizonyos fileok engem sosem érdekelnek, erre való a .gitignore file, részletek itt.)

Mielőtt megnézzük mi mást tud a Git, itt van a másik módszer egy repó létrehozására: klónozunk egyet egy központi Szerver nevű gépen levő repónkról. Ezt csak akkor csináljuk, amikor legelőször hozzuk le a repót, és még nincs saját másolatunk. Csukjuk be a Git Extensiont, és nyissuk ki újra. Mi a Szerverről ssh-n keresztül fogjuk hozni-vinni a cuccainkat, ezért ezt írom le (de megjegyzésképp a Git működik http-n, rsync-en, és egy saját git protokollján keresztül is). Az elején most klikk oda, hogy

Clone repository

Megkérdezi honnan, hát innen:

projfelh@valami.szerver.hu:proba

a Destination pedig legyen egy létező könyvtár, melynek végére odaírjuk, hogy proba, legyen Personal repó. Utána nyissuk meg (felajánlja).
A fő ablakban a repó történelmét láthatjuk, alatta a három fül: Commit, File tree, Diff további infókat ad a repóról. Változtassuk most meg valamelyik fileunkat, majd klikk oda felül, hogy

[zöld pipa] Commit

A felugró ablakban látjuk a változásokat,

Stage

árhúzza a file(okat) az alsó Staged files ablakba, írjunk commit megjegyzést, majd alul

[zöld pipa] Commit

Most a megváltozott adatbázisunkat szeretnénk visszatölteni a Szerverre. Ha klónozással szereztük az adatbázist, akkor ehhez csak a fent található

kék ↑ felnyílra (Push)

kell kattintani. Ha viszont új sajat nevű repót hoztunk létre, akkor emailben el kell küldeni a nevét annak, aki a Szerveren a projfelh felhasználót kezeli, hogy tudathassa a Szerverrel, hogy lesz egy ilyen új adatbázis rajta. Ha tudatta vele, akkor a következőket kell tenni:

kék ↑ felnyíl (Push)
Remote: projfelh@valami.szerver.hu:sajat

majd Push. Ekkor ha minden jól ment feltettük a repónkat a Szerverre. Érdemes a Push menüben a

Manage remotes

ablakba egy nevet adni a fenti projfelh@valami.szerver.hu:sajat címnek, hogy ne kelljen mindig beírni.
Ha ezután valamikor máskor dolgozni szeretnénk mondjuk a proba projecten, akkor (ha épp nincs meg a könyvtárunk benne a ./git adatbázissal, klónozzuk, lásd fent, ha pedig megvan, akkor)

kék ↓ lenyíl (Pull) --> Manage remotes --> Remote repositories

alatt adhatunk egy nevet a repónak, és érdemes a

Default pull behaviour

fülben elérni, hogy a Local branch name és a Default merge with is legyen master. Fontos még, hogy a Pull menüben a

Remote branch

is legyen a master, és legyen a pont ott, hogy Merge remote branch to current branch. Ezután ha minden jól megy, Pull frissíti a repónkat. Ha sokan piszkálták egyszerre a proba könyvtárat és fel-le töltögettek a központi adatbázisba, a Git legtöbbször olyankor is tudja frissíteni a saját könyvtárunkat (pull) vagy a központi könyvtárat (push), kitalálja hogyan egyesítse a változásokat. Ha ez mégsem sikerülne, klikk ide, ide vagy ide.

Verziókezelés.

A Diff fül mindeközben megmutatja mi változott az egyes verziók között. Ha egy korábbi verzió érdekel minket,

Commands --> Checkout revision

a könyvtárunkban visszaállítja a megfelelő korábbi állapotot. Ne ijedjünk meg, nem vesztettük el amit azóta írtunk, egy

[kék ceruza] --> Local branch --> master

visszaállítja a legutóbb commitolt verziót a könyvtárunkban.

Elágazás.

Tegyük fel, hogy kipróbálnánk valamit, de nem vagyunk biztosak benne, hogy jó lesz a vége. Ekkor elágazhatunk:

Commands --> Create branch

egy új ágat csinál, és aztán a kék ceruzával lehet váltogatni az ágak között. A fileok könyvtárunkban mindig megfelelően változnak. Lehet szerkeszteni, stage-elni és commitolni ahogy eddig, bármelyik ágban, pusholni is lehet, közben figyeljünk, hogy melyik ágat melyikbe nyomjuk. Ha írtuk kicsit a kísérleti ágat, esetleg a fő ágat is, és a kísérlet jól sikerült, akkor beolvaszthatjuk a fő ágba: váltsunk a fő ágba, majd

Commands --> Merge branches

Ha a merge mégsem sikerülne, klikk ide, ide vagy ide. Sikeres merge után a kísérleti ágat kitörölhetjük:

Commands --> Delete branch

Tisztítás / tömörítés.

Előfordulhat, hogy a .git könyvtárunk túl nagyra nőtt, vagy már felesleges objektumokat tartalmaz. (Ez ténylegesen meg is történik, ha különböző gépeken tárolt .git könyvtárakat a Git tudtán kívül szinkronizálunk.) Ezen segít egy tömörítés/tisztítás:

Settings --> Git maintenance --> Compress git database

Elkerülendő a "Jaj mégsem kellett volna kitörölnöm" problémákat olyan .git-beli objektumokkal amiket amúgy a Git a hatóköréből már kiiktatott, a fenti klikk csak a két hétnél régebbi és a Git adatbázisában már feleslegessé vált objektumokat törli. (Tehát nem a két hétnél regebbi verziókat, azok természetesen megmaradnak ezután is.) Ez a klikk a git gc utasítást adja ki, melyről további részletek itt.