Subversion toiminnassa

Työkopiot

Olet jo lukenut työkopioista; nyt näytämme, kuinka Subversion-asiakasohjelma luo ja käyttää niitä.

Subversion-työkopio on tietokoneellasi sijaitseva tavallinen kansiopuu, joka sisältää kokoelman tiedostoja. Voit muokata näitä tiedostoja mielesi mukaan, ja mikäli ne ovat lähdekooditiedostoja, voit kääntää ne ohjelmaksi tavanomaiseen tapaan. Työkopiosi on yksityistä työaluettasi: Subversion ei koskaan lisää siihen muiden tekemiä muutoksia, eikä myöskään siirrä omia muutoksiasi muitten saataville ennen kuin erikseen komennat sitä tekemään niin.

Tehtyäsi muutoksia työkopiossasi oleviin tiedostoihin ja varmistuttuasi, että ne toimivat moitteetta, voit Subversionin komennoilla julkaista muutoksesi muille projektissasi työskenteleville ihmisille (kirjoittamalla arkistoon). Jos muut ihmiset julkaisevat omia muutoksiaan, voit yhdistää ne työkopioosi Subversionin komennoilla (lukemalla arkistosta).

Työkopio sisältää myös ylimääräisiä tiedostoja, joita Subversion luo ja ylläpitää. Eräs näistä on .svn -hakemisto, jota kutsutaan työkopion hallintohakemistoksi . Hallintohakemiston tiedostojen avulla Subversion havaitsee, mitkä tiedostot sisältävät julkaisemattomia muutoksia, ja mitkä tiedostot ovat vanhentuneita suhteessa muiden työhön. Ennen versiota 1.7 Subversion loi hallintohakemiston jokaiseen työkopion versioituun hakemistoon. Versiosta 1.7 alkaen Subversion toimii täysin eri tavoin: kullakin työkopiolla on vain yksi hallintohakemisto, joka sijaitsee suoraan työkopion juuren alla.

Tyypillinen Subversion-arkisto sisältää usein useiden projektien tiedostot (tai lähdekoodin); tavallisesti kukin projekti on alihakemisto arkiston tiedostopuussa. Tällaisessa järjestelyssä käyttäjän työkopio vastaa yleensä yhtä arkiston alipuuta.

Oletetaan esimerkiksi, että arkistosi sisältää kaksi ohjelmistoprojektia.

Kuva 2.6. Arkiston tiedostojärjestelmä

Arkiston tiedostojärjestelmä

Toisin sanoen arkiston juurihakemistossa on kaksi alihakemistoa: paint ja calc.

Saadaksesi työkopion sinun täytyy kopioida jonkin arkiston polun tiedostot työasemallesi. Tätä kutsutaan työkopion noutamiseksi (engl. check out). Työkopion noutamisella ei ole tekemistä lukituksen tai resurssien varaamisen kanssa; se vain luo sinulle oman paikallisen kopion projektista.

Oletetaan, että teet muutoksia tiedostoon button.c. Koska .svn -hakemisto muistaa tiedoston muutospäivämäärän ja alkuperäisen sisällön, Subversion tietää, että olet muuttanut tiedostoa. Subversion ei kuitenkaan julkaise muutoksiasi ennen kuin erikseen komennat sitä. Muutosten julkaisutoimentpidettä kutsutaan yleisemmin arkistoon toimittamiseksi (engl. commit).

Julkaistaksesi muutoksesi muille, voit käyttää Subversion-komentoa toimita arkistoon.

Nyt muutoksesi tiedostoon button.c on toimitettu arkistoon; jos joku toinen käyttäjä hakee työkopion projektista /calc, hän näkee muutoksesi tiedoston viiimeisimmässä versiossa.

Oletetaan, että sinulla on työtoveri Sally, joka nouti työkopion projektista /calc samaan aikaan sinun kanssasi. Kun toimitat muutoksesi tiedostoon button.c, Sallyn työkopio säilyy muuttumattomana; Subversion muokkaa työkopioita vain käyttäjän niin pyytäessä.

Saattaakseen projektinsa ajan tasalle, Sally voi pyytää Subversionia päivittämään työkopionsa käyttäen komentoa päivitä. Tämä liittää muutoksesi Sallyn työkopioon, samoin kuin kaikki muutkin arkistoon edellisen työkopion noudon jälkeen tapahtuneet muutokset.

Huomaa, ettei Sallyn ei tarvinnut kertoa, mitä tiedostoja päivitetään; Subversion käyttää arkiston lisäksi .svn -hakemistojen tietoja päättääksen, mitkä tiedostot pitää saattaa ajan tasalle.

Arkistopaikantimet

Subversion-arkistoihin voi päästä käsiksi useilla eri tavoilla - suoraan paikalliselta levyltä tai erilaisten yhteyskäytäntöjen kautta. Arkiston paikka ilmaistaan kuitenkin aina paikantimella (Uniform Resource Locator, URL). Paikantimesta käy ilmi, miten arkistoon kytkeydytään:

Taulu 2.1. Paikantimet arkistoon kytkeytymiseksi

SkeemaKytkeytymistapa
file:// Suora kytkeytyminen arkistoon paikallisella tai verkkolevyllä.
http:// Kytkeytyminen WebDAV-käytännöllä Subversion-tietoiseen Apache-palvelimeen.
https:// Kuten http://, mutta salattuna SSL-tekniikalla.
svn:// TCP/IP -pohjainen kytkeytyminen svnserve-palvelimeen ilman tunnistusta, oman yhteyskäytännön avulla.
svn+ssh:// Salattu TCP/IP-pohjainen kytkeytyminen svnserve-palvelimeen tunnistuksen kera, oman yhteyskäytännön avulla.

Subversion-paikantimet käyttävät enimmäkseen normaalia syntaksia, joka sallii palvelimen nimen ja porttinumeron liittämisen osaksi paikanninta. Kytkeytymistapaa file:// käytetään yleensä paikallisesti, vaikka sitä voidaan käyttää myös verkkopalvelimen UNC-polkujen kanssa. Paikannin on siten muotoa file://konenimi/polku/arkistoon. Paikallisessa tietokoneessa paikantimen konenimiosan pitää joko puuttua tai olla localhost. Tästä syystä paikalliset polut sisältävät yleensä kolme kauttaviivaa, file:///polku/arkistoon.

Lisäksi file:// -kytkeytymistavan käyttäjien pitää Windows-alustalla käyttää epävirallista standardia kytkeytyäkseen arkistoihin, jotka sijaitsevat samassa koneessa, mutta eri asemassa kuin nykyinen asema. Kumpikin seuraavista paikanninsyntakseista toimii (X on asema, jossa arkisto sijaitsee):

file:///X:/polku/arkistoon
...
file:///X|/polku/arkistoon
...

Huomaa, että paikannin käyttää tavallisia kauttaviivoja, vaikka Windows-polut käyttävät natiivisti kenoviivoja.

Voit kytkeytyä FSFS-tekniikalla toteutettuun arkistoon verkkojaon kautta, mutta tätä ei suositella useista eri syistä:

  • Annat kaikille käyttäjille suoran kirjoitusoikeuden, joten he voivat vahingossa tuhota tai muutoin tehdä arkiston tiedostojärjestelmän käyttökelvottomaksi.

  • Kaikki verkkojakojen yhteyskäytännöt eivät tue Subversionin tarvitsemaa lukitustapaa. Jonain päivänä huomaat, että arkistosi on huomaamatta korruptoitunut.

  • Pääsyoikeudet on asetettava juuri oikealla tavalla. SAMBA on erityisen vaikea tässä suhteessa.

  • Jos joku käyttäjistä asentaa uuden asiakasversion, joka päivittää arkistorakenteen, muut käyttäjät eivät kykene enää kytkeytymään arkistoon ilman asialasversion päivitystä.

Versiot

Toiminto svn commit julkaisee yhteen tai useampaan tiedostoon ja hakemistoon tehdyt muutokset yhtenä atomisena (onnistuu joko kokonaan tai arkisto ei muutu) tapahtumana. Voit muuttaa tiedostojen sisältöä, luoda, poistaa, uudelleen nimetä ja kopioida tiedostoja ja hakemistoja työkopiossasi ja lopuksi toimittaa koko muutosjoukon arkistoon yhtenä kokonaisuutena.

Arkistossa kutakin toimitusta kohdellaan atomisena: joka kaikki toimituksen muutokset tulevat voimaan, tai mikään niistä ei tule voimaan. Subversion koettaa säilyttää tämän atomisuuden ohjelmien kaatuessa, järjestelmien kaatuessa, verkkoyhteyksien katkeillessa ja muiden käyttäjien toimien keskellä.

Joka kerta kun arkisto hyväksyy toimituksen, tiedostojärjestelmäpuu siirtyy uuten tilaan, jota kutsutaan versioksi. Kullekin versiolle annetaan yksikäsittteinen luonnollinen luku, yhtä isompi kuin edellinen versio. Uuden arkiston ensiversio on nolla ja se koostuu pelkästään tyhjästä juurihakamistosta.

Arkisto on näppärää havainnollistaa joukkona puita. Kuvittele joukkoa versionumeroita, alkaen nollasta ja ulottuen vasemmalta oikealle. Jokaiseen versionumeroon liittyy tiedostojärjestelmäpuu, joka on otos arkiston tilasta kunkin toimituksen jälkeen.

Kuva 2.7. Arkisto

Arkisto

On tärkeää huomata, että työkopiot eivät aina vastaa yhtä tiettyä arkiston versiota; ne voivat sisältää tiedostoja useista eri versioista. Oletetaan esimerkiksi, että haet työkopion arkistosta, jonka viimeisin versio on 4:

calc/Makefile:4
     integer.c:4
     button.c:4

Tällä hetkellä tämä työkopio vastaa täsmälleen versiota 4 arkistossa. Oletetaan kuitenkin, että teet muutoksen tiedostoon button.c, ja toimitat tämän muutoksen. Olettaen, että muita muutoksia ei ole tapahtunut, toimituksesi luo arkistosta version 5, ja työkopiosi näyttää nyt seuraavalta:

calc/Makefile:4
integer.c:4
button.c:5

Oletetaan, että tässä kohden Sally toimittaa muutoksen tiedostoon integer.c, luoden version 6. Jos käytät komentoa svn update saattaaksesi työkopiosi ajan tasalle, se näyttää seuraavalta:

calc/Makefile:6
     integer.c:6
     button.c:6

Sallyn tiedostoon integer.c tekemät muutokset ilmestyvät työkopioosi, ja oma muutoksesi on yhä mukana tiedostossa button.c. Tässä esimerkissä tiedoston Makefile sisältö on identtinen versioissa 4, 5, ja 6, mutta Subversion merkitsee työkopiosi tiedoston Makefile versiolla 6 ilmaisemaan, että se on yhä ajan tasalla. Tehtyäsi päivityksen työkopiosi juurihakemistolle se vastaa yleisesti ottaen täsmälleen yhtä arkiston versiota.

Kuinka työkopiot seuraavat arkiston tilaa

Subversion tallettaa jokaista työkopion tiedostoa varten kaksi oleellista tietoa .svn/ -hallintoalueelle:

  • mihin versioon työkopiosi tiedosto perustuu (tätä kutsutaan tiedoston työversioksi ), ja

  • aikaleiman, joka kertoo, milloin työkopio viimeksi päivitettiin arkiston toimesta.

Näiden tietojen avulla, keskustelemalla arkiston kanssa, Subversion-asiakas voi päätellä, missä seuraavista tiloista työkopion tiedosto on:

Muuttumaton ja nykyinen

Työkopion tiedosto on muuttumaton, eikä siihen ei ole arkistossa kohdistunut muutoksia työversion haun jälkeen. Komennot toimita ja päivitä eivät tee tiedostoille mitään.

Paikallisesti muuttunut ja nykyinen

Tiedostoa on muutettu työkopiossa, eikä sitä ole muutettu arkistossa kantaversion jälkeen. On olemassa paikallisia muutoksia, joita ei ole toimitettu arkistoon, joten komento toimita julkaisee muutoksesi, ja komento päivitä ei puolestaan tee tiedostolle mitään.

Muuttumaton ja vanhentunut

Tiedostoa ei ole muutettu työkopiossa, mutta se on muuttunut arkistossa. Tiedosto pitäisi jossain vaiheessa päivittää, jotta se saadaan ajan tasalle julkaistun version kanssa. Komento toimita ei tee mitään tiedostolle, ja komento päivitä tuo tiedoston viimeisimmät muutokset työkopioosi.

Paikallisesti muuttunut ja vanhentunut

Tiedostoa on muutettu sekä työkopiossa että arkistossa. Komento toimita palauttaa virheen vanhentunut (out-of-date). Tiedosto pitää ensin päivittää; komento päivitä yrittää yhdistää julkaistut muutokset paikallisten muutosten kanssa. Mikäli Subversion ei kykene yhdistämään kaikkia muutoksia automaattisesti, syntyneiden ristiriitojen ratkaisu jätetään käyttäjän tehtäväksi.