Subversion v splošnem najbolje deluje brez zaklepanja, z uporabo modela “kopiraj-spremeni-spoji”, kot je to opisano v “Rešitev kopiraj-spremeni-spoji”. Se pa vseeno pojavijo situacije, kjer je potrebno uveljaviti določeno obliko zaklepanja.
Za delo uporabljate datoteke, ki jih ni mogoče spajati, naprimer grafične datoteke. Če dva uporabnika spremenita isto datoteko, spajanje ni mogoče, zato bo eden izmed njih svoje spremembe izgubil.
Vaše podjetje je v preteklosti vedno uporabljalo nadzor različic z zaklepanjem, zato se je vodstvo odločilo, da je “zaklepanje najboljša rešitev”.
Najprej morate strežnik nadgraditi na različico Subversion 1.2 ali novejšo. Starejše različice namreč ne podpirajo zaklepanja. Če za dostop uporabljate protokol file://, potem morate seveda nadgraditi samo odjemalca.
Po privzetih nastavitvah elementi niso zaklenjeni in vsakdo, ki ima pravice za pisanje v skladišču, lahko kadarkoli objavi spremembe katerekoli datoteke. Ostali uporabniki bodo periodično posodabljali svojo delovno kopijo. Spremembe v skladišču bodo spojene s krajevnimi spremembami.
Če za datoteko pridobite zaklep, potem lahko le vi objavite spremembe na tej datoteki. Objave s strani drugih uporabnikov bo sistem zaustavil, vse dokler zaklepa ne sprostite. Zaklenjene datoteke v skladišču ni mogoče spremeniti na noben način, tako da se je ne da izbrisati ali preimenovati, razen če niste ste lastnik zaklepa.
Ni pa nujno, da uporabniki vedo, da ste datoteko zaklenili. Če statusa zaklepanja ne preverjajo redno, bodo to opazili šele, ko bo puskusili datoteko objaviti in objava ne bo uspešna. To pa ni najbolj uporabno. Da bi bilo delo z zaklepi lažje, je na voljo nova lastnost svn:needs-lock. Če je ta lastnost nastavljena (na katerokoli vrednost), bo krajevna kopija datoteke ob prevzemu ali posodobitvi na voljo samo za branje, razen če je ta delovna kopija lastnica zaklepa za to datoteko. To deluje kot opozorilo, da datoteke ne urejajte, preden zanjo niste pridobili zaklepa. Datoteke pod nadzorom različic, ki so hkrati tudi označene samo za branje, imajo v programu TortoiseSVN posebno prekrivno ikono, ki vas opozarja, da morate pred urejanjem pridobiti zaklep.
Zaklep se pridobi za določeno delovno kopijo in lastnika. Če imate v lasti več delovnih kopij (doma, v službi), ste lahko lastnik zaklepa datoteke samo v eni od teh delovnih kopij.
Če eden od vaših sodelavcev pridobi zaklep in odide na dopust, ne da bi zaklep sprostil, kaj storite? Subversion omogoča, da prisilno prevzamete zaklep. Sprostitev zaklepa nekoga drugega je znana pod imenom prelom zaklepa, prisilen prevzem zaklepa, ki je v lasti nekoga drugega, pa kraja zaklepa. Seveda teh ukazov ne smete zlorabljati, če želite ostati v dobrih odnosih s sodelavci.
Zaklepi so shranjeni v skladišču, žeton za zaklep pa je shranjen v krajevni delovni kopiji. Če se zgodi prelom zaklepa, krajevni zaklep postane neveljaven. Informacija v skladišču se vedno uporablja kot edina referenčna.
V delovni kopiji izberite datoteke, za katere želite pridobiti zaklep, potem pa izberite → .
Pojavi se pogovorno okno, ki vam omogoča vpis sporočila, tako da lahko ostali uporabniki vidijo, zakaj ste datoteko zaklenili. Komentar ni obvezen in se uporablja le v primeru uporabe strežnika svnserve. Če (in samo če) morate nekomu ukrasti zaklep, potrdite polje Ukradi zaklep, potem pa kliknite na gumb .
Če izberete mapo in potem uporabite → , se bo pojavilo pogovorno okno Zaklep z vsemi datotekami v vseh podmapah. Če zares želite zakleniti celotni hierarhijo, je to pravi postopek, vendar lahko postanete zelo nepriljubljeni pri sodelavcih, če jim zaklenete celoten projekt. Bodite previdni...
Da ne bi pozabili sprostiti zaklepa, ki ga ne potrebujete več, so zaklenjene datoteke prikazane v oknu za objave in izbrane. Če nadaljujete z objavo, se zaklepi na izbranih datotekah sprostijo, tudi če datotek niste spreminjali. Če določenih zaklepov ne želite sprostiti, ustreznih datotek ne označite (če jih niste spreminjali). Če želite obdržati zaklepe na datotekah, ki ste jih spreminjali, pred objavo potrdite polje Obdrži zaklepe.
Za ročno sproščanje zaklepa v delovni kopiji izberite ustrezne datoteke in izvedite ukaz → Ker dodatni podatki niso potrebni, TortoiseSVN kontaktira skladišče in sprosti zaklep. Ukaz lahko izvedete tudi na mapi. V tem primeru se sprostitev izvede rekurzivno na vseh zaklenjenih datotekah.
Za preverjanje, katere zaklepe imate v lasti vi in ostali uporabiniki, lahko uporabite ukaz → . Zaklepi, ki so v vaši lasti, se pokažejo takoj. Za seznam zaklepov, ki jih imajo v lasti ostali uporabniki, uporabite gumb . S tem vidite tudi, če so kateri izmed vaših zaklepov prelomljeni ali ukradeni.
Iz kontekstnega menija lahko pridobite ali sprostite zaklep, prav tako pa lahko prelomite in ukradete zaklep, ki je v lasti drugih.
Če nekomu prelomite ali ukradete zaklep, ne da bi uporabniku to povedali, lahko povzročite izgubo podatkov. Če delate z datotekami, ki se jih ne da spajati, in nekomu ukradete zaklep, lahko ta uporabnik po vaši sprostitvi zaklepa objavi svojo različico datoteke in s tem povozi vašo. Subversion nikoli ne izgubi podatkov, izgubite pa lahko varnost dela v teamu, ki vam jo daje zaklepanje.
Kot je že bilo omenjeno, je najbolj učinkovita metoda za uporabo zaklepanja uporaba lastnosti svn:needs-lock. Za več informacij o tem, kako datotekam nastaviti lastnosti, preberite “Nastavitve projekta”. Datoteke, ki imajo nastavljeno to lastnost, bodo ob prevzemu ali posodobitvi vedno dobile status datoteke samo za branje, razen če je delovna kopija lastnica zaklepa.
Kot opomnik, da je datoteka namenjena samo za branje, uporablja TortoiseSVN posebno prekrivno ikono.
Če velja na projektu pravilo, da je potrebno vsako datoteko zakleniti, potem bo verjetno lažje, da uporabite samodejne lastnosti (auto-props). Tako bo ta lastnost samodejno pripeta vsaki novo dodani datoteki. Za nadaljnje informacije preberite “Samodejna nastavitev lastnosti”.
Ko ustvarite novo skladišče s sistemom Subversion 1.2 ali novejšim, se v podmapi hooks ustvarijo štiri predloge za ukazne datoteke akcij. Kličejo se pred in po pridobivanju zaklepa ter pred in po sprostitvi zaklepa.
Na strežniku je priporočljivo nastaviti ukazne datoteke akcij za post-lock in post-unlock, ki pošljejo elektronsko pošto, ko se datoteka zaklene. S pomočjo teh datotek so vsi uporabniki obveščeni, ko nekdo zaklene/odklene datoteko. Primer ukazne datoteke se nahaja v datoteki hooks/post-lock.tmpl v mapi skladišča.
Nastacite lahko tudi ukazno datoteko akcije, ki preprečuje prelom ali krajo zaklepa, ali pa te operacije dovoli le administratorju. Lahko pa nastavite pošiljanje elektronske pošte lastniku zaklepa, kadar mu nekdo zaklep prelomi ali ukrade.
Za dodatne informacije preberite “Server side hook scripts”.