Taksikeskusjärjestelmä

Ohjelmistotuotantoprojekti - Syksy 2004

Versionhallinta

Jos et muista muita Subversion-komentoja, muista svn help.

Projektin Subversion-kanta on osoitteessa:

svn+ssh://käyttäjätunnus@melkki.cs.helsinki.fi/home/group/taxi/svn
Laitoksen koneilta kantaan pääsee myös tällä osoitteella (toiminee nopeammin kuin ssh-yhteys):

file:///home/group/taxi/svn

Valmistelu

Jotta voit käyttää Subversionia, pitää laitoksen polkuun lisätä Subversionin hakemisto. Lisää seuraava rivi kotihakemistossasi olevaan .bashrc-tiedostoon:

export PATH=$PATH:/opt/svn/bin

Varmista vielä, että .profile-nimisessä tiedostossa on seuraavanlainen rivi, eikä sitä ole kommentoitu (eli ei risuaitaa rivin alussa):

. ~/.bashrc

Checkout

Kun haluat aloittaa projektin parissa työskentelyn uudella koneella, saat työkopion koneellesi seuraavalla komennolla:

svn checkout osoite

Jossa osoite on siis yllä mainittu Subversion-kannan osoite. Checkout tarvitsee tehdä siis vain kerran per kone! Tämän jälkeen työkopio muistaa itse, mistä Subversion-kannasta se on (.svn-nimiset hakemistot sisältävät Subversioniin liittyvää tietoa, ja kaikki tämännimisen hakemiston sisältävät hakemistot tulkitaan Subversion-kannan työkopioiksi).

Työsykli

Tärkein mantra Subversionin kanssa työskennellessä on update - työtä - commit. Eli aina kun aloitat työskentelyn projektin parissa, päivitä työkopiosi kannasta kirjoittamalla seuraava komento työkopion juuressa:

svn update
Selitykset tiedostorivien alussa oleville kirjaimille saat helpistä: svn help update.

Sovittiin, että kannassa pyritään aina pitämään toimivat versiot kaikesta, joten kun olet lopettelemassa työskentelyä ja sinulla on mielestäsi toimiva versio kasassa, voit lähettää muutoksesi kantaan kirjoittamalla (taas työkopion juuressa):

svn commit
Jos Subversion valittaa, ettei työkopiosi ole ajan tasalla, käytä update-komentoa ennen committia. Comittia tehdessä Subversion avaa tekstieditorin johon tulisi kirjoittaa lyhyet kuvaukset tehdyistä muutoksista, tyyliin "Luokka Foo toteutettu" tai "Suunnitteludokumentin luokkakaavio päivitetty". Suosittelen käyttämään ranskalaisia viivoja kommenteissa.

Työkopion hallinta

Kaikki muutokset työkopion tiedostoihin tulisi tehdä Subversionin komennoilla eikä Unixin komennoilla. Esim. sen sijaan että kirjoittaisit cp tiedosto1 tiedosto2, kirjoita svn cp tiedosto1 tiedosto2. Seuraavia komentoja tulisi siis käyttää Subversionin kautta:

cp mv rm

Lisäksi tiedostot tulisi lisätä Subversioniin komennolla svn add, jotta ne menevät kantaan. Eli ensin tiedostot oikeaan paikkaan työkopiossa, sitten lisätään ne.

Näiden komentojen kanssa tulisi huomioida, että Subversion ei suostu siirtämään tiedostoja joissa on paikallisia muutoksia (eli työkopiossa on muutoksia joita ei ole lähetetty kantaan). Tämä johtuu siitä, että komento svn mv vain poistaa vanhan tiedoston kannasta ja lisää uuden sinne, joten muutokset menisivät hukkaan. Eli ensin commit, sitten siirto.

Lisää komennoista

Kaikki komennot suoritetaan oletuksena nykyiseen hakemistoon, ja useimmat komennot ottavat viimeisenä parametrinaan tiedoston tai hakemiston. Jos parametri on hakemisto, komento suoritetaan kaikille sen hakemiston tiedostoille ja alihakemistoille rekursiivisesti (poikkeuksena revert, kts. kuvaus). Useimmat komennot ottavat myös revision-parametrin, jolla voit määritellä minkä version tietoja haluat katsoa (voit myös esim. päivittää vanhempaan versioon antamalla update-komennolle revision-parametrin. Tämän ja monen muun parametrin käyttö selviää komentamalla svn help komento.

Muutama hyödyllinen komento vielä:

status
Listaa työkopioon tehdyt muutokset ja työkopiossa olevat konfliktit (kts. ohjeet konflikteista alempana).
log
Listaa viimeisimmät versiot ja niiden commit-ajan, commitin tehneen käyttäjätunnuksen ja kommentit. Tarkemman version/versiot tai ajanjakson voit määritellä parametrina.
revert
Peruu kaikki parametrina annettuun tiedostoon tai hakemistoon tehdyt muutokset. Oletuksena ei toimi nykyiseen hakemistoon vahinkojen estämiseksi.
diff
Vertaa oletuksena parametrina annetun tiedoston työkopiossa olevaa versiota viimeisimpään kannassa olevaan. Parametrina voi antaa versiot joita haluaa verrata. Tuloste on standardia diff-muotoa, joten näitä voi katsoa jollain diffejä visualisoivalla ohjelmalla.

Loput kysymykset selvinnevät Version Control With Subversion-kirjasta, joka löytyy kokonaan netistä.

Konfliktit

Normaalisti Subversion osaa automaattisesti yhdistää monen ihmisen jopa samaan tiedostoon tekemät muutokset, mutta jos samaa kohtaa tiedostossa on editoinut useampi ihminen, syntyy konflikti. Konflikti tulee update-vaiheessa (C-kirjain rivin alussa), kun olet tehnyt työkopioon muutoksia jotka ovat ristiriidassa kannassa olevan version kanssa, eikä committia voi tehdä ennen kuin konflikti on selvitetty. Kantaan ei siis koskaan päädy konfliktissa olevia tiedostoja. Konfliktit näet myös status-komennolla.

Kun konflikti syntyy, Subversion luo tiedoston rinnalle kolme uutta tiedostoa: tiedosto.mine ja kaksi tiedosto.r## -nimistä, jossa ## on versio. "mine" on oma versiosi, siis se johon olit tehnyt muutokset. Kaksi versiolla varustettua tiedostoa ovat kannasta nyt tuleva tiedosto joka on ristiriidassa muutoksien kanssa (suurempi numero) ja edellinen, ristiriidaton versio (pienempi numero). Lisäksi tiedostossa itsessään on merkitty ristiriitaiset kohdat.

Konfliktin ratkaisemiseksi joko kopioi jokin kolmesta ylimääräisestä tiedostosta varsinaisen tiedoston päälle (jos haluat säilyttää jonkun niistä sellaisenaan), tai editoi varsinaista tiedostoa ja editoi ristiriitaiset kohdat käsin kuntoon. Sen jälkeen käytä komentoa resolved, jolla kerrot Subversionille, että olet ratkaissut konfliktin.