Git

Z WoWResource Wiki
Přejít na: navigace, hledání

GIT je nástroj na správu verzií. MaNGOS ho začal používať po SVN verzii 6767. Pre používateľa je trošku náročnejší, takže tu je zopár príkladov a tipov:


Ako si stiahnuť projekt MaNGOS (celé repository)

 git clone git://github.com/mangos/mangos.git

alebo z náhradných liniek MaNGOSu

 git clone git://repo.or.cz/getmangos.git
 git clone http://repo.or.cz/r/getmangos.git

Pozn.

1.Tento príkaz vytvorí v aktuálnom adresári podadresár getmangos resp. mangos a do neho uloží celé repository MaNGOSu. Preto, ak chcete ďalej pracovať s gitom, prejdite do adresára getmangos (cd getmangos).

2.Posledný odkaz je vhodné použiť, ak máte zakázaný GIT protokol.

3.Ak ste za proxy serverom, máte povolený http protokol a nedarí sa Vám cez neho pripojiť, skúste nastaviť premennú prostredia 'http_proxy' (napr. pre bash: 'export http_proxy=10.10.10.10:80') alebo môžete nastaviť konfiguračnú položku http.proxy cez príkaz 'git config --global http.proxy (napr . 'git config --global http.proxy 10.10.10.10:80')


Ak chcete zaktualizovať staršiu klonovanú verziu na aktuálnu, použite

 git pull  

Tento príkaz vykoná 'git fetch' + 'git merge', teda stiahne aktuálne zmeny a pokúsi sa ich aplikovať.


Ak chcete zistiť, v ktorej verzii(po ktorom commite) sa nachádzate, použite príkaz

 git log

, ktorý Vám vypíše postupnosť zmien(commitov) - teda ako aktuálne verzia vznikala. A príkaz

 git show

zobrazí konkrétne zmeny(commity), ktoré vytvorili aktuálnu verziu - je to vlastne zobrazený patch súbor.


Aktuálnu verziu projektu máte teda stiahnutú a chcete v nej robiť zmeny. Niektorí užívatelia si pred zmenou projektu radi urobia jeho zálohu. S GITom je to jednoduché:

 git clone ./ ../zaloha

Tento príkaz urobí klon celého lokálneho repository, teda vytvorí kópiu z aktuálneho GIT repository do adresára 'zaloha' o úroveň vyššie.


Po stiahnutí aktuálnej verzie väčšinou aktuálna vetva(branch) obsahuje nejaké tagy (záložky vetiev), ku ktorým by Ste sa mohli chcieť z nejakého dôvodu vrátiť. Aké tagy má vaša verzia zistíme príkazom

 git tag -n

, ktorý vám vypíše aj komentáre k jednotlivým tagom, t.j.

 $ git tag -ln
 v0.12           MaNGOS 0.12
 v0.13-dev1      MaNGOS 0.13 dev1 -- moving from client 3.0.3
 v0.13-dev2      MaNGOS 0.13 dev1 -- moving from client 3.0.8a

Ak sa chcete prepnúť do niektoreho z tagov, je vhodné si pre neho vytvoriť vlastnú lokálnu vetvu (branch). To spravíte príkazom:

 git checkout -b 243 v0.12

Týmto príkazom ste si vytvorili lokálnu vetvu s názvom 243 a je v nej verzia v0.12, teda posledná verzia pre patch 2.4.3. Ak by ste cheli poslednú aktuálnu verziu pre patch 3.0.3, použite

 git checkout -b 303 v0.13-dev1

, ak by ste chceli poslednú aktuálnu veryiu pre patch 3.0.8a, použite

 git checkout -b 308 v0.13-dev2

Pozn. Za prepínačom -b si zadávajte meno, ktoré sa Vám hodí najviac.


Ak nechcete použiť žiaden z tagov, môžete si vytvoriť vlastnú vetvu príkazom

 git checkout -b mojavetva HEAD

Tento príkaz vytvorí novú vetvu s názvom 'mojavetva' s najaktuálnejšími zmenami.


Ak chcete zmazať vetvu, použite príkaz

 git branch -D mojavetva

V ktorej vetve ste zistíte príkazom

 git branch

Ak sa chcete prepnúť späť do najaktuálnejšej vetvy, použite

 git checkout master

, alebo ak sa chcete prepnúť do inej vetvy použite

 git checkout mojavetva

a pod. ...


Takže sa konečne nachádzate v lokálnej vetve, ktorú chcete zmeniť (napr. mojavetva). Povedzme, že zmeníte niektorý zo súborov sql v adresári SQL a pridáte nový súbor bag_slots.cpp do adresára src/game. Aby git 'prijal' do vetvy nový súbor, je potrebné zadať príkaz

 git add bag_slots.cpp

A aby git zaznamenal všetky vaše zmeny, je potrebné použiť príkaz 'commit', t.j.

 git commit -a

Prepínač -a zabezpečí akceptovanie všetkých zmien v zmenených alebo zmazaných súboroch.

Či vám ostalo ešte niečo na commit-nutie (aké súbory ste menili), zistíte príkazom

 git status

Pozn. Po zadaní príkazu 'git commit' Vás GIT vyzve na zadanie popisu vykonaných zmien otvorením súboru s popisom. Súbor nesmie obsahovať iba komentáre(teda riadky začínajúce znakom #) a nesmie byť prázdny, ináč GIT nový commit zamietne.


Ak sa Vám naše zmeny nepáčia, je možné commit zrušiť. Robí sa to príkazom

 git reset --hard commitID

, kde commitID je 40 znakové číslo commitu, ku ktorému sa chcete vrátiť. Väčšinou stačí použiť prvých 10 znakov, t.j.

 git reset --hard d583698225


Zmeny môžete vykonať aj nahratím patch súborov. Aplikovanie patch súborov je možné príkazom

 git am patch.patch

Príkaz sa pokúsi aplikovať všetky zmeny zo súboru patch.patch na aktuálnu verziu projektu. Ak nájde konflikt, skončí z chybovou hláškou a konflikt je potrebné vyriešiť.

Pozn. Konflikty nám vypíše príkaz 'git diff'


Ak si chcete vypísať rozdiely kódu aktuálnej verzie a predošlej vo forme patch súboru, môžete použiť príkaz

 git diff HEAD HEAD^

HEAD je označenie najaktuálnejšej verzie a znak ^ posúva verziu o jeden commit dozadu (na rodiča aktuálnej verzie), t.j. HEAD^^ prejde na verziu pre dvomi commitmi, atd. Dá sa to zapísať aj ako HEAD~2.

Pozn.

1.Index je označenie aktuálnej, rozrobenej verzie (vznikne cez add pred commitom), HEAD je posledný commit.

2.Môžete použiť aj príkaz 'git log -p' a pod.


Každý z použitých príkazov má aj ďalšie prepínače a parametre a dajú sa rôzne kombinovať, napr. git log HEAD^^ vypíše log začínajúci predošlými dvomi commitmi, namiesto HEAD možno použiť commitID a pod.

Bližšie info nájdete v dobrom tutoriale alebo v manuálových stránkach. A ako hovoria v jednom z tutorialov, 'Branches are cheap and easy', takže nebojte sa experimentovať, vytvárať a meniť nové vetvy a pracovať s nimi.

Ešte pozri:

 git grep
 git bisect
 git format-patch 


Doplnené 09.06.2009

1. výpis všetkých dostupných branch (lokálne aj remote)

 git branch -a

2. získanie najaktuálnejšej verzie zdrojových kódov pre 2.4.3

 git checkout -b 243 origin/mangos-0.12

Pozn. ak sa Vám po tomto checkoute nedarí dostať späť do master branch, použite

 git checkout -f master

Týmto návratom sa momentálne stratí linuxová binárka ad. Dá sa to poriešiť takto:

 1. v adresári extractor vytvoriť prázdny súbor ad
 2. zapísať zmeny: git commit -a -m "pridanie ELF ad"
 3. vrátiť sa pred náš commit: git reset --hard IDPredposlednehoCommitu

Doplnené 28.10.2009

1. Zdrojove súbory pre staršie verzie (podľa http://getmangos.com/community/showthread.php?t=9474)

 http://github.com/freghar/mangos-svn/downloads - tgz súbory

alebo GITom:

 git clone git://github.com/freghar/mangos-svn.git mangos-svn
 (prebratie konkretnej verzie - tagu: git checkout -q c1.12.2)
 (výpis všetkých tagov: git tag)


Externí odkazy