Zaklepanje

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.

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.

The Three Meanings of Lock

In this section, and almost everywhere in this book, the words lock and locking describe a mechanism for mutual exclusion between users to avoid clashing commits. Unfortunately, there are two other sorts of lock with which Subversion, and therefore this book, sometimes needs to be concerned.

The second is working copy locks, used internally by Subversion to prevent clashes between multiple Subversion clients operating on the same working copy. Usually you get these locks whenever a command like update/commit/... is interrupted due to an error. These locks can be removed by running the cleanup command on the working copy, as described in “Čiščenje”.

And third, files and folders can get locked if they're in use by another process, for example if you have a word document opened in Word, that file is locked and can not be accessed by TortoiseSVN.

You can generally forget about these other kinds of locks until something goes wrong that requires you to care about them. In this book, lock means the first sort unless the contrary is either clear from context or explicitly stated.

Zaklepanje v sistemu Subversion

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.

Pomembno

A lock is not assigned to a specific user, but to a specific user and a working copy. Having a lock in one working copy also prevents the same user from committing the locked file from another working copy.

As an example, imagine that user Jon has a working copy on his office PC. There he starts working on an image, and therefore acquires a lock on that file. When he leaves his office he's not finished yet with that file, so he doesn't release that lock. Back at home Jon also has a working copy and decides to work a little more on the project. But he can't modify or commit that same image file, because the lock for that file resides in his working copy in the office.

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.

Pridobivanje zaklepa

V delovni kopiji izberite datoteke, za katere želite pridobiti zaklep, potem pa izberite TortoiseSVNDobi zaklep....

Slika 4.61. Okno zaklepov

Okno zaklepov


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 V redu.

You can set the project property tsvn:logtemplatelock to provide a message template for users to fill in as the lock message. Refer to “Nastavitve projekta” for instructions on how to set properties.

Če izberete mapo in potem uporabite TortoiseSVNDobi zaklep..., 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...

Sprostitev zaklepa

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 TortoiseSVNSprosti zaklep 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.

Preverjanje stanja zaklepanja

Slika 4.62. Pogovorno okno Preveri posodobitve

Pogovorno okno Preveri posodobitve


Za preverjanje, katere zaklepe imate v lasti vi in ostali uporabiniki, lahko uporabite ukaz TortoiseSVNPreveri spremembe.... Zaklepi, ki so v vaši lasti, se pokažejo takoj. Za seznam zaklepov, ki jih imajo v lasti ostali uporabniki, uporabite gumb Preveri skladišče. 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.

Izognite se prelamljanju in kraji zaklepov

Č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.

Nastavite nezaklenjene datoteke samo za branje

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”.

Ukazna datoteka akcije za zaklepanje

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”.