TIE-20200 Ohjelmistojen suunnittelu
Transcription
TIE-20200 Ohjelmistojen suunnittelu
TIE-20200 Ohjelmistojen suunnittelu Luento 3: Git & Gitlab Samuel Lahtinen 1 TIE-20200 Samuel Lahtinen Ajankohtaista… •Harkkatyöhön ilmoittautumisdedis tänään •Git ja ryhmäkutsut • Versiohallinnan kutsut lähdössä matkaan huomenna TIE-20200 Samuel Lahtinen Ohjelmassa tänään •Git ja jotain komennoista jne. •Haarat ja niiden käyttö •Gitlab •Erilaisia tapoja käyttää versiohallintaa (haarat jne.) TIE-20200 Samuel Lahtinen Versiohallinnan käytöstä TIE-20200 Samuel Lahtinen Versiohallinta vs. Dropbox jne. • Monet työkalut sisältävät sisäisesti versiohallinan kaltaista toimintaa (esim Word) • Esim Dropbox toimii osin versiohallinnan tapaan, tekee uusia versioita, mahdollisuus palata vanhaankin • Samanaikaisen tiedoston muokkailun sallivat työkalut (Google Docs, Overleaf, jne.) TIE-20200 Samuel Lahtinen Paikallinen versiohallinta •Versiohallintatietokanta samalla koneella, muokattavana uusin versio tiedostosta, mahdollisuus palata vanhempiin jne. tietokone checkout versiohallintatietokanta tiedosto Versio 3 Versio 2 Versio 1 http://git-scm.com/book/en/v2/Getting-Started-About-Version-Control TIE-20200 Samuel Lahtinen Keskitetty versiohallinta •Kuten SVN, versiohallintapalvelin, josta käyttäjät noutavat koneelleen (uusimman) version •Commitin jälkeen palvelimella uusin versio, jos palvelin katoaa, jäljelle jää käyttäjiltä löytyvät versio, ei versiohistoriaa tms. palvelin Tietokone, käyttäjä 2 versiohallintatietokanta commit Versio 3 Tiedostot Versio 2 checkout Versio 1 Tietokone, käyttäjä 1 checkout Tiedostot TIE-20200 Samuel Lahtinen Hajautettu versiohallinta •Distributed Version Control System, esim. Bazaar, Git, Mercurial •Koko versiohallintatietokannan peilaaminen, ei pelkästään tietyn version hakeminen, tiedon palautus •Mahdollisuus käyttää yhdistää eri palvelimia palvelin versiohallintatietokanta Tietokone A Versio 3 versiohallintatietokanta tiedosto Versio 2 Versio 3 Versio 1 Versio 2 Versio 1 Tietokone B versiohallintatietokanta tiedosto Versio 3 Versio 2 Versio 1 http://git-scm.com/book/en/v2/Getting-Started-About-Version-Control TIE-20200 Samuel Lahtinen Harkkatyön kanssa: Gitlab ja repot https://gitlab.rd.tut.fi/repolainen/docs/student_manual/intro.html TIE-20200 Samuel Lahtinen Git yleisesti • Ei tallenna tiedostojen eroja, vaan aina “snapshotin” tiedostotoista, uudet versiot tai muuttumattomissa linkki edelliseen • Lähes kaikki toiminnot ovat lokaaleja, historia jne. löytyy paikallisesti ilman verkkoyhteyttä • Yleisin versiohallintaohjelmisto TIE-20200 Samuel Lahtinen Git ja peruskomennot •Add, lisätään tiedosto •Log, revisiohistoria •Rm, poistetaan tiedosto •Commit, muutosten vieminen eteenpäin •Revert, undo muutoksille •Checkout, tietyn haaran ottaminen työhaaraksi tai tietyn version hakeminen historiasta (git checkout revision_id) •Branch, haaran luominen (työhaarasta) •branch –d, poistaa haaran •Merge, yhdistetään nykyiseen haaraan annettu haara TIE-20200 Samuel Lahtinen Git ja peruskomennot •Clone, kopioi olemassa olevan repon, tämän tekeminen kurssilla aivan alkuun saatte kopioitua itsellenne ryhmänne repositoryn (osoite Gitlabista) •Push, työnnetään nykyisen työhaaran (commitoitu) tilanne palvelimelle (kurssilla gitlab.rd.tut.fi…) •Fetch, haetaan toisesta repositoriosta tavaraa •Pull, fetch + merge nykyiselle työhaaralle, clonen jälkeen tekee automaattisesti clone-osoitteesta •pull –rebase, hae uusimmat palvelimelta, tee rebase (lokaalisti) •Remote, yhteistyön määrittelyä ja kyselyä •origin, paikka mistä kloonattu •remote –v, lista osoitteista ja lyhenteistä •remote –a shortname url, lisätään uusi osoite (esim. git –a test a.test.fi) • git fetch shortname, saadaan haettua kyseinen repo (esim. tietyn käyttäjän) TIE-20200 Samuel Lahtinen Git ja haarat • Haarat, päähaara master, muut haarat, branches • Mihin voidaan käyttää? • Bugikorjaukset • Uusien ominaisuuksien toteuttaminen, yleinen tapa, uusi ominaisuus, uusi feature branch. • Kun homma on toteutettu loppuun ja testattu, merge masterin kanssa (tai jonkun versiohaaran kanssa) • Tietty versio ulos, tämän jälkeen tarvittavat päivitykset tämän haaran alle tai siitä lisähaarauttamalla TIE-20200 Samuel Lahtinen Esimerkki versiohallinan käytöstä teollisuudessa (feature-haara, jossa refaktorointeja) 2015-03-16 2015-03-17 2015-03-18 2015-03-19 “Created branch 'feature/LPK174_cookie-sessionstore‘” “Use encrypted cookie as the cookie store” “Refactored hashbang to use pure ring session” “Move session key from JSON to response level” “Handle nil response correctly” “Refactored hashbang to use pure ring session” “Merge with develop” “Load current user data from db” “Read session id from session data” “Pass session to actions” “Renamed logging context key” “Moved user from noir session to pure ring session” “company info is needed in session” “fixed impersonation” “Load current user attachment list from db” “architect flag is needed in a pre-check” “Merge with develop” “impersonator is also a virtual user” “Drop person id from public data” “No default key” “Check user data expiration at authorization middleware” “Merge with develop” “Set user data ttl to 5 minutes” “exclude virtual users” “Separated start function, added stop function” “Read session encryption key from file” “Added endpoint for restarting Jetty” “Set graceful shutdown timeout to 10 seconds” “Allow access only from localhost” “Merge with develop” “reload api” “Reconnect to MongoDB” “flow: Closed <feature> 'LPK174_cookie-sessionstore'” TIE-20200 Samuel Lahtinen Refactoring within feature dev Feture branch Creation / closing Merge with dev. branch “Added script for deploying keys” “flow: Merged <feature> 'LPK-174_cookie-sessionstore' to <develop> ('develop')” Legend: Major refactoring “Moved session handling logic to sade.session” Review request flag “Session ID must be generated manually” “web/sessionId was only logged redundantly” “special case for oir-authority user” Esimerkki haarasta • Alkutilanne: • Issue tracker, issue 53 työn alle $ git checkout -b iss53 Switched to a new branch "iss53" Tai kahden komennon kera: $ git branch iss53 $ git checkout iss53 https://git-scm.com/book/en/v2/Git-Branching-Basic-Branching-and-Merging TIE-20200 Samuel Lahtinen Jatkokehitystä • Alkutilanne: • Issue tracker, issue 53 työn alle git commit -a -m 'lisättiin puolustuskyky uudelle hahmotyypille' https://git-scm.com/book/en/v2/Git-Branching-Basic-Branching-and-Merging TIE-20200 Samuel Lahtinen Kriittinen bugikorjauspyyntö • Alkutilanne: • Palataan takaisin master-haaran tilanteeseen, luodaan sen pohjalta uusi haara hotfix, muokkaillaan ja commit $ git checkout master Switched to branch 'master' $ git checkout -b hotfix Switched to a new branch 'hotfix' $ git commit -a -m 'fixed the broken email address' [hotfix 1fb7853] fixed the broken email address 1 file changed, 2 insertions(+) https://git-scm.com/book/en/v2/Git-Branching-Basic-Branching-and-Merging TIE-20200 Samuel Lahtinen Bugikorjaus mukaan masteriin • Alkutilanne: • Hotfix toimii testien perusteella, hyvä homma, korjaus masteriin $ git checkout master $ git merge hotfix Hotfix-haara tehnyt tehtävänsä, voidaan poistaa $ git branch -d hotfix https://git-scm.com/book/en/v2/Git-Branching-Basic-Branching-and-Merging TIE-20200 Samuel Lahtinen Palataan kehittämään issue 53:a $ git checkout iss53 Switched to branch "iss53" $ vim index.html $ git commit -a -m 'uusi taistelija valmis [issue 53]' https://git-scm.com/book/en/v2/Git-Branching-Basic-Branching-and-Merging TIE-20200 Samuel Lahtinen Liitetään työn tulos päähaaraan $ git checkout master Switched to branch 'master' $ git merge iss53 Merge made by the 'recursive' strategy. https://git-scm.com/book/en/v2/Git-Branching-Basic-Branching-and-Merging TIE-20200 Samuel Lahtinen Konflikteja? $ git merge iss53 Auto-merging kokopelisamassatiedostossa.cc CONFLICT (content): Merge conflict in kokopelisamassatiedostossa.cc $ git status On branch master You have unmerged paths. (fix conflicts and run "git commit") Unmerged paths: (use "git add <file>..." to mark resolution) both modified: kokopelisamassatiedostossa.cc no changes added to commit (use "git add" and/or "git commit -a") $ git mergetool https://git-scm.com/book/en/v2/Git-Branching-Basic-Branching-and-Merging TIE-20200 Samuel Lahtinen Rebase ja haarat Mergen avulla $ git checkout experiment $ git rebase master First, rewinding head to replay your work on top of it... Applying: added staged command $ git checkout master $ git merge experiment https://git-scm.com/book/en/v2/Git-Branching-Rebasing TIE-20200 Samuel Lahtinen Rebase ja update “haluan, että omat muutokseni pistetään muiden tekemien muutosten päälle” git pull --rebase origin master Origin/master Local master Local master (after rebase) https://git-scm.com/book/en/v2/Git-Branching-Rebasing https://www.atlassian.com/git/tutorials/comparing-workflows/centralized-workflow TIE-20200 Samuel Lahtinen Gitlab? • • • • • Git version control, versiohallinta Issue tracker, tikettien hallintaa Code snippets, jako versiohallinnan ulkopuolelle Yksinkertainen wiki Merge Requests, pyyntöjä, joilla voidaan pyytää henkilöä tekemään kahden haarojen yhditäminen (esim. Feature-haara päädevaushaaraan) TIE-20200 Samuel Lahtinen Pull & merge requests • Pull request, yleinen tapa kommunikoida ja varmentaa ohjelman uusia osia, ominaisuuksia jne. • Koodari saa homman valmiiksi, pull/merge request, työkaverit/intergraatiovastaava käy kurkaamassa koodin • Tämän jälkeen masteriin merge • Pull request, onko kunnossa • Oon jämähtänyt, voiko joku jeesata • Fork ja siellä puuhastelu • Ei tarvi välttämättä Gitlabin työkalua, kevytversiona esim. Slack tai IRC ja siellä huutelu • https://help.github.com/articles/using-pull-requests/ TIE-20200 Samuel Lahtinen Työkaluja •Perussetti: https://git-scm.com/downloads •Git asiakasohjelmia, http://git-scm.com/downloads/guis •Graafista tiedostojen hallintaan integroitua Windowsille: https://code.google.com/p/tortoisegit/ •Linux, Windows, Mac ja graafinen: http://www.syntevo.com/smartgit/download •Komentorivi (Linux, Lintulan git), Windowsille vastaava: https://git-forwindows.github.io/ •SSH-avaimet ja niiden tuottaminen: https://gitlab.rd.tut.fi/help/ssh/README TIE-20200 Samuel Lahtinen Erilaisia työskentelytapoja •Kaikki masteriin •Sopimukset, remoteen puskettava kama ei saa rikkoa mitään •Vain testattua, toimivaa koodia •Esim. Uudet commit masteriin, liittyy joko ominaisuuteen (feature) tai bugipäivitykseen •Commitit ja tyypittäminen, bugikorjaus, feature, refaktorointi, jne. •Pieniä inkrementtejä, työ ei voi olla auki pitkään (yhteistyö haastavaa) •Masterin koodi usein rikki •Feature branch workflow, ominaisuuspohjainen •Kaikki tiettyyn ominaisuuteen liittyvä työ samassa haarassa, yhteistyö, samaan ominaisuuteen liittyvän työn jakaminen •Master aina ehjänä •Pull requestien käyttö kommunikaatiossa, oon saanut valmiiksi, tarkastakaa, oon jämähtänyt, jne. (pull request, review, merge to main) TIE-20200 Samuel Lahtinen Feature branch workflow •Uusien ominaisuuksien/asioiden kehittämiseen liittyvä •Kaikki tiettyyn ominaisuuteen liittyvä työ samassa haarassa, yhteistyö, samaan ominaisuuteen liittyvän työn jakaminen •Master aina ehjänä •Pull/merge requestien käyttö kommunikaatiossa, oon saanut valmiiksi, tarkastakaa, oon jämähtänyt, jne. (pull request, review, merge to main) TIE-20200 Samuel Lahtinen Gitflow • Projektien julkaisut tärkeässä roolissa, isompiin projekteihin toimiva • Featuret liittyvät devaushaaraan, masterissa vain julkaisuversiot • Erilliset release-haarat (dedis tai tarpeeksi ominaisuuksia), valmistuessaan masteriin uutena version & dev-haaraan merge mahdollista tehdä samaan aikaan jatkokehitystä ja julkaisun valmistelua TIE-20200 Samuel Lahtinen https://www.atlassian.com/git/tutorials/comparing-workflows/gitflow-workflow GitLab Flow / Github flow • Yksinkertaistusta GitFlowsta • Masteriin menevät featuret valmiita tuotantoon, eli feature branch merge suoraan käyttöön • Continuous deliveryt sun muut käytössä • Oikealla, useita eri ympäristöjä, pre-productionin kautta productioniin TIE-20200 Samuel Lahtinen https://www.atlassian.com/git/tutorials/comparing-workflows/gitflow-workflow Forking workflow • Yhden serveripuolen repon sijaan jokaisella oma serveripuolen repo • Erillinen projektin hallinnoija hyväksyy ja tekee yhdistämiset viralliseen repositoryyn, joka sitten on muiden saatavilla (kloonattavissa ja synkronoitavissa) • Erityisen toimiva nopeasti muuttuvien ryhmien kanssa, open source projektit ja enemmän tai vähemmän luotettavat devaajat • Kaikki voivat työntää tuotoksiaan muiden saataville, pull request, tarkistaminen, hallinnoija vastaa hyväksynnästä https://www.atlassian.com/git/tutorials/comparing-workflows/forking-workflow TIE-20200 Samuel Lahtinen Dictator and Lieutenants workflow • Iiisoihin projekteihin, joissa hierarkiaa & paljon tekijöitä • Yksi virallinen repo, josta uusin virallinen versio (blessed) • Devaajat tekevät töitä tietyn alueen parissa, näillä oma luutnantti joka vastaa tästä vastuualueesta, tekevät omaan masteriinsa yhditelyn, integraatiomanagerina näille luutnanteille diktaattori, joka vastaa blessed reposta, tekee merget siihen suuntaan • Blessed referenssinä kehittäjille, (kehittäjät rebase blessedistä aina kun päivittyy) • Kevyempi yleinen versio, integration manager workflow https://git-scm.com/book/en/v2/Distributed-Git-Distributed-Workflows TIE-20200 Samuel Lahtinen Suosituksia •Sopikaa yhtenäinen tapa käyttää gittiä, jonkinlainen workflow, jotain periaatteita jne. •Rebase ennen pushia •Pull requests ja niiden hyödyntäminen, kommunikointi ja varmistus TIE-20200 Samuel Lahtinen Aloittaminen •Gitlabiin sisään, siellä repositoryn URL selville •SSH-avaimen luominen ohjeiden avulla •Sen jälkeen komentorivillä kloonaus •Kokeile kaikenlaista paikallisesti, (add, commit, branch, merge…) •Kokeile tunkea oma testihaara muiden saataville jne. TIE-20200 Samuel Lahtinen Asetuksia • Editorin vaihtaminen toiseksi (Windows, jos on vim-allergia), esimerkkinä Notepad++ • Notepad++ avautumaan gitbashissä, lisätään asennushakemisto pathiin • Git ja editorin asettaminen (vaihda notepad++:n tilalle oma suosikkisi) git config --global core.editor \ "'C:/Program Files (x86)/Notepad++/notepad++.exe' -multiInst -notabbar -nosession -noPlugin” • Linux jne. Asenna mieliohjelma ja käytä, git configilla editorin vaihtaminen onnistuu TIE-20200 Samuel Lahtinen Yhteenveto •Opittiin gitin peruskomentoja ja ideaa haarojen käytöstä jne. •Opittiin hieman erilaisista versiohallinnan käyttötavoista (workflowt) •Myöhemin kurssilla vähän lisää asiaa koodistaajoon tyyppisestä asiasta •Osoiteita: •https://gitlab.rd.tut.fi/ •https://gitlab.rd.tut.fi/repolainen/ •Materiaalia & ohjeistusta: •http://git-scm.com/book/en/v2 •https://gitlab.rd.tut.fi/repolainen/docs/student_manual •https://www.atlassian.com/git/tutorials 36 TIE-20200 Samuel Lahtinen