HTML

WebKuvik - Hu húúú

Az olalon webfejlesztéssel kapcsolatos infókat, híreket és anyagokat találhattok.

Friss topikok

Címkék

Git

2011.12.20. 14:59 Whip

Elérkezett az idő amikor nem halogathattam tovább és bele kellett vetnem magam a verziókezelő rendszerek csodás világába, méghozzá kicsit szűkítve a kört: a Git lett a kiszemelt eszköz. Mint már sokszor most is a "mi a fenéért is nem foglalkoztam vele eddig?" érzés közepedte jöttem rá, hogy a ez egy remek cucc, melyet használni kell.

Mire is jó a Git? Ez egy offline fejlesztésre (is) kihegyezett verziókövető rendszer. Nem szükséges neki folyamatos élő kapcsolat és elég jól elvan a szerverrel való folyamatos kommunikáció nélkül is. A segítségével az aktuális projektünk forráskódján történt változásokat követhetjük nyomon, elágaztathatjuk, kommentelhetjük, visszaállíthatjuk.

Egyéni fejlesztőknek hol ebben az előny? Tegyük fel, hogy dolgozol egy webshopon. Minden nap szépet commitolod a változásokat így minden nap meg tudod mondani, hogy melyik nap mi változott. Aztán jön a megrendelőtől egy kérés: Mi lenne ha facebook integráció is lenne az oldalban? Semmi gond, hiszen létrehozhatsz egy új Branch -et azaz szálat. Ebben elkezded megírni, sőt még be is fejezed a módosítást. Megrendelőnk viszont rájön, hogy ez így neki mégsem tetszik vissza az egész. Ebben az esetben visszatérhetsz az eredeti vonalhoz, és a projekt eredeti állapotát egy pillanat alatt visszahozhatod úgy, hogy "hátha kell" alapon akár az új verzió is megmaradhat.

Csapatban dolgozva mégtöbb előnye jön ki a rendszernek, hiszen többen úgy tudtok egyazon projekten dolgozni, hogy a módosításokat a rendszer nyomon követi, összefésüli. Mutatja, hogy ki mikor mit változtatott. Hasznos? Naná!

A Git telepítésére most nem térek ki, legyetek kreatívak és guglizzatok okosan. :) Mivel a Git alapvetően konzolos dolog ezért telepítés után vagy indítsatok egy Terminált, vagy Windows alatt egy start menü/cmd kelleni fog.

git config --global user.name "XY"
git config --global user.email "mail@cimem.hu"

A fenti két parancs segítségével beállíthatjuk az alapvető adatainkat, így minden általunk elkövetett műveletnél a Git tudni fogja, hogy ki kezdeményezte. Ezt csak egyszer kell beállítani.

Következő lépésben be kell lépni abba a könyvtárba aminek a tartalmát szeretnénk nyomonkövetni. A példámban ez a "project" nevű mappa lesz.

cd project
git init

A git init egy rejtett .git nevű mappát fog létrehozni a project mappán belül. Ezzel egyelőre ne törődjünk, hiszen a módosításainkat itt tartja a rendszer. A mappa létrejöttével gyakorlatilag indítottunk egy új git adatbázist. Most ha ebben a könyvtárban létrehozunk egy fájlt/módosítjuk a tartalmát, átnevezzük stb arról a git már tudni fog, azonban automatikusan nem ment el minden egyes változást!

A változások elmentését Commit -olásnak hívjuk és csak azok a fájlok commitolódnak amikre kiadjuk a parancsot.

git add .

A git add . parancs a könyvtár teljes tartalmára beállítja a figyelést, azaz minden fájlt hozzáad.

git commit -a

Minden fájlt commitol. Ilyenkor meg fog nyílni egy szövegszerkesztő, ahol egy rövid (vagy hosszú) leírást adhatsz meg arról,hogy mi is változott a projektben. Miért jó ez? Mert ha 1 hónap múlva visszanézed a commitokat akkor gőzöd sem lesz róla, hogy a mai és a tegnapi között mi a különbség. Természetesen a módosításokat látni fogod, de egyszerűbb egy 2 soros komment alapján megállapítani, mint végignézni a fájlok változásait. Másik lehetőség a commitolásra a:

git commit -a -m "Ez a megjegyzés"

Ahol a szövegszerkesztős részt megúszhatjuk, és a -m paraméter miatt a megjegyzés inline beállítható.

Akkor sincs gond, ha valamit elírtál a megjegyzésben, vagy kimaradt volna egy fájl:

git commit --amend

Commitoláskor az adatok nem töltődnek fel automatikusan a szerverre mindössze helyileg eltárolódik mint egy verzió. A feltöltéshez a git push parancs kiadása is szükséges. Ehhez először is állítsuk be a távoli szervert:

git remote add origin user@server.hu:project.git

Ahol az user a git user, a server.hu a távoli szerver címe, a project helyére pedig a projekt neve megy. Ezzel gyakorlatilag közöltük a gittel, hogy ha az origin alatt az user@server.hu:project.git repo-t értjük.

git push origin master

Az origin -ben meghatározott szerverre feltölti a master branch -et. Ha másikat szeretnénk feltölteni akkor értelemszerűen annak a nevét kell beleírni. A master branch az alapértelmezett.

git log

Megmutatja a commitok történeteit. Minden commit kap egy kódot, például c333f7d4d02468eeeef39739ac79f30720c95c94. Ennek a segítségével azonosíthatjuk a későbbiekben. Hogyan is értem ezt?

Tegyük fel, hogy véletlenül törölted a "proba" nevű fájlt és commitoltad is. Ebben az esetben nem kell kétségbe esned, hiszen annyi a feladatod, hogy a proba fájlt visszahozod az utolsó commitból ahol még elérhető volt. Ehhez először is meg kell keresni, hogy melyik az utolsó ahol még elérhető a fájl:

git rev-list -n 1 HEAD -- proba

Ez egy a fent említett sh1 kulcsot fog visszaadni ami egyértelműen azonosít egy verziót. Most:

git checkout c333f7d4d02468eeeef39739ac79f30720c95c94^ -- proba

A kulcs helyére értelemszerűen mindenki azt írja amit az rev-list visszaadott válaszul. A checkout vissza fogja nekünk állítani a proba fájlt.

Persze a checkout nem csak 1-1 fájl visszaállítására jó, hanem képes minket visszarepíteni az időben, hogy megnézhessük, miként is állt a projekt mondjuk egy hónapja:

git checkout c333f7d4d02468eeeef39739ac79f30720c95c94

A projektünk tartalmát átállítja a c333f... -nek megfelelő állapotba.

Az általános lehetőségek közül már csak az az eset maradt hátra, hogy mi történik ha többen dolgoztok egy projekten. Ebben az esetben bár más push-olhat, de mivel mindenki a saját gépén dolgozik ezért lokálisan nem fognak automatikusan befrissülni a fájlok. Erre az esetre való a pull parancs.

git pull origin master

Ami frissíti a fájlokat úgy, hogy lokálisan is megjelenjenek azok a változások amik eddig csak a szerveren voltak elérhetőek, vagyis ha a readme.txt-be valaki beszúrt egy új sort akkor az a sor megjelenik lokálisan is.

Érdekesség, hogy tömörített formában is kinyerhető bármelyik checkout. Linux alatt például:

git archive c333f7d4d02468eeeef39739ac79f30720c95c94 | bzip2 > ../teszt.tar.bz2

Hasznos funkció továbbá, hogy nem kell a checkoutok teljes nevét kiírni, csak annyit amennyi már elég az egyedi azonosításhoz. A legtöbb parancs megpróbálja kitalálni, hogy melyikre is gondoltunk, azaz a

git checkout c33f7d

pont ugyanolyan hatásos lesz mintha kiírtuk volna végig. Ha túl kevés karaktert adtunk meg az egyedi azonosításhoz akkor természetesen hibaüzenet szól a dologról.

Szólj hozzá!

Címkék: git verziókövetés

A bejegyzés trackback címe:

https://webkuvik.blog.hu/api/trackback/id/tr423478351

Kommentek:

A hozzászólások a vonatkozó jogszabályok  értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai  üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a  Felhasználási feltételekben és az adatvédelmi tájékoztatóban.

Nincsenek hozzászólások.
süti beállítások módosítása