Megpróbálom röviden összefoglalni, hogy miért is kell nekünk a Subversion és hogyan kell használni. Azt hiszem ez inkább hosszúra sikerült, de remélem legalább hasznos lesz. :-)
Ez az íromány eredetileg egy olyan projekthez készült, ami CVS-ről állt át. Aki nem ismeri a CVS-t, nyugodtan átugorhatja a következő részt. Majd esetleg írok egy teljesen alap leírást...
Itt leginkább azt tudom összefoglalni, hogy mi az, amint a Subversion tud és a CVS nem. De egyébként egy fontos szempont az, hogy a Subversion úgy lett kifejlesztve, hogy a CVS felhasználok minél könnyebben térhessenek át. :-) Úgy hogy a parancsok nagy része ismerős lesz (de azért vannak különbségek!). Amúgy átgondoltabb és sok mindenben logikusabb, mint a CVS (persze, tanultak a sok-sok CVS tapasztalatból).
Itt most csak néhány legfontosabb eltérést írom le, amit könnyű elrontani, ha valaki áttér.
svn log), sőt ez
igazából nagyon kényelmes: nem kell vadászgatni,
hogy a dijkstra.cc 1.23-as
verziójához melyik verziójú kupac.h tartozik. Erre persze a
CVS-nek is vannak módszerei, de sokkal körülményesebb.
cvs, hanem svn. :-)
update/status parancsokra:
M : ezt a file-t te módosítottad és még nem committoltad be (Modified)
U : ennek a file-nak újabb verziója volt a repository-ban és most Update-elve lett. Ez az amit a CVS random módon U vagy P betűkkel jelez.
G : ezt a file-t módosítottad, de a repositoryban is egy újabb verzió volt, és most a két változás sikeresen merGe-ölve lett. Ez az, amit a CVS cselesen P-vel jelez, hogy ne tudd megkülönböztetni a sima update-től.
C : uaz., mint a CVS-ben: Conflict
A : ez a file hozzá lett adva
D : ez a file törölve lett
status parancs, de az túlságosan bőbeszédű, ezért
nem igazán használható. Így az emberek arra, hogy megnézzék, hogy mit
csináltak a cvs update parancsot kénytelek használni (pontosabban inkább
a cvs -n update -et). Az SVN-ben csak akkor használjuk az update-et,
ha tényleg update-elni akarunk, és az svn status-t, ha arra vagyunk
kíváncsiak, hogy milyen állapotban van a munkánk!!!
diff alapból unified diff. Tehát az svn diff mögé nem kell mindig
az a -u kapcsoló. :-)
A repository címe: https://regilemon.cs.elte.hu/svn2/rfid/. És igen, ez a https, ez az a https, úgy hogy első lépésként lehet fogni egy böngészőt és azzal megnézegetni az egészet. Szerintem ez egy nagyon jó feature, hogy bárki megnézheti a repository legfrissebb állapotát minden segédeszköz nélkül.
A valódi használat az svn parancs segítségével történhet, amit
mindenki kipróbálhat a cs.elte.hu modern gépein (a 113-ban olyanok vannak).
Hasonlóan, mint a CVS-nél, itt is az svn help a barátunk. Ez a létező
alparancsok listáját írja ki egysoros leírással a használatukról. Az
svn help parancs egy rövid leírást ad a parancsról és használható
opciókról.
Egy kis szóhasználat: a repository az az a valami, ami fent van a szerveren és amiben a project minden verziója el van tárolva. És working copy -nak nevezzük ennek egy kicheckoutolt változatát, ami ott van valahol a könyvtáradban, ami a project egy konkrét verzióját tartalmazva esetleg itt-ott módosítva általad. Ezt a két fogalmat fontos elsajátítani ahhoz, hogy megértsük az svn-es leírásokat.
Az svn részletes manuálját itt találod meg: http://svnbook.red-bean.com/.
svn sessionElőször is checkout-oljuk ki a dolgot. (Ehhez természetesen szükségünk lesz első alkalommal a jelszavunkra).
svn checkout https://regilemon.cs.elte.hu/svn2/rfid/vote/trunk vote
Itt a második vote az egyszerűen egy könyvtár név, amibe az egészet
rakni fogja, ez bármi más is lehet.
Dolgozzunk rajta. Ehhez a legfontosabb parancsok az add (itt is mint a
CVS-nél minden új file-t vagy könyvtárat hozzá kell adni a working
copy-hoz, és aztán egy commit-tal bekerül a repositoryba), delete,
move és egy nagyon fontos parancs: revert. A revert bármilyen file-t
visszaállít olyan állapotba, amilyen az utolsó update, commit vagy
checkout után volt. Tehát, ha módosítottál egy file-t, de rájöttél, hogy
nem jó a módosítás, vagy add-oltad ill. delete-elted és mégsem kellett volna
ezzel visszaállíthatod.
A módosításaid vagy a file-ok történetének megvizsgálásához a
legfontosabbak: status, diff és log.
Ha le akarod tölteni a repositoryba bekerült új dolgokat: update (az
svn status -u egy *-al jelöli azokat a file-okat, amik frissültek a
repositoryban). Update-nél keletkezhetnek conflictok, ezt az svn
ugyanolyan vidám jelöléssel bejelöli a file-ban, de pluszban eltárolja a
te eredeti verziódat és a repositoryból lehozott tiszta verziót! Miután
feloldottad a conflictot egy resolved paranccsal tudod ezt jelezni az
svn-nek.
Ha úgy gondolod, hogy kész vagy valamilyen módosítással, akkor ellenőrizd,
hogy ez működik a repositoryban levő legfrissebb változattal is (azaz
update-elj) és utána commit-tal tudod feltölteni a változásokat a
repositoryba. Minden egyes committal egyel nő a repository verziója.
Az egybetartozó változásokat együtt commitold, a különtartozókat -- külön.
:-)
Írjál értelmes commit log-ot.
Csináltam a repositorynkban egy alkönyvtárat, ami direkt arra való, hogy lehessen kisérletezni és tanulgatni az svn-t:
svn checkout https://regilemon.cs.elte.hu/svn2/rfid/sandbox
Legtöbb svn parancs egy vagy több file vagy könyvtárnevet vár paraméterül.
Ha nem adunk meg neki ilyen paramétert, akkor az aktuális könyvtár lesz
az. Ha az argumentumok között szerepel könyvtár, akkor az rekurzívan
dolgozza fel! Erről általában a -N kapcsolóval lehet lebeszélni (például
ha add-olni akarsz egy könyvtárat, de nem az összes benne lévő file-t,
akkor először egy svn add -N könyvtár -al add-olod magát a könyvtarat és
utána benne egy külön svn add file1 file2 ... -al a kívánt file-okat).
Pontosabban néhány "veszélyes" parancsnál a nemrekurzív viselkedés az
alapértelmezett (pl. revert), ilyenkor a -R kapcsolóval lehet kérni,
hogy mégis az legyen.
-r -rel lehet
megadni, hogy melyik verziót checkout-olja ki.
-m -el lehet megadni a commit log-ot, vagy felhoz egy editort. Az
alapértelmezett editor rendszerről-rendszerre változik, ha valaki más
editort szeretne, ezt --editor-cmd kapcsolóval vagy az EDITOR környezeti
változóval megteheti.
-r -rel lehet megadni, hogy melyik verzióval diff-elje. Ha két
kettősponttal elválasztott revisiont adsz meg, akkor azok közötti
különbségeket adja. Igazi revisionök helyett lehet írni a következőket:
HEAD: a repositoryban lévő legutolsó
BASE: a working copy-d alapjául szolgáló változat (azaz a legutolsó update-ed ill. commit-od változata).
PREV: a "megelőző" változat, azaz ha kíváncsi vagy, hogy mit is commit-oltál utoljára.
{dátum}: egy megadott dátumkor érvényes változat.
Például:
svn diff -r "16:{2003-12-24}" people
-v kapcsolóval kiírja, hogy az adott
verziónál milyen file-ok változtak. Ha egy könyvtárra adod ki, akkor az
összes olyan log-ot megkapod, aminél valamelyik alatta lévő file
változott. Figyelem: ehhez fontos, hogy a könyvtár aktuális verzióban
legyen, tehát update-eljük előtte (vagy adjunk meg egy -r HEAD:1 kapcsolot)!
Update-elés nélkül, sőt working copy
nélkül is megnézhetjük a legútolsó változat log-jait, ha paraméterül egy
repository-beli teljes útvonalat adunk meg:
svn log -v https://regilemon.cs.elte.hu/svn2/rfid
-v kapcsolóval több információt ír ki (pl. a revision számokat). Alapból
ez a parancs nem kérdez le a hálózaton semmit, viszont -u kapcsolóval
lekérdezi, hogy a repository-bal van-e újabb változat (és ezt egy *-al
jelzi).