Ohjelmistotekniikka Henrik Hedberg Tietojenkäsittelytieteiden laitos
Versionhallintajärjestelmä Hallitsee tiedostot ja niiden eri versiot ts. muutokset Mahdollisuus rinnakkaisiin historioihin ts. haaroihin Toimii myös verkon yli mahdollistaen yhteistyön Vaihtoehtoisia protokollia
Keskitetty versionhallintajärjestelmä Projektiin liittyvät muutokset kootaan keskitettyyn versionhallintajärjestelmään Kehittäjien koneilla on tiedostoista tietyn ajan hetken (yleensä uusimmat) versiot
Keskitetty versionhallinta käytännössä checkout commit Työtiedostot haetaan keskitetystä versioidusta varastosta omalle koneelle muokkaamista varten
Perustyöskentely Subversionilla svn checkout svn add / remove svn update svn update svn commit
Hajautettu versionhallintajärjestelmä Saman projektin versiohistoriasta on useita täydellisiä kopioita ('varasto', 'repository') Esimerkiksi jokaisella kehittäjällä on oma täydellinen kopionsa
Hajautettu versionhallintajärjestelmä Saman projektin versiohistoriasta on useita täydellisiä kopioita ('varasto', 'repository') Esimerkiksi jokaisella kehittäjällä on oma täydellinen kopionsa Käytännössä yleensä yksi varasto on virallinen Kehittäjät päivittävät omat varastonsa keskitetystä varastosta Tukee erilaisia työtapoja ja -prosesseja
Hajautettu versionhallinta käytännössä clone checkout merge commit Koko versiohistoria kloonataan omalle koneelle varastoksi, ja näiden eri varastojen välillä tehdään yhdistämisiä
Perustyöskentely Gitillä clone add / rm commit pull commit pull push
Tiedostojen hakeminen clone Ensimmäisen kerran tiedostoja haettaessa otetaan varastosta kopio clone osoite Hakee koko versiohistorian pull Myöhemmin voidaan vain hakea alkuperäisessä varastossa tapahtuneet muutokset omaan varastoon pull Jos omat tekemäsi muutokset ovat ristiriidassa (muokkauksia ei voida automaattisesti päätellen yhdistää), tiedostoihin tulee sisältöä molemmista versioista (tilanne täytyy ratkaista itse tiedostoja muokkamalla)
Työskentely versioiduilla tiedostoilla Voit muokata haettuja tiedostoja normaalisti Mikäli lisäät hakemistoon uusia tiedostoja, jotka on tarkoitus siirtää myös varastoon, ne on kerrottava Gitille add tiedosto Tällä tavoin voi lisätä myös kokonaisia hakemistoja Yleensä generoituja tiedostoja ei säilytetä varastossa Tiedostojen poistaminen varastosta tapahtuu yksinkertaisesti kertomalla Gitille rm tiedosto Tiedosto löytyy luonnollisesti vielä versiohistoriasta add / rm
Muutosten kirjaaminen Toisiinsa liittyvistä muutoksista kootaan yksi vienti varastoon commit Optio a lisää jo versionhallinnassa olevien tiedoston muutokset mukaan commit Git pyytää kirjoittamaan selityksen muutokselle. Historialokiin on hyvä tehdä selkeitä merkintöjä
Muutosten päivittäminen muille Ennen kuin omat muutokset voi siirtää yhteiseen varastoon on päivitettävä muiden tekemät muutokset omaan paikalliseen kopioon pull Voi johtaa konfliktiin, joka on ratkaistava ensin paikallisesti Varsinaisen siirtämisen voi tehdä, mikäli oma kopio on ajan tasalla eikä siinä ole konflikteja push pull push
Konfliktin ratkaiseminen pull näyttää, mikäli paikallisessa kopion tiedostoa oli muutettu ja se pystyttiin yhdistämään automaattisesti (auto-merged) tai jos se johti konfliktiin (CONFLICT) Samaa kohtaa muutettu kahdessa paikassa yhtä aikaa Konfliktitiedostossa on ongelmia aiheuttaneista riveistä kaksi eri versiota (sinun ja toisten): <<<<<<< HEAD:tiedoston_nimi Sinun tekemäsi muutokset ======= Jonkun muun tekemät muutokset >>>>>>> commit_id:tiedoston_nimi Tiedostot on korjattava ja sen jälkeen tehtävä uusi commit
Verkostoituneen työskentelyn aloittaminen Kerro Gitille oma nimesi ja sähköpostiosoitteesi Näitä käytetään globaalisti kaikkien kyseiseltä koneelta tekemiesi committien yhteydessä config global user.name Pekka Rinen config global user.email pekka@gur.ut Kloonatessasi varastoa käytä sen push URL:ia Tätä käytetään osoitteena tehtäessä varastoon yhdistäminen, joten URL:in on toimittava push-komennon kanssa ja sinulla on oltava oikeudet varaston muokkaamiseen Jos sinulla ei ole muutosoikeuksia, push URL ei ole käytössä, mutta voit käyttää julkista URL:ia (push ei mahdollinen)
Muita Git-komentoja mv lähde kohde Tiedoston siirtäminen (älä tee rm/add-yhdistelmällä!) status diff Paikalliseen kopioon tehtyjen muutosten tutkiminen reset hard tiedosto Työtiedostoon tehtyjen muutosten peruminen log tiedosto Tiedoston versiohistorian tutkiminen Ilman tiedostoa koko varaston versiohistorian listaus