Lukitseminen

Subversion toimii yleisesti ottaen parhaiten ilman lukitusta, käyttäen luvussa ”Kopioi-muokkaa-yhdistä -ratkaisu” kuvattua menetelmää. On kuitenkin muutamia tilanteita, jolloin saattaa olla tarpeen ottaa lukitus käyttöön.

Ensin on syytä varmistaa, että Subversion-palvelimesi on päivitetty vähintään versioon 1.2. Aiemmat versiot eivät tukeneet lukitusta. Jos käytät file:// -yhteyskäytäntöä, riittää tietenkin, että Subversion-asiakasohjelma päivitetään.

Kolme merkitystä termille Lukko

Tässä luvussa, samoin kuin miltei kaikkialla tässä kirjassa, sanat lukko ja lukitus kuvaavat käyttäjien yhteiskäytön estävää mekanismia, jolla vältetään päällekkäiset toimitukset arkistoon. Subversion käyttää kuitenkin lukkoja myös kahteen muuhun tarkoitukseen, joista käyttäjän on hyvä olla tietoinen.

Toinen lukkotyyppi on työkopiolukko, jota Subversion käyttää sisäisesti estääkseen yhteentörmäykset samaa työkopiota käyttävien Subversion-asiakkaiden välillä. Tavallisesti tällaisen lukon saa, kun päivitys tai arkistotoimitus keskeytyy virheen vuoksi. Työkopiolukon voi poistaa siivoamalla työkopion luvussa ”Siivoaminen” kuvatulla tavalla.

Kolmanneksi, tiedostot ja kansiot voivat lukittua, jos ne ovat toisen prosessin käytössä. Jos esimerkiksi olet muokkaat tiedostoa Wordissä, se on lukittu eikä TortoiseSVN voi käyttää sitä.

Yleisesti ottaen voit unohtaa nämä matalan tason lukot, ellei jotain mene pieleen. Tässä kirjassa termi lukko tarkoittaa ensinnä kuvattua tyyppiä, ellei muu ole ilmeistä lauseyhteyden perusteella.

Kuinka lukitus toimii Subversionissa

Oletusarvoisesti mitään ei lukita ja kaikki kehittäjät, joilla on toimitusoikeudet arkistoon, voivat toimittaa muutoksia tiedostoihin milloin tahansa. Muut kehittäjät päivittävät työkopionsa aika ajoin, ja arkiston mahdolliset muutokset yhdistetään paikallisten muutosten kanssa.

Kun lukitset tiedoston, vain sinä voit toimittaa siihen muutoksia arkistossa. Muitten kehittäjien toimitukset estetään kunnes vapautat lukon. Lukittua tiedostoa ei voi muuttaa arkistossa, joten sitä ei voida esim. poistaa tai nimetä uudelleen, paitsi lukon omistajan toimesta.

Tärkeää

Lukkoja ei anneta käyttäjille, vaan tietyn käyttäjän tiettyyn työkopioon. Tästä syystä käyttäjä ei voi toimittaa lukitsemaansa tiedostoa arkistoon jostain toisesta työkopiosta.

Oletetaan esimerkiksi, että Jukalla on työkopio toimistotyöasemallaan. Hän aloittaa työt siellä kuvan parissa ja lukitsee kuvatiedoston. Lähtiessään kotiin hän ei ole vielä valmis eikä siis vapauta lukitusta. Jukalla on kotona toinen työkopio, ja hän päättää jatkaa töitä kuvan parissa. Hän ei voi kuitenkaan muokata tai toimittaa samaa kuvaa, koska lukko on toimistotyöaseman työkopiolla.

Muut kehittäjät eivät kuitenkaan välttämättä tiedä, että olet lukinnut tiedoston. Jolleivät he tarkista lukitustilannetta säännöllisesti, tilanne valkenee heille ensimmäisen kerran, kun toimitus arkistoon epäonnistuu. Tämä ei ole useimmiten kovin hyödyllistä. Jotta lukkojen hallinta olisi helpompaa, Subversion tukee erityistä svn:needs-lock -ominaisuutta. Kun tämä ominaisuus on asetettu jollekin tiedostolle (mihin tahansa arvoon), paikallinen työkopio kirjoitussuojataan aina työkopion haun tai päivityksen yhteydessä ellei tiedosto ole jo lukittu ko. työkopiossa. Tämä toimii varoituksena, että tiedostoa ei tulisi muokata, ellei sitä ole ensin lukittu. Kirjoitussuojatuilla, versioiduilla tiedostoilla on TortoiseSVN:ssä erityinen kuvakepäällys, joka myös viestittää, että tiedosto on lukittava ennen muokkaamista.

Lukot ovat kehittäjä- ja työkopiokohtaisia. Jos sinulla on useita työkopioita (esim. kotona, töissä), voit lukita yksittäisen tiedoston vain yhdessä työkopiossa.

Mikä neuvoksi, jos työtoverisi lukitsee tiedoston ja lähtee sitten esim. lomalle vapauttamatta sitä? Subversionissa on työkalut lukon pakotettuun vapauttamiseen. Jonkun toisen lukitseman tiedoston lukituksen purkua kutsutaan lukon rikkomiseksi. Jonkun toisen lukitseman tiedoston lukitusta itselle kutsutaan lukon varastamiseksi. Näitä toimenpiteitä ei tietenkään pidä tehdä kevyin perustein, mikäli haluat pysyä väleissä työtoveriesi kanssa.

Tiedot lukoista säilytetään palvelimella, ja lukkotunniste luodaan paikallisessa työkopiossa. Ongelmatilanteissa, esim. jos joku on rikkonut lukon, paikallinen lukkotunniste vanhenee. Arkistossa on aina viime kädessä tieto lukituksista.

