Parprogrammering med git og github

Versjon 0.2.3

Til nå har du sikkert brukt en form for versjonshåndtering, enten på studier eller jobb. Du har kanskje jobbet med en semesteroppgave og laget flere kopier av innleveringen din som du har gitt forskjellige navn (semesteroppgave1.docx, semesteroppgave1_versjon2.docs, semesteroppgave1_versjon3.docx), okei, du ser nok allerede at dette blir veldig mange filer og versjoner av denne filen å holde styr på. Det burde da finnes en bedre måte enn dette?

Og ja, det gjør det! En løsning på dette er å bruke git. Git er ett system for versjonskontroll kan holde styr på mange forskjellige versjoner, og varianter av koden din, git kan også gjøre så mye mer! Men for vårt formål ønsker vi hovedsakelig å bruke det for å kunne lagre filene vi har lokalt på uio sin github,

Dette er en introduksjon til en arbeidsflyt for parprogrammering med versjonskontrollsystemet git og hosting-løsningen github.

Intro til git og github

Vi starter med å sette opp ett repo på github.uio.no og setter så opp lokalt utviklingsmiljø med git. Videre forsøker vi å lære oss de mest grunnleggende operasjonene vi trenger:

  • Lage en versjon med git (add, stash, commit)
  • laste opp filer til github (push)
  • laste ned filer fra github (fetch, pull, merge)

Gjør stegene som står her underveis.

Vi starter med å gå inn på github.uio.no, der logger vi inn med vårt uio-brukernavn og passord.

Opprette ett repo på github.uio.no

New Repository knapp

 

Øverst til høyre når vi er innlogget ser vi ett ikon og ett "pluss"-symbol, trykk på dette, så "New repository".

 

 

 

Vi blir nå sendt til en side der vi kan opprette ett nytt github-repository, dette er lagringsområdet vårt. Her er det spesielt viktig at dere setter at repoet skal være "Private". (se bildet). Dere kan også markere boksen med README og legge inn en gitignore for Java (dette gjør at du slipper .class-filer i repoet). Trykk på "Create repository" når du har fylt inn informasjonen.

Vi blir nå sendt til "hjemmeområdet" til repoet vårt, her vil alle filene vi har lastet opp til github ligge. Vi går nå videre til å sette opp git i vårt lokale utviklingsmiljø.

Legge inn repo lokalt

I dette steget benytter vi ett GUI-program som heter github desktop, dette kan lastes ned via desktop.github.com. Det finnes terminalbaserte varianter av git og andre programmer som har mer funksjonalitet. For vårt bruk nå holder github desktop. Last ned og åpne github desktop.

Når du har lastet ned github desktop, velg "Sign in to Github Enterprise". Skriv inn github.uio.no på neste vindu, logg så inn med uio-brukernavnet og passordet ditt. Trykk deg videre til du kommer til vinduet på bildet under

Velg repoet du nettopp opprettet, trykk så clone. Dersom du vil endre hvor repoet blir lagret på din maskin, endre Local-path til en mappe der du vil at filene dine skal ligge. Du trenger ikke å gjøre dette nå. Trykk Clone igjen. Du har nå lastet ned (clonet) en lokal kopi av repoet til din egen maskin.

 

 

Klikk øverst til venstre i vinduet, høyreklikk på det aktuelle repoet. Der kan du velge å enten åpne mappen til repoet i en filutforsker eller en editor du foretrekker.

Legge til en versjon av koden

Vi kan legge til alle slags filer i git, de vi vanligvis vil lagre er programkoden vår (.java-filene), vi kommer nå til å bruke en .txt-fil men det hadde vært samme steg om vi hadde brukt en hvilken som helst annen type fil (f.eks. .java-filer).

Lag en ny tekstfil i mappen der du lagret repoet lokalt. Kall denne minforstecommit.txt i denne filen putter du inn teksten.

Dette er min første commit.

Lagre filen og gå tilbake til GitHub desktop.

Nå har det skjedd litt mer her.

I boks 1 ser vi hvilke filer som er endret, her har vi opprettet minforstecommit.txt, vi ser at boksen ved siden er krysset av. Dette betyr at vi vil "adde" denne versjonen av filen til vår "versjon".

I boks 3 ser vi endringen som er gjort i den aktuelle filen, grønne linjer betyr legget til, røde betyr fjernet.

