5.5. Versionhallinta
Tästä sivusta:
Pääkysymyksiä: Kuinka ohjelmaversioita on järkevä säilyttää? Miten useat ohjelmoijat kirjoittavat samaa ohjelmakokonaisuutta?
Mitä käsitellään? Versionhallintaohjelmiston käyttö.
Mitä tehdään? Kokeillaan osallistumista projektiin versionhallintatyökalua käyttäen.
Suuntaa antava vaativuusarvio: Opittavana on uusi toimintamalli sekä työkalu, mutta tässä luvussa ei kirjoiteta uutta ohjelmakoodia.
Suuntaa antava työläysarvio: 1 tuntia.
Pistearvo: 100
Oheisprojektit: Suoraan Eclipsen kautta.
Johdanto
Olet saattanut huomata, että erilaisten tekstien, kuvien tai julkaisujen työstämisessä, on usein hyödyllistä säilyttää aiempia kopioita uusimman version lisäksi. Aiemmasta versiosta on hyötyä ainakin silloin, kun uusin versio on rikkoutunut jollakin tavalla tai on käynyt ilmi, että uusin ajatus ei ollutkaan niin loistava, kuin aluksi luultiin. Joissakin töissä on tärkeää dokumentoida kehitystä, eli kuinka lopputulokseen oikein päästiinkään. Vielä useammin täytyy työstä esittää eri vaiheessa olevia versioita eri tarkastelijoille.
Esimerkiksi edellä mainituista syistä on tietokoneella työskenteleminen tiedettävästi joskus johtanut seuraavan näköisiin kansiosisältöihin.
May 15 17:13 Auction.python_final Jul 14 23:10 Auction.python_korjaus Sep 12 09:44 Auction.python_old_OLD May 15 20:24 Auction.python Jul 14 21:20 Ohje_final.doc Oct 14 22:44 Ohje_v1_final_FINAL.doc Nov 15 16:10 Ohje_OCTOBER_DRAFT.doc
Tässä esimerkkitapauksessa näyttää siltä, että käyttäjä on yrittänyt toteuttaa versionhallintaa kopioimalla versioita eri nimisiksi tiedostoiksi. Jos oikean sisältöinen tiedosto pitäisi löytää toisen ihmisen tietokoneelta, käy tehtävä tällä järjestelmällä nopeasti mahdottomaksi tai ainakin hyvin työlääksi.
Ohjelmoinnissa erot tiedostojen sisältöjen välillä ovat usein pieniä, mutta ohjelman toiminnan kannalta kriittisen merkittäviä. Tiedostojen vertaaminen silmämääräisesti on siis erityisen vaikeaa. On myös hyvin tavallista, että joukko ohjelmoijia työskentelee saman ohjelman parissa yhtäaikaisesti ja jokaisen ohjelmoijan pitäisi pystyä testaamaan kokonaista yhdessä toteutettua ohjelmaa. Joskus olisi myös kätevää peruuttaa muutokset tiedostoon tai saada kokeiltua eilisen päivän versiota koko ohjelmasta. Ei ole yllättävää, että ohjelmoijat ovat kehittäneet tähän tarkoitukseen erityisiä versionhallintaohjelmistoja.
Versionhallintaohjelmat
Versionhallintaohjelmat (version control systems) tallentavat omaan varastoonsa vain muuttuneet tiedostot sekä rivit. Tämän lisäksi tiedetään muutosten ajankohta, muutoksen tehnyt käyttäjä sekä käyttäjän kuvaus muutosten tarkoituksesta. Versionhallintajärjestelmästä voidaan pyytää käyttäjän työkopioksi (working directory), siis näkyviksi tiedostoiksi, mikä tahansa tallennettu versio. Versionhallintaohjelmisto osaa myös verrata eri versioita ja näyttää niiden väliset erot. Jos kahdessa versiossa ei ole päällekkäisiä muutoksia, ne voidaan yhdistää uudeksi versioksi.
Koska versionhallinnassa olevaa projektia tai varastoa (repository) käyttää usein useampi käyttäjä useilta laitteilta, on yleistä luoda versionhallinnan varasto verkossa olevalle palvelimelle. Tälläinen versionhallintapalvelin on myös yleensä varmuuskopioitu, jotta ohjelmistoprojektin lähdekoodi ja kehityshistoria eivät pääse katoamaan. Versionhallintaa käytetään myös usein julkaisun apuvälineenä nimeämällä julkaisuversiot ja automatisoimalla niiden asennusta tai paketointia käyttäjille.
Tällä kurssilla käytämme versionhallintaohjelmistoa nimeltä Git, joka on suosituimpia vaihtoehtoja niin teollisuudessa kuin harrastusprojekteissa. Versionhallintaohjelmien käyttämät käsitteet ja komennot ovat melko samankaltaisia, joten tämän luvun jälkeen pystyt opettelemaan tarvittaessa myös muita versionhallintaohjelmia.
Git-versionhallintaohjelmasta
Git on syntynyt Linus Torvaldsin aloittamana ja Linux-käyttöjärjestelmäprojektin tarpeisiin vuonna 2005. Gitin omalta sivustolta löydät englanninkielisen opaskirjan Pro Git sekä komentorivikäyttöä opastavan online-harjoituksen Try Git. Tässä luvussa ei ole tarvetta ladata sivuston tarjoamaa Git-asennusta vaan käytämme Eclipsen-laajennusta. Erona joihinkin vanhempiin versionhallintaohjelmiin Git ei käytä yhtä keskitettyä varastoa vaan jokaisella käyttäjällä on oma kokonainen paikallinen varasto (repository).
Harjoitus
Gitin toimintoja voidaan tehdä komentoriviltä tai graafisten käyttöliittymäohjelmien kautta. Tässä luvussa harjoittelemme käyttämään Gittiä integroituna Eclipse-kehitysympäristöön. Git-laajennus sisältyy automaattisesti normaaleihin Eclipse Luna tai Kepler asennuspaketteihin. Jos siis olet toiminut kurssin syysosassa asennusohjeiden mukaan, on Eclipse valmis harjoituksen työvaiheisiin. (Jos et käytä Eclipseä, niin harjoituksen voi tehdä, ilman ohjausta, millä tahansa Git yhteensopivalla työkalulla kuten komentoriviltä.)
Asentelua
Tässä tehtävässä ei ole pakko asentaa muita paketteja kuin jokin Git-sovellus, koska tehtävässä ei käytännössä tarvitse ohjelmoida ollenkaan, vaan tehtävä keskittyy Gitin käyttöön. Jos kuitenkin haluat testata tehtävässä käytettävän ohjelman toimintaa, joudut asentamaan pari Python-pakettia.
Tehtävässä tutkailtava ohjelma käyttää tieteelliseen laskentaan tarkoitettua numpy-Python-pakettia sekä PyQt4-pakettia, jonka asennusohjeet löytyvät luvusta 6.1. Numpyn asennusohjeet taas ovat alla. Jos tulee jotain ongelmia, laita viesti Piazzaan.
Numpyn asennuksen jälkeen voit testata sen toimivuuden ajamalla Python3-tulkissa komennot import numpy
ja numpy.linspace(0,1,10)
, joiden pitäisi tuottaa seuraavankaltainen tulos:
Python 3.4.2 (default, Oct 19 2014, 17:55:38)
[GCC 4.2.1 Compatible Apple LLVM 6.0 (clang-600.0.54)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import numpy
>>> numpy.linspace(0,1,10)
array([ 0. , 0.11111111, 0.22222222, 0.33333333, 0.44444444,
0.55555556, 0.66666667, 0.77777778, 0.88888889, 1. ])
>>>
Windows
Hae Python3:lle tarkoitettu asennuspaketti sivulta http://sourceforge.net/projects/numpy/files/NumPy/1.9.2/ ja aja se. Paketin nimi on muotoa
- numpy‑1.9.2‑win32‑superpack‑python3.3.exe
- numpy‑1.9.2‑win32‑superpack‑python3.4.exe
Älä ota pakettia, jonka nimessä on python2.7, koska ne on tarkoitettu Pythonin aiemmalle versiolle 2.
Linux
sudo pip3 install numpy
Mac OS X
sudo pip3 install numpy
1. Projektin työkopio (clone)
Tässä harjoituksessa liityt mukaan keskeneräisen pienen ohjelman kehitykseen. Tämä tapahtuu lisäämällä Eclipseen uusi projekti verkossa olevasta versionhallinnan etävarastosta. Seuraavassa esitetään yksityiskohtaiset toimintaohjeet:
- Valitse Eclipsessä File > Import
- Valitse Git > Projects from Git ja paina Next
- Valitse Clone URI ja paina Next
- Katso alta henkilökohtainen etävaraston osoitteesi.
- Täytä Eclipseen kohdat URI, User ja Password. Voit halutessasi merkitä kohdan Store in Secure Store, jolloin salasana tallentuu Eclipseen. Lopuksi paina Next
- Branch Selection: Hyväksy oletusvalinta painamalla Next
- Local Destination: Hyväksy oletusvalinta painamalla Next
- Select a wizard to use for importing projects: Valitse Import existing projects ja paina Next
- Import Projects: Hyväksy oletusvalinta ja viimeistele tuonti painamalla Finish
Projekti näkyy nyt normaalisti Eclipsen Package Explorer näkymässä. Pienen odotuksen jälkeen ilmestyvä oranssi tynnyrisymboli kertoo projektin olevan versionhallinnassa. Tutustu pintapuolisesti ohjelmaan eli työkopiossasi (working directory) nyt olevaan uusimpaan versioon ja sen tiedostoihin. Kokeile myös suorittaa ohjelmaa tiedostosta run.py.
Mikäli saat virheilmoituksen ImportError: No module named 'mmb'
, täytyy /pyminimandelbrot/src lisätä projektin PyDev PYTHONPATH:iin seuraavasti:
- Valitse vasemmalta Package Explorer listasta projekti pyminimandelbrot
- Klikkaa hiiren oikean napin valikosta Properties
- Valitse avautuvasta valikosta vasemmalta PyDev - PYTHONPATH
- Lisää /pyminimandelbrot/src listaan painamalla Add source folder-nappia
Ohjelman viimeisen version lisäksi tietokoneellesi, paikalliseen varastoon, siirtyi etävarastosta myös projektin koko versiohistoria. Oheinen kuva esittää historia-näkymän, jonka saa avattua valitsemalla projektin vasemmalta Package Explorer -listasta ja klikkaamalla oikean hiiren napin valikosta Team > Show in History. Ohjelmaa näyttää kirjoittaneen toinen kehittäjä, Esko. Ylimpänä näkyy uusin eli HEAD versio ja lisätunnisteet kertovat sekä paikallisen varaston master että etävaraston origin/master olevan tässä samassa vaiheessa. Nykyistä versiota ennen Esko on tallentanut kolme aiempaa versiota.
Tutkitaan vielä tarkemmin, mitä tiedostoon image_generator_thread.py tiedostoon on viimeiseksi tehty:
- Valitse vasemmalta Package Explorer listasta image_generator_thread.py
- Klikkaa hiiren oikean napin valikosta Compare With > Previous Revision
Näet avautuneessa näkymässä vasemmalla puolella uusimman version ja oikealla puolella edellisen version. Muutokset versioiden välillä on korostettu.
2. Muutosten rekisteröinti (commit)
Tehdään nyt pieni muutos ohjelmaan. Mandelbrot-fraktaali toistaa samoja muotoja loputtomasti, mutta kompleksitason eri koordinaateista löytyy hyvin erilaisia maisemia. Pyritään seuraavaksi kohti merihevosten laaksoa:
- Muuta image_generator_thread.py:n rivillä 36 kohteeksi seahorseValley
- Tallenna ja tarkista ohjelman toiminta suorittamalla se.
Tiedoston tallentaminen ei tehnyt automaattisesti uutta versiota versionhallintaan! Muutosten rekisteröintiä pitää erikseen pyytää commit-toiminnolla. Eclipse osoittaa rekisteröimättömät muutokset >-merkillä tiedoston nimen edessä. Versiohistorian selkeyden vuoksi on hyvä ryhmittää yhtä tavoitetta koskevat muutokset eri tiedostoissa yhteen committiin. On suositeltavaa tehdä committeja usein ja koskien yhtä muutostavoitetta kerrallaan. Rekisteröidään äskeinen muutos:
- Valitse vasemmalta Package Explorer listasta projekti minimandelbrot
- Klikkaa hiiren oikean napin valikosta Team > Commit
- Tarkista aukeavan ikkunan alaosassa mukaan tulevien muuttuneiden tai uusien tiedostojen valinta (vain image_generator_thread.py).
- Kirjoita ikkunan yläosaan kuvaus muutoksista (esimerkiksi "Change zoom target to Seahorse Valley.") ja paina Commit
Kuvaus on pakollinen ja tärkeä. Kuvausten laadun merkitys korostuu kehitystiimin koon tai hajautumisen eri sijainteihin kasvaessa.
3. Muutoksen vieminen etävarastoon (push)
Edellisessä vaiheessa muutos rekisteröitiin paikalliseen varastoon. Kuvankaappauksen mukaisesti paikallinen varasto master on nyt sinun versiossasi, mutta etävarasto origin/master ei ole. Koska paikallinen varasto on yleensä yksityinen, ei muutoksesi näy vielä muille ohjelmoijille. Kaikki vain paikallisesti rekisteröidyt (committed) muutokset viedään erikseen push-toiminnolla etävarastoon (remote). Oletuksena muutokset viedään takaisin etävarastoon origin, josta paikallinen varastosi kohdassa 1 kloonattiin.
- Valitse vasemmalta Package Explorer listasta projekti minimandelbrot
- Klikkaa hiiren oikean napin valikosta Team > Push to Upstream
Hyväksyttyäsi viennin etävarasto on paikallisten muutosten tasalla.
4. Muutosten hakeminen etävarastosta (pull)
Huhu kertoo, että edellisen push-toimminnon jälkeen Esko on taas muuttanut ohjelmaa. Uusimman version saa haettua paikalliseen varastoon ja työkopioon pull-toiminnolla:
- Valitse vasemmalta Package Explorer listasta projekti minimandelbrot
- Klikkaa hiiren oikean napin valikosta Team > Pull
Nyt paikallinen varasto on etävaraston muutosten tasalla. Kokeile muuttunutta ohjelmaa ja totea sen toimivuus muutosten jälkeen. Fraktaalin väritys muuttuu nyt näkymän rajauksen mukana.
5. Uusi tiedosto
Projektin onnistumiseen tarvitaan myös dokumentaatiota. Lisätään nyt projektin ylimpään hakemistoon, siis src rinnalle (ei sisään), uusi tiedosto nimeltään README.md. Käytä New > File -toimintoa. Voit kirjoittaa tiedoston sisältöön, mitä haluat. Emme lue tai tarkista sisältöä.
Uuden tiedoston pitäisi nyt näkyä Eclipsessä "swing-jar-tiedoston" yläpuolella ja se on merkitty kysymysmerkkisymbolilla. Tämä tarkoittaa, että tiedosto ei ole versionhallinnan valvonnassa. Lisätään tämä tiedosto mukaan ja rekisteröidään se:
- Valitse vasemmalta Package Explorer listasta README.md
- Klikkaa hiiren oikean napin valikosta Team > Add to Index
- Tee kohtaa 2 noudattaen Commit
- Tee kohtaa 3 noudattaen Push
Hyväksyttyäsi viennin etävarasto on paikallisten muutosten tasalla.
Etene järjestyksessä
Jotta tehtävässä voidaan simuloida erilaisia oikeassa elämässä usein tapahtuvia tilanteita, tulee edetä työohjeiden mukaisessa järjestyksessä. Seuraava "ongelma" on mahdollista tässä tehtävässä välttää usein eri tavoin, mutta toivottavasti seuraat ohjeiden askeleita ja ohjeiden mukaista ratkaisua. Tästä kertyy ehdottoman arvokasta kokemusta.
6. Vielä yksi muutos
Suunnataan tutkimusretki vielä elefanttien laaksoon.
- Muuta image_generator_thread.py:n rivillä 36 kohteeksi elephantValley
- Tee kohtaa 2 noudattaen Commit
- Yritä tehdä kohtaa 3 noudattaen Push
Viimeinen kohta ei onnistu (rejected - non-fast-forward), koska Esko on ehtinyt jo muuttaa edellisen push-toimintosi jälkeen ohjelmaa lisää. Etävarasto ei voi vastaanottaa vientiäsi ennen kuin paikallinen varastosi sisältää kaikki etävarastoon rekisteröidyt versiomuutokset.
Tätä tilannetta ei synny, jos olisit esimerkiksi sopivasti tehnyt pull-toiminnon ennen omaa committia. Tosielämässä ei voida kuitenkaan koskaan arvata, millä hetkellä toinen kehittäjä päättää omia muutoksiaan rekisteröidä. Harjoitellaan siis selvittämään tämä hyvin yleinen tilanne:
- Tee kohtaa 4 noudattaen Pull
Edellisestä kerrasta poiketen saat ilmoituksen päällekkäisyydestä (Result Conflicting). Tällä kertaa etävaraston ja paikallisen varastosi versioissa on muutettu samaa riviä. Versionhallintaohjelma ei osaa automaattisesti päättää, kuinka versiot tulisi yhdistää ja tarvitsee tähän apuasi.
Jos muutokset olisivat eri riveillä samassa tiedostossa, versionhallinta yhdistäisi ne automaattisesti ottamalla mukaan kummatkin muutokset ja apuasi ei tarvittaisi. Kaikilla muutoksilla voi kuitenkin olla arvaamattomia seurauksia, joten pull toiminnon muuttamat tiedostot kannattaa aina katsoa ajatuksella.
Ristiriidassa oleva tiedosto on merkitty vasemmalla Package Explorer listassa punaisella salmiakkisymbolilla. Ohjelmakoodi ristiriitaisessa kohdassa (image_generator_thread.py) näyttää seuraavalta.
<<<<<<< HEAD
target = elephantValley
=======
target = mandelbrotAntennas
>>>>>>> branch 'master' of http://studio.cs.hut.fi/git/username-pyminimandelbrot.git
Merkkien "<<<<<<<" ja ">>>>>>>" välissä on riitaisat rivit kahdesta eri versiosta. Versiot on eroteltu rivillä "=======". Ristiriita ratkaistaan korjaamalla tämä kohta haluttuun muotoon poistamalla väärä rivi sekä ristiriitaisuusmerkinnät. Jäljelle jää siis vain ohjelmoijan valitsema ohjelmakoodi toimivassa muodossa. Ratkaisun voi tehdä suoraa tiedoston tekstiin, mutta harjoittellaan käyttämään mittavammissa ristiriidoissa visuaalisempaa työkalua:
- Valitse vasemmalta Package Explorer listasta image_generator_thread.py
- Klikkaa hiiren oikean napin valikosta Team > Merge Tool
- Jatka oletusvalinnalla (Use HEAD) painamalla OK
Avautunut näkymä on vastaava kuin alussa käytetty vertailu edelliseen versioon. Vasemmalla puolella on sinun versiosi ja oikealla puolella kilpaileva Eskon versio. Halutaan nyt säilyttää vain Eskon versio. Painamalla ristiriitakohdat keskellä yhdistävän viivan solmukohtaa voidaan tuoda kilpailevan version koodi vasemmalle puolelle. Vasenta puolta voi muokata vapaasti.
- Paina ristiriitaiset rivit keskellä yhdistävän viivan solmukohtaa: Copy Current Change from Right to Left
- Poista vasemmalta vanha rivi "val target = elephantValley"
- Tallenna ja sulje ristiriitanäkymä
- Valitse vasemmalta Package Explorer listasta image_generator_thread.py
- Klikkaa hiiren oikean napin valikosta Team > Add to Index
- Tee kohtaa 2 noudattaen Commit
Ristiriitaiset versiohaarat on nyt yhdistetty (merged). Viedään vielä paikalliset muutokset etävarastoon.
- Tee kohtaa 3 noudattaen Push
Hyväksyttyäsi viennin etävarasto on paikallisten muutosten tasalla.
Versionhallinnan verkkopalvelut
Edellisessä harjoituksessa liityttiin harjoitusta varten jo perustettuun repositoryyn eli versionhallinnan varastoon. Tämä on hyvin yleistä myös oikeissa ohjelmistoprojekteissa. Yksityisissä projekteissa tietovarastot ovat suojattuja, mutta avoimen lähdekoodin hankkeiden tietovarastot ovat yleensä kenen tahansa katsottavissa ja clone-toiminnolla haettavissa. Muutosten vieminen eli push on kuitenkin rajoitettu projektin ylläpitäjille.
Verkko- tai pilvipalvelut, kuten GitHub ja BitBucket, tarjoavat rekisteröityneelle käyttäjälle mahdollisuuden luoda omia projekteja. Ne ovat erittäin suosittuja avoimissa ja kasvavassa määrin myös yksityisissä ohjelmistoprojekteissa. Nämä palvelut ylläpitävät perustetulle projektille Git-repositoryä, jota voi käyttää suoraa tämän harjoituksen esittämällä tavalla.
Verkkopalveluiden lisäetuna on selaimella nähtävissä oleva tietovaraston sisältö ja historia, käyttäjäoikeuksien hallinta sekä automaattiset varmuuskopiot. Lisäksi saatavilla on esimerkiksi työkaluja projektin tehtävistä sopimiseen (issue tracking). Avoimen lähdekoodin projektit ovat omaksuneet palvelujen mahdollistaman uuden työjärjestyksen. Jos esimerkiksi haluaisit parantaa Python-ohjelmointikieltä, voit tehdä cPython-projektista fork-toiminnolla rinnakkaisen oman epävirallisen projektin kysymättä kenenkään lupaa. Kun olet tehnyt muutoksia ohjelmakoodiin, voit tehdä yhdistämispyynnön (pull request) viralliseen Python-ohjelmointikieleen. Jos muutos on oikea perusteltu parannus, se voidaan tarkan arvioinnin jälkeen hyväksyä ja yhdistää viralliseen Python-projektiin.
Aallon GitLab
Aalto-yliopiston tietotekniikan laitos ylläpitää avoimeen lähdekoodin perustuvaa GitLab-verkkopalvelua, jota Aallon opiskelijat voivat käyttää versionhallintaan. Palvelu muistuttaa monilta osin esimerkiksi GitHub-verkkopalvelua, mutta pääsy on rajoitettu Aallon opiskelijoille ja henkilökunnalle.
Pelkkä paikallinen repository
Jos ei syystä tai toisesta haluta käyttää verkkopalveluja, voidaan myös luoda pelkästään paikallinen tietovarasto. Silloin pull/push-toinnoilla ei ole käyttöä, koska etävarastoa ei ole määritelty. Pelkkä paikallinen varasto mahdollistaa esimerkiksi Team-valikon Compare with ja Replace with -toiminnot.
Paikallinen varasto luodaan Window > Show View > Other... > Git: Git Repositories näkymästä ylärivin neljännellä ikonilla, Create a new Git Repository. Tämän jälkeen valitaan tuo uusi repository ja oikean napin takaa Import Projects... > Import as general project. Jos etävarasto tulee käyttöön myöhemmin, voidaan projektin valikosta Team > Remote > Push... viedä historia sinne.
Tyhjien projektien luonti Eclipsen avulla
Eclipse ei toimi kovin kätevästi juuri perustettujen tyhjien versionhallintaprojektien kanssa. Ne on paras tuoda Eclipseen tämän luvun harjoituksen kohdan 1 mukaan, MUTTA valiten Import existing projects kohdan sijasta Import as general project. Tuonti ilmoittaa, että Source Git repository is empty, mutta dialogista voi jatkaa eteenpäin Next-painikkeella.
Tämän jälkeen paina Package Explorer näkymässä hiiren oikealla näppäimellä luotua projektia ja valitse PyDev > Set as PyDev Project.
Ensimmäisellä push-kerralla joudut käyttämään toimintoa Team > Push Branch..., joka tekee oikeat asiat oletusvalinnoilla. Tämä johtuu siitä, että tyhjän repositoryn kloonauksessa Eclipse ei voi automaattisesti asettaa oletusbranchiä (upstream).
Yhteenvetoa
- Versionhallinta on ohjelmointiprojekteissa välttämätön muutosten seuraamiseksi, hallitsemiseksi ja julkaisemiseksi.
- Työkopiossa (working space) muokattavissa olevien tiedostojen lisäksi tarvitaan varasto eli repository, jossa koko kehityshistoria on tallennettuna.
- Tiedostojen tallentamisen lisäksi muutokset tulee rekisteröidä usein, ja yksi ohjelman muutostavoite kerrallaan, add ja commit-toiminnoilla.
- Etävarastosta haetaan muutoksia pull-toiminnolla paikalliseen varastoon ja paikallisesta varastosta vietään muutoksia etävarastoon push-toiminnolla.
- Ristiriitaisten muutosten (conflict) yhdistäminen (merge) vaatii ohjelmoijan apua (resolve conflict).
Lisätietoja kiinnostuneille kehityshaaroista (branch)
Versionhallinnan historianäkymässä näkyvä master on varaston oletuskehityshaara (default branch). Tässä tehtävässä huomattiin, että etävarastossa oleva origin/master on erillinen kehityshaara, joka voi eriytyä paikallisesta. Harjoituksissa myös yhdistimme nuo kehityshaarat uudelleen samaan tilaan pull-komennolla.
Erillisiä kehityshaaroja voidaan luoda myös tarkoituksella. Esimerkiksi ohjelman uuden toiminnon kehitys voidaan jakaa feature-x haaraan, mutta pitää master haara vanhassa vaiheessa jo julkaistun ohjelman ylläpitoa varten. Kun uusi toiminto halutaan julkaista, voidaan feature-x liittää takaisin master kehityshaaraan. Jakautumisen jälkeiset muutokset yritetään tässä vaiheessa tehdä uudelleen master haaraan, jonka jälkeen haarat ovat yhdistyneet ja master sisältää kummankin muutokset.
Työkopio voidaan helposti vaihtaa toiseen kehityshaaraan, jolloin työkopiosi (working directory) tiedostot vaihtuvat valitun haaran uusimman version sisältämiksi tiedostoiksi. Tärkeimmät komennot kehityshaarojen käyttämiseksi ovat: branch, checkout ja merge. Lisätietoja löydät helposti hakukoneilla.
http://git-scm.com/book/en/v2/Git-Branching-Basic-Branching-and-Merging
Try Git, komentorivikäyttö
Jos sinulla jäi tästä kierroksesta ylimääräistä aikaa, suosittelen kokeilemaan selaimessa tehtävää Gitin komentoriviharjoitusta. Jos suuntaudut ohjelmointialalle, tulet tarvitsemaan Gittiä myös komentoriviltä. Tästä luvusta ovat komentojen nimet jo tuttuja!