Različice dokumentov
Sistemi za nadzor različic (ali revizij; po angleško jih imenujemo version control ali revision control) so v računalniških krogih splošno znana in pogosto uporabljana rešitev za shranjevanje različic programske opreme. Povedano po domače - z njimi lahko naredimo posnetek izvirne kode programa v različnih časovnih obdobjih, se med temi posnetki premikamo, jih primerjamo in podobno. Omogočeno nam je vodenje več vzporednih razvojnih vej, kar olajša hkratno delo več razvijalcev na istem projektu. In še in še - programerji pogosto pravimo, da vsakdo, ki ima vsaj malo soli v glavi, uporablja sisteme za nadzor različic tudi za razvoj svojih, hišnih projektkov, ki nikoli ne bodo dočakali javne rabe.
Če bi bili ti sistemi uporabni le za programerje, zagotovo ne bi brali o njih na straneh z nasveti. A ni tako. Uporablja jih lahko vsak, ki potrebuje shranjevanje različic dokumentov, slik, glasbe, skratka - česarkoli. Zato smo pripravili kratka navodila za namestitev takšnega sistema in njegovo rabo.
Eden najbolj priljubljenih sistemov za nadzor različic (no, vsaj med odprtokodnimi rešitvami), Concurrent Versions System (CVS), je z nami že od leta 1986. A njegovi časi se iztekajo, zato o njem ne bomo pisali. V zadnjih letih ga nadomeščajo druge odprtokodne rešitve, med katerimi je najbolj priljubljen strežnik Subversion (SVN). Subversion je delo podjetja CollabNet, ki je tudi avtor ene od najbolj priljubljenih rešitev za okolje Windows. Zato ni nič čudnega, da smo ravno njihov strežnik uporabili za tokratni članek.
Strežnik
Potrebovali boste torej paket "CollabNet Subversion Server and Client", ki ga prenesete s strani www.open.collab.net/downloads/subversion/. Za prenos se morate najprej registrirati, ne bo pa vam treba nič plačati.
Namestitveni program vas bo prestrašil z množico vprašanj. Najprej ga bo zanimalo, ali hočete namestiti samo strežnik (SVNSERVE) ali tudi spletni strežnik (Apache). Slednjega potrebujete, če hočete do shranjenih podatkov dostopati po svetovnem spletu in če, seveda, spletnega strežnika še nimate nameščenega. Nato bo od vas pričakoval vnos vrat TCP/IP (pustite privzeta na 3690, razen če dobro veste, kaj počnete - a če to drži, potem verjetno ne berete teh vrstic) in mapo, v kateri bodo shranjene revizije. Strežnik sistema za nadzor različic namreč hrani vse različice datotek (oziroma, v primeru tekstovnih datotek, razlike med njimi) v neki mapi. To shrambo imenujemo repozitorij (ne, za to zadevo nimamo lepega slovenskega imena) in v tem članku predvidevamo, da ste nastavitev pustili na privzeti vrednosti c:\svn_repository. Nato morate vnesti vrata, na katerih bo odgovarjal strežnik Apache (če na računalniku nimate spletnega strežnika, le pustite privzeto vrednost 80). Še nekaj pritiskov na gumb Next in program se bo končno namestil.
Namestitev bo naredila dve novi storitvi (service), imenovani "CollabNet Subversion svnserve" in "CollabNet Subversion Apache", a jih ne požene. Na tem mestu je računalnik najbolje znova zagnati in pustiti operacijskemu sistemu, da storitve požene med zagonom.
Namestitveni program je naredil mapo c:\svn_repository, ki pa je prazna. V njej moramo zdaj narediti nov repozitorij. Tega se lahko lotimo ročno, v ukazni vrstici, bolje pa bo, da si namestite še grafični odjemalec TortoiseSVN, ki ga boste tako ali tako potrebovali za upravljanje datotek. Če se želite postopka kljub vsemu lotiti ročno, pa si preberite knjigo "Version Control with Subversion", ki jo je namestitveni program pustil v mapi "c:\Program Files\CollabNet\Subversion Server\svn-book.pdf". Ukaz, ki ga boste potrebovali, se imenuje svnadmin.
Če pa se problema lotite na bolj "uporabniški" način, se odpravite na tortoisesvn.net/downloads ter si prenesite in namestite ustrezno različico programa. Na voljo je namreč za 32-bitne in 64-bitne Windows. Namestite lahko tudi obe različici hkrati (če uporabljate 64-bitne Windows) in jih uporabljate iz različnega okolja - 64-bitno iz okenske lupine, 32-bitno pa iz 32-bitnega programa za upravljanje datotek. Da, seveda mislim na izredno priljubljeni Total Commander.
Po namestitvi "želvaka" bo treba sistem znova zagnati, nato pa bo končno vse pripravljeno za delo. Najprej potrebujemo repozitorij. V mapi c:\svn_repository naredite podmapo z imenom, ki bo opisovalo njen namen. Jaz, denimo, v repozitorij shranjujem članke in sem jo zato poimenoval "clanki". Nato (v Explorerju) z desno mišjo tipko kliknite to mapo ter s prikaznega menuja izberite TortoiseSVN, Create repository here. Postopek bo končan praktično v trenutku, v izbrani mapi pa se bo znašlo nekaj podmap - conf, dav, db in druge. Naj vas ne skrbijo pretirano, v njih bo Subversion shranjeval svoje datoteke.
Nato boste morda želeli poskrbeti za varnost podatkov. Privzeto strežnik Subversion dovoli dostop do podatkov vsakemu uporabniku, ki lahko do njega dostopa. Če želite dostop zaščititi z geslom, v tekstovnem urejevalniku (Beležnica bo zadoščala) odprite datoteko c:\svn_repository\clanki\conf\passwd in v razdelek "[users]" dodajte vrstico oblike uporabnisko_ime = geslo. Nekako tako:
[users]
primoz = mojeskrivnogeslo
Nato v Beležnici odprite še datoteko Svnserve.conf, ki leži v isti mapi, ter v razdelku "[general]" omogočite naslednje vrstice:
[general]
anon-access = none
auth-access = write
password-db = passwd
Z izrazom "omogočite" želimo povedati, da pred temi vrsticami ne sme biti nobenega znaka #, ki pomeni komentar.
Delo z različicami
Zdaj pa se lahko začnemo igrati. Na računalniku, ki je povezan s strežnikom (seveda je lahko to kar isti računalnik), naredimo mapo, v kateri bodo shranjene datoteke, ki jih bo imel sistem za shranjevanje različic pod svojim nadzorom. Denimo, da ji je ime c:\clanki. Kliknite jo z desno mišjo tipko in izberite SVN Checkout.
Priprava imenika za delo s sistemom za shranjevanje različic
V pogovorno okno morate vpisati naslov repozitorija, ki bo svn://localhost/clanki, če sta odjemalec in strežnik pognana na istem računalniku, sicer pa boste morali "localhost" zamenjati z imenom računalnika, na katerem teče strežnik. Še klik OK in program bo izpisal, da je opravil delo.
V mapi c:\clanki se je znašla podmapa .svn. To podmapo potrebuje odjemalec SVN za shranjevanje lastnih datotek. Vsebovala jo bo tudi vsaka podmapa mape c:\clanki.
Zdaj pa je že čas, da v shrambo pospravimo kakšno datoteko. V našem primeru smo v mapi c:\clanki naredili podmapo svn, v njej pa datoteko "svn za domačo rabo.doc", ki je vseboval prvo različico tega članka. Morda bi pričakovali, da bo vsaka podmapa in vsaka datoteka v mapi, ki je že del sistema, samodejno vključena v repozitorij, pa ni tako. Mapo, datoteko - karkoli pač želimo shraniti - moramo "na roke" dodati v sistem. Postopek je enostaven - z desno tipko (kajpada) kliknete mapo svn ter izberete Tortoise SVN, Add. V prikaznem oknu izberete datoteke/mape, ki jih želite dodati, ter kliknete OK.
S tem so izbrane datoteke postale označene za dodajanje v strežnik, niso pa še shranjene. Za to morate spet z desno klikniti mapo svn (ali pa kar mapo clanki) ter izbrati SVN Commit. V okno lahko vpišete še kratek opis dejanja (denimo "prva različica besedila") in kliknete OK. Program vas bo vprašal še po uporabniškem imenu in geslu. Če ne želite gesla stalno vnašati, označite okence "Save authentication".
Zdaj se preselimo na drug računalnik ... ali pa samo v drugo mapo. Za test bo zadoščalo. Naredite mapo c:\clanki2 in na njej ponovite postopek z začetka tega razdelka (desni klik, SVN Checkout). Tokrat mapa ne bo ostala prazna, temveč se bo v njej znašla podmapa svn, v njej pa datoteka "svn za domačo rabo.doc".
Postopek lahko zdaj pojavljate v neskončnost. Datoteko spremenite v eni mapi, izvedite SVN Commit, v drugi mapi naredite SVN Update in datoteka se bo pojavila tam. Datoteke lahko seveda tudi poljubno dodajate in brišete (Tortoise SVN, Delete).
Bistvo sistemov za nadzor različic je, seveda, nadzor nad različicami. Če bi radi prišli do starejše različice datoteke, jo kliknite z desno mišjo tipko in izberite z menuja Tortoise SVN, Show log. S seznama lahko izberete poljubno različico datoteke, jo kliknete z desno tipko ter s prikaznega menuja izbirate med milijardo možnosti, med katerimi najdete tudi Revert to this revision (vrnitev datoteke na izbrano različico) ter Checkout (ustvari kopijo stare različice datoteke).
Za začetek naj bo dovolj. Subversion sicer omogoča še veliko, veliko več, a za začetek bo zadoščalo. Če pa vas tema resnično zanima, si le preberite v začetku članka omenjeno knjigo.
Spletni dostop
Če želite do repozitorija dostopati prek spleta, je najbolje, če uredite še dostop prek spletnega strežnika Apache. Namestil ga je že namestitveni program za CollabNet Subversion Server, namestitev pa lahko preverite, tako da se z brskalnikom odpravite na naslov http://localhost. V oknu bi se moralo izpisati "It works!" Če brskalnik sporoči napako, potem ... hja, potem je pa nekaj hudo narobe in verjetno bo moral računalnik vzeti v roke nekdo, ki se na programske probleme vsaj malo spozna.
Če imate svoj strežnik Apache, potem boste morali popraviti datoteko httpd.conf. V njej mora pisati naslednje:
LoadModule dav_module modules/mod_dav.so
LoadModule dav_svn_module modules/mod_dav_svn.so
<Location /svn>
DAV svn
SVNParentPath C:\svn_repository
</Location>
Za test se odpravite na naslov http://localhost/svn/clanki. Brskalnik bi moral izpisati strukturo repozitorija, po kateri se lahko sprehajate s klikanjem. Na enak način lahko prenesete zadnjo različico datotek, dostop do starejših različic pa z brskalnikom ni mogoč.
Repozitorij lahko še vedno upravljate s programom TortoiseSVN, le pot do njega morate nastaviti drugače. Ko naredite prvi SVN Checkup, v okence z naslovom repozitorija ne smete zapisati svn://localhost/clanki, temveč http://localhost/clanki. Mogoč je seveda tudi dostop od koderkoli s svetovnega spleta, a v tem primeru si boste morali urediti stalni ali dinamični naslov ter odpreti vrata 80 na vdorobranu in jih preusmeriti na računalnik s strežnikom Apache. Opis tega postopka žal presega okvire članka.
Dostop po protokolu http pa prinaša majhno težavo - pri tem se ignorira datoteka z gesli, ki smo jo spreminjali nekje na začetku članka. Geslo morate nastaviti še enkrat, a tokrat z orodji strežnika Apache.
Na voljo sta dve možnosti nastavitve prenosa gesla - Basic, pri kateri se po omrežju prenaša geslo v le malce zakodirani obliki, ki jo lahko vsak heker v dveh sekundah pretvori v originalno geslo, ter Digest, ki je bistveno bolj varen, saj se geslo po omrežju ne prenaša, potujejo le podatki, izračunani na podlagi gesla. Način Basic bodo potrebovali le nesrečni lastniki brskalnika Internet Explorer 6. Ker je konfiguriranje tega načina podrobno opisano v danes že večkrat omenjeni knjigi, se z njim ne bomo podrobno ukvarjali.
Veliki večini uporabnikov bo ustrezal način Digest, ki ga tudi ni težko nastaviti. V Apachevi datoteki s konfiguracijo (httpd.conf) morate vključiti nalaganje modula mod_auth_digest, tako da pobrišete komentar pred vrstico
LoadModule auth_digest_module modules/mod_auth_digest.so
V isti datoteki morate spremeniti del, ki opisuje povezavo s strežnikom Subversion.
<Location /svn>
DAV svn
SVNParentPath C:\svn_repository
AuthType Digest
AuthDigestDomain /svn/
AuthName "Subversion"
AuthUserFile c:\svn_repository\svn-auth-file
Require valid-user
</Location>
Nato morate izdelati datoteko z gesli in vanjo vpisati prvega uporabnika.
c:\> "c:\Program Files\CollabNet\Subversion Server\httpd\bin\htdigest.exe" -c c:\svn_repository\svn-auth-file Subversion primoz
Adding password for primoz in realm Subversion.
New password: *********
Re-type new password: *********
Ko (če) boste dodajali naslednjega uporabnika, namesto stikala -c (create) uporabite -m (modify).
Zdaj morate le še znova zagnati spletni strežnik in zaščita z geslom bo začela delovati. Če si niste domači s programčkom za upravljanje storitev (Services), računalnik znova zaženite, pa bo.
Pa veselo shranjevanje različic!