Git
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čnejsí, 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 -n v0.12 MaNGOS 0.12 v0.13-dev1 MaNGOS 0.13 dev1 -- moving from client 3.0.3
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
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ú chcemte 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
Odkazy:
http://github.com/mangos/mangos/tree/master Mangos GIT repository Web Wiev
http://git-scm.com/ GIT Main Site