I boks 2 bestemmer vi commit-meldingen vår, dette er info om hva vi har gjort i denne "committen" (versjonen), skriv en liten beskjed og trykk "Commit to master" for å legge til en versjon.

 

Denne versjonen er kun lagret lokalt nå. For å få den på GitHub-serveren trykk på "Push origin". Gå inn på github.uio.no og se at filen nå ligger der.

 

Velg filen i nettleservarianten, trykk på blyanten, endre ordet første til andre og commit to master. 

Gå tilbake i GitHub Desktop og trykk på "fetch origin" (hente status fra server), du kan nå laste ned endringene til din lokale maskin med å trykke pull origin. Se at filen har oppdatert seg lokalt.

 

Når du jobber i ett lite team på obligen

Vi har nå gått igjennom noen grunnleggende steg og oppsett ved bruk av git og GitHub. Flyten når vi driver med parprogrammering i team kan være

  1. Fetche og "pulle" nyeste versjon fra server
  2. Jobbe på én maskin når dere parprogrammerer
  3. Adde og committe endringen i koden dere har gjort
  4. Laste opp koden til server (Push origin)

Dersom to forskjellige brukere har endret på samme fil og begge prøver å pushe til origin vil en av de få noe som heter en merge conflict. Dette kan stort sett unngås med å strengt følge stegene over.

Dersom du ønsker å legge til brukere som kan «collaborate» på prosjektet ditt, går du inn på github.uio.no, velger repoet, går til settings, deretter collaborators og taster inn uio-brukernavnet til personen du ønsker å legge til.

Dersom du ønsker å laste ned ett repo du har funnet på uio sin github eller er blitt invitert til, gå inn i repoet i nettleseren, trykk på code, så open in github desktop.

Dersom man ønsker å benytte seg av mer avanserte arbeidsflyter med git kan det lønne seg å sette seg inn i branchespull-requests og code reviews. En avansert arbeidsflyt er f.eks git feature branch

Håndtere merge-konflikter i GitHub desktop*

Av og til glemmer vi å følge stegene, eller så velger vi å ikke gjøre det. Da kan det hende at vi må håndtere en merge-konflikt. Vi prøver nå å konstruere en slik for å lære oss å håndtere det

  1. Endre filen minforstecommit.txt på github.uio.no (eller fra en annen maskin), commit og legg til i master på origin (server)
  2. Endre filen minforstecommit.txt lokalt på din maskin (ikke pull eller fetch), erstatt ett av ordene til "neinei" og lagre.
  3. Commit og trykk push origin, du kan da få beskjed om å fetche og pulle, gjør dette.
  4. Du vil nå få opp en feil som sier "resolve conflicts before..."

du kan her velge å åpne filen som skaper konflikt i din foretrukkede editor (f.eks. visual studio code). 

Hvordan editoren velger å "visualisere" med farger og hjelpemidler for å godta/avslå varierer. Det viktigste er å få med seg at det som ligger mellom <<<<HEAD og ==== er din endring, mens det som ligger etter === til >>>> er endringen som lå på server og er i konflikt med din. Vi kan her velge å godta at vi ønsker å bruke vår lokale endring med å enten slette den innkommende delen og <<< HEAD i starten. Det letteste her er å trykke på "Accept Current Change" for å bruke vår lokale endring. Man kan også manuelt sette sammen endringene, om begge skal med.

 

Når du har ryddet opp i konflikten, lagre filen og gå tilbake til Github Desktop. Trykk så commit merge. Du kan nå pushe til origin og den nye endringen vil ligge i repoet på uio sin github.

Vil du prøve deg på ett enkelt java-eksempel?

Se på dette eksemplet (høyreklikk for å laste ned)

Har du lyst å vite mer om versjonskontroll?

Se på denne videon om versjonskontroll fra IN3110

Bruk dokumentasjonen til github:

Eller se på denne siden fra ett annet kjent universitet.

For avansert bruk av git anbefaler jeg heller å bruke ett terminalbasert program eller ett annet gui-program kalt sourcetree. Svar gjerne på dette nettskjemaet om du ønsker en mer i dybden gjennomgang med mer avanserte funksjoner til git og arbeidsflyt i team.

 

Har du noen spørsmål eller kommentarer til denne teksten, send de til sondrbw@uio.no

 

Av Sondre Bader Wang
Publisert 22. feb. 2021 10:08 - Sist endret 5. mars 2021 11:16