Versionhallinta MIKSI?
Versionhallinta Miten jakaa tiedostot ihmisten kesken? Miten pitää tiedostot ajan tasalla? Miten hoitaa päällekkäiset muutokset samaan tiedostoon? Miten muistaa, mitä on tehty? Miten peruuttaa takaisin kännissä tehdyt muutokset? Jne. jne. jne.
Subversion Tiedostojen versionhallintaan (kuten RCS) Tarkoitettu usean hengen projekteihin Toimii verkon yli yhteiseen tietovarastoon Hyötyjä Historian säilyttäminen (peruutusmahdollisuus) Toimii samalla varmuuskopiona Tiedostojen jakaminen ja synkronointi Unix/Linux: svn:n saa valmiina pakettina Windows: http://tortoisesvn.tigris.org/ Mac OS X: http://subversion.tigris.org/
Subversion Eroja RCS:ään Toimii paremmin usean ihmisen projekteissa Hallitsee koko projektia, ei vain yksittäisiä tiedostoja Toimii myös binaaritiedostoille (pdf, doc, odt, gif, jpg...) Toimii myös hakemistoille, ei vain tiedostoille Toiminta verkon yli (ssh, https,...) Koko projektilla yhteinen versionumero (RCS:ssä joka tiedostolla oma)
Termejä Tietovarasto (repository) taltioi kaiken tiedon (verkon yli) Työkopio (working copy) on käyttäjän "työhakemisto" (kopiot tiedostoista) Revisio (revision) on numeroitu "valokuva" projektista tietyllä hetkellä
Svn:n toiminta commit kurssisvn.cs.tut.fi Tietovarasto ryhmal commit omakone1 update update omakone2 Työkopio (hakemisto) Työkopio (hakemisto)
Svn:n peruskomentoja Työkopion haku (svn checkout) Tiedostojen lisäys (svn add) Tilanteen kysely (svn status) Muutosten kysely (svn diff) Muutosten talletus (svn commit) Työkopion päivitys (svn update)
Svn:n lisäkomentoja Tiedoston poisto (svn rm/del) Hakemiston lisäys (svn mkdir) Tiedoston+historia siirto (svn mv/move/rename) Tiedoston+historia kopiointi (svn cp/copy) Muutosten yhdistely (svn merge) Konfliktien korjaus (svn resolved)
Hakemistorakenne trunk/ "Työhaara", jossa varsinainen koodaus tehdään Yleensä riittää hakea checkout:lla vain tämä tags/ "Julkaisuja" varten, tällä kurssilla palautukset Ohjeet tulevat myöhemmin branches/ "Haaroja" varten, esim. väliaikaiset kokeilut arvostelu/ Boss:n ja assareiden arvostelut palautuksista (Ei osa svn:n normaalia hakemistorakennetta)
Ennen svn:n käyttöä Svn:lle pitää kertoa, että C++tiedostot ja Makefile ovat tekstiä (merkistömuutokset, $Id$ jne.) Unix/Linux editoitava tiedostoa ~/.subversion/config Windows & TortoiseSVN Oikea nappi - TortoiseSVN - Settings General - Subversion configuration file: - Edit
svn checkout Hakee työkopion tietovarastosta Tällä kurssilla: svn checkout https://kurssisvn.cs.tut.fi:<portti>/ryhmat/<ryhmä>/trunk nimi_hakemistolle Täytyy tehdä vain kerran alussa Tietovarastoissa oletuksena valmis perusrakenne esim. julkinen-hakemisto
svn add Lisää tiedoston svn:n hallintaan Tehtävä jokaiselle uudelle tiedostolle, jonka haluaa tallentaa: svn add tiedostonimi Komento vain rekisteröi lisäyksen, ei vielä talleta sitä (commit) Tiedostoa voi muokata rauhassa ennen ja jälkeen
svn commit Tallentaa tietovarastoon tehdyt muutokset Kysyy kommentin lokia varten (Unix/Linux:ssa ympäristömuuttuja EDITOR pitää olla asetettuna) Joko koko hakemistolle tai tiedostoille svn commit -m "Komentin voi laittaa tähänkin" svn commit tiedosto1 tiedosto2 Joka tallennuksesta oma revisio, joilla oma numeronsa (loki, kumoamiset...)
svn status Kertoo, missä tilassa tiedostot ovat A : (Added) tiedosto lisätty D : (Deleted) tiedosto poistettu M : (Modified) tiedostoa muutettu? : (?) tiedosto ei svn:n hallinnassa C : (Conflict) tiedosto konfliktitilassa (ristiriitaisia muutoksia) X : (external) tiedosto haettu muualta (julkinen-hakemisto) Ei tarvitse verkkoyhteyttä
svn update Päivittää työkopion tietovarastosta Siis hakee muiden tekemät muutokset svn update Tulostus kuin svn status Jos muutoksia varastossa + työkopiossa, tulostus: G : (merged) muutokset yhdistetty onnistuneesti C : (Conflict) muutokset ristiriitaisia, pitää korjata käsin
svn diff Kertoo mitä muutoksia tiedostoon on tehty, näyttää muuttuneet rivit svn diff tiedosto svn diff Ei tarvitse verkkoyhteyttä Mahdollista verrata vanhaan revisioon (vaatii verkkoyhteyden) svn diff -rrevisio# tiedosto svn diff -rrev1:rev2 tiedosto
svn revert Muutoksen peruminen, jos talletusta (commit) ei vielä tehty svn revert tiedosto Ei tarvitse verkkoyhteyttä Jos talletus jo tehty, palautus onnistuu vielä svn merge:llä
svn mv, rm, cp Tiedostoja myös mahdollista tuhota (rm), uudelleennimetä/siirtää (mv), kopioida (cp) Näissä operaatioissa tiedoston historia säilyy ja kopioituu mukana Käytä näitä normaalien cp:n, mv:n ja rm:n sijaan!
svn log Näyttää muutoskommentit tiedostosta tai hakemistosta svn log tiedosto Saa tulostamaan myös tiedostonimet: svn log -v tiedosto
Konfliktien korjaus Ristiriitaisia muutoksia svn update:n yhteydessä: konflikti Ristiriitaiset rivit merkitään tiedostoon merkein <<<<<, ===== ja >>>>> Tiedosto editoidaan käsin kuntoon, sitten svn resolved tiedosto (+ svn commit) Tarvitaan yleensä varsin harvoin
Vanhojen muutosten kumoaminen "Upotetaan" tiedostoon vanhat muutokset käänteisjärjestyksessä Väliin voi jäädä muutoksia, joita ei kumota svn merge -ruusi#:vanha# tiedosto Muutokset voi katsoa etukäteen svn diff -ruusi#:vanha# tiedosto svn merge osaa tehdä paljon muutakin
Tagit (htyön palautus) Kopioidaan tietty revisio tags/xxxhakemistoksi Esim. harkkatyön palautukset tags/palautus1, tags/palautus2 Huom: muista ensin svn commit! svn cp https://.../trunk https://.../tags/palautus1
Haarat Kopioidaan hakemisto trunk paikkaan branches/xx, räpelletään, upotetaan muutokset takaisin trunk:iin Ei ihan perustoimenpide, mutta: svn cp https://.../trunk https://.../branches/koe svn co https://.../branches/koe jokuhakemisto... tehdään muutoksia cd trunk-työhakemisto svn merge -reka#:vika# https://.../branches/koe svn commit svn rm https://.../branches/koe