Hva er versjonskontroll?

Av Weapp · Oppdatert

Versjonskontroll er systemet som lagrer hver endring i koden til et prosjekt, med hvem som gjorde den, når og hvorfor. Det gjør at man kan gå tilbake til en tidligere tilstand, og at mange kan jobbe parallelt uten å overskrive hverandres arbeid. Git er dagens standard, med tjenester som GitHub og GitLab bygget oppå.

Versjonskontroll er noe av det mest grunnleggende i moderne programvareutvikling, men også noe av det som sjelden blir forklart for den som bestiller. Det er verdt å forstå, for det henger direkte sammen med et av de viktigste spørsmålene av alle: Eier dere virkelig koden deres? Nedenfor forklarer vi hva det betyr.

Definisjonen

Versjonskontroll er systemet som lagrer hver endring i koden til et prosjekt, med informasjon om hvem som gjorde den, når og hvorfor. I stedet for at koden bare finnes i én tilstand som stadig endres, bygges det opp en fullstendig historikk der hvert steg er bevart og kan gjenopprettes.

Det løser to problemer på én gang. For det første kan man alltid gå tilbake til en tidligere tilstand hvis noe går galt. Det fungerer som en angrefunksjon, bare uendelig mye kraftigere. For det andre kan mange utviklere jobbe parallelt i samme kodebase uten å overskrive hverandres arbeid fordi systemet holder styr på endringene og fletter dem sammen.

Git er standarden

I praksis betyr versjonskontroll i dag nesten alltid Git. Det er verktøyet som tar seg av selve historikken, og det har blitt så dominerende at det er den selvsagte standarden i så godt som alle profesjonelle utviklingsteam.

Oppå Git ligger tjenester som GitHub og GitLab. De lagrer koden sentralt på et sikkert sted og legger til alt som gjør lagarbeid smidig: kodegjennomgang, tilgangsstyring, oppgavehåndtering og automatiske tester. Git er motoren under panseret, mens GitHub og GitLab er plattformene der teamet samles rundt koden. Forskjellen er verdt å kjenne til, for det er på plattformen tilgangen din som kunde ligger.

To begreper: commit og branch

To ord dukker stadig opp, og de er enklere enn de høres ut.

En commit er en lagret endring. Hver gang en utvikler har fullført et arbeidsmoment, lagres resultatet som en commit: et navngitt punkt i historikken med en kort beskrivelse av hva som ble gjort. Det er som å sette et bokmerke etter hvert fullført steg slik at man alltid finner tilbake.

En branch, eller gren på norsk, er en parallell arbeidskopi av koden. Der kan en utvikler bygge noe nytt eller prøve ut en idé uten å røre koden som fungerer og allerede er i drift. Når arbeidet er ferdig og testet, flettes grenen sammen med hovedgrenen. Det er grenene som gjør at flere personer kan bygge ulike ting samtidig uten å gå i veien for hverandre.

Kundeperspektivet: Krev tilgang til repoet

Her blir det forretningskritisk. All kode i et prosjekt bør ligge i et versjonskontrollert repository (et repo), og det avgjørende er hvem som har tilgang til det.

Ligger koden i et repo som dere som kunde eier og har full tilgang til, har dere kontroll. Dere kan når som helst gå gjennom det som er bygget og hente inn en annen leverandør som fortsetter der den forrige slapp. Dere kan også være trygge på at hele historikken er bevart. Ligger koden derimot bare hos leverandøren, sitter dere fast: Dere er avhengige av leverandørens velvilje for å få tilgang til et system dere selv eier, og et avsluttet samarbeid kan bli svært dyrt.

Kravet er enkelt å stille og bør stilles tidlig: All kode skal ligge i et versjonskontrollert repo som organisasjonen deres eier eller har administratortilgang til. Det er en av de billigste forsikringene mot leverandørinnlåsing som finnes. Vi i Weapp ser det som en selvfølge at kunden eier koden sin. Det er tross alt dere som har betalt for den.

Slik bruker du dette

Du trenger ikke å kunne Git for å stille de riktige kravene. Spør hvor koden lagres og om den er versjonskontrollert, og sørg for at dere står som eier eller administrator på plattformen, ikke bare som invitert gjest. Da har dere både historikken og kontrollen over systemet deres, uansett hvordan samarbeidet utvikler seg. Vil dere ha hjelp til å finne ut hvordan koden deres håndteres i dag? Ta kontakt.

Ofte stilte spørsmål

Hva er versjonskontroll, enkelt forklart?

Det er en detaljert endringshistorikk for kode. Hver gang en utvikler gjør en endring, lagres den som et punkt i historikken, med hvem, når og hvorfor. Man kan når som helst gå tilbake til en tidligere tilstand, sammenligne versjoner og se nøyaktig hva som er endret. Tenk på angrefunksjonen i et dokument, bare mye kraftigere og laget for lagarbeid.

Hva er forskjellen på Git, GitHub og GitLab?

Git er selve verktøyet som tar seg av versjonskontrollen, og det kjøres der koden utvikles. GitHub og GitLab er nettjenester oppå Git som lagrer koden sentralt og legger til samarbeidsfunksjoner: kodegjennomgang, tilganger, oppgavehåndtering og automatisering. Git er motoren, mens GitHub og GitLab er plattformene der teamene samles rundt koden. Man kan bruke Git uten dem, men sjelden omvendt.

Hva betyr commit og branch?

En commit er en lagret endring: et navngitt punkt i historikken som sier hva som ble endret og hvorfor, omtrent som å sette et bokmerke etter hvert fullført arbeidsmoment. En branch, eller gren, er en parallell arbeidskopi der man kan bygge noe nytt uten å røre koden som fungerer, og så flette det sammen med hovedgrenen når det er ferdig og testet.

Hvorfor er versjonskontroll viktig for meg som kunde?

Det avgjør om det faktisk er dere som eier og kontrollerer koden. Ligger koden i et versjonskontrollert repo som dere har tilgang til, kan dere når som helst bytte leverandør eller gå gjennom koden, og dere kan være sikre på at ingenting går tapt. Uten det ligger hele historikken hos leverandøren, og dere er avhengige av leverandørens goodwill for å få tilgang til et system dere selv eier.

Hva skal jeg konkret kreve av leverandøren min?

Krev at all kode ligger i et versjonskontrollert repository som dere har tilgang til, helst eid av virksomheten deres. Be om å stå som eier eller administrator på GitHub eller GitLab, ikke bare som invitert gjest. Da har dere kontroll over koden uansett hva som skjer med samarbeidet, og dere slipper å være prisgitt leverandøren hvis kundeforholdet avsluttes.