Lukitseminen

Valitse työkopiostasi tiedostot, jotka haluat lukita ja anna sitten komento TortoiseSVNLukitse...

Kuva 4.61. Lukitusikkuna

Lukitusikkuna


Voit syöttää esiin aukeavaan ikkunaan lukitussyyn, jotta muut näkevät, miksi lukitsit tiedoston. Lukitussyy on vapaaehtoinen ja nykyisin käytössä vain Svnserve-pohjaisissa arkistoissa. Jos (ja vain jos) joudut ottamaan lukon joltakin toiselta kehittäjältä, ruksaa valinta Varasta lukko ja napsauta sitten OK.

Voit asettaa projektiominaisuuden tsvn:logtemplatelock asettaaksesi oletusarvoisen lukitusviestin. Katso ”Projektiasetukset” saadaksesi lisätietoa ominaisuuksien asettamisesta.

Jos suoritat komennon TortoiseSVNLukitse... kansiolle, lukitusikkuna listaa kaikki tiedostot kaikissa alikansioissa ja valitsee ne lukittaviksi. Jos todella haluat lukita koko tiedostohierarkian, niin tämä komento on sitä varten. Kannattaa kuitenkin olla varovainen tämän komennon käytössä, sillä jos lukitset muut kehittäjät ulos koko projektista, et ainakaan saa lisää ystäviä..

Lukon vapautus

Jotta et unohtaisi vapauttaa lukkoja, joita et enää tarvitse, toimitusikkuna valitsee lukitut tiedostot oletusarvoisesti arkistoon toimitettaviksi. Jos jatkat toimitusta, valittujen tiedostojen lukot vapautetaan, vaikkei niitä olisi muutettu. Jos et halua vapauttaa joidenkin tiedostojen lukkoja, voit poistaa niiden valinnan (ellei niitä ole muutettu). Jos haluat säilyttää lukon muuttamallesi tiedostolle, sinun on ruksattava valinta Pidä lukot ennen muutosten toimittamista.

Jos haluat pelkästään vapauttaa lukkoja, valitse haluamasi tiedostot työkopiostasi ja anna komento TortoiseSVNVapauta lukko. TortoiseSVN ottaa yhteyden arkistoon ja vapauttaa lukot. Voit käyttää komentoa myös kansioille vapauttaaksesi kaikki lukot palautuvasti.

Lukkojen tarkistus

Kuva 4.62. Tarkista muutokset -ikkuna

Tarkista muutokset -ikkuna


Voit käyttää komentoa TortoiseSVNTarkista muutokset... nähdäksesi, mitä lukkoja sinulla ja muilla on. Paikalliset lukot luetellaan välittömästi. Tarkistaaksesi muitten lukitukset (ja nähdäksesi, onko mikään lukoistasi rikki tai varastettu) sinun on napsautettava Tarkista arkisto.

Ikkunan kontekstivalikosta löytyvillä komennoilla voit myös muuttaa tiedostojen lukitusta. Voit myös rikkoa ja varastaa muitten lukitsemia tiedostoja.

Vältä lukkojen rikkomista ja varastamista

Jos rikot tai varastat jonkun muun lukon kertomatta heille, saatat aiheuttaa turhaa työtä. Jos muutettavat tiedostot eivät ole yhdistettävissä ja varastat jonkun toisen lukon, niin lukon vapauttamisen jälkeen he ovat vapaita toimittamaan omat muutoksensa ja samalla ylikirjoittamaan sinun muutoksesi. Subversion ei hukkaa tietoa, mutta olet lukon varastamalla menettänyt sen antaman ryhmätyötuen.

Lukitsemattomien tiedostojen pakottaminen kirjoitussuojatuiksi

Kuten edellä on kuvattu, tehokkain tapa käyttää lukitusta on asettaa svn:needs-lock -ominaisuus tiedostoille. Katso ohjeet ominaisuuksien asettamiseen luvusta ”Projektiasetukset”. Tiedostot, joilla on tämä ominaisuus, ovat aina kirjoitussuojattuja työkopiossasi, ellet ole lukinnut niitä.

TortoiseSVN käyttää erityistä kuvakepäällystä muistuttamaan tästä.

Jos projektissasi on voimassa käytäntö, jonka mukaan tiedostot on lukittava ennen niiden muuttamista, saattaa olla näppärää käyttää Subversionin automaattisia ominaisuuksia asettamaan ominaisuus aina, kun lisäät uusia tiedostoja. Katso lisää aiheesta luvusta ”Automaattiset ominaisuudet”.

Lukituskomentojonot

Kun luot uuden arkiston, niin Subversion-versiosta 1.2 alkaen arkiston hooks-hakemistoon luodaan neljä komentojonopohjaa. Näitä kutsutaan ennen lukitusta ja lukon vapautusta sekä lukituksen ja lukon vapautuksen jälkeen.

Saattaa olla kannattavaa asentaa palvelimelle sellaiset post-lock ja post-unlock -komentojonot, jotka lähettävät sähköpostia, joka kertoo, mikä tiedosto lukittiin/vapautettiin. Tällöin kaikki kehittäjät saavat tiedon, jos joku lukitsee tiedoston tai vapauttaa lukon. Löydät esimerkin komentojonosta arkistokansiosta hooks/post-lock.tmpl.

Voit käyttää komentojonoja myös estämään lukkojen rikkomisen tai varastamisen, tai kenties sallia ne vain erikseen nimetylle ylläpitäjälle. Tai ehkä haluat lähettää sähköpostia kehittäjälle, jonka lukkoa ollaan rikkomassa tai varastamassa.

Lue lisätietoa luvusta ”Palvelinpään komentojonot”.