Hva er Git? GitHub? GitLab? Hæ?

Hva er Git?

Git er en gratis OpenSource versjonskontroll-software som holder styr på endringer i et sett med filer som vi kaller Repository, eller bare Repo. Opprinnelig utviklet av Linus Torvalds i 2005. Git hjelper flere å utvikle mot samme kilde og skal hjelpe til med å unngå konflikter når vi sammenstiller endringer fra flere utviklere mot flere filer.

Hva er GitHub?

Det er et produktnavn for en plattform som nå eies av Microsoft og lagres på Microsoft sine servere, der du kan lagre dine Repo, enten privat eller dele det med andre. Et Repo i GitHub inneholder tilleggsfunksjoner som Wiki (Markup Language) slik at du kan beskrive innhold og bruk, tilgangskontroll, sikkerhetsfunksjoner, sjekk av kode, automatisering mm. Det kan også kobles til flere tredjepartsprodukter. Det finnes både gratis lisenser for privatpersoner og enterpriselisenser for teamsamarbeid innenfor et selskap.

Hva er GitLab?

Tilsvarende produkt som GitHub, som kan lagre dine Repo, men i motsetning til GitHub er GitLab OpenSource og kan kjøre på dine egne servere.

Innstallasjon av Git

Er du på Mac eller Linux har du nok Git allerede installert, men sørg for at du har siste versjon. Du kan sjekke eksisterende versjon ved å skrive git --version

For Windows, så kan du installere Git Bash for Windows: https://gitforwindows.org/
Last ned og installer med Next, Next, Next og endre om ønskelig disse valgene:
  • Velg en editor annet enn Vim, feks Notepad, Notepad++ eller Visual Code
  • New repositories: main
  • Git from the command line and also 3-rd party software
Etter installasjon, aktiver lange filnavn i Windows ved å kjøre dette som administrator: 
git config --global core.longpaths true

Opprett gjerne en egen katalog, feks C:\dev\Git
Snarveiene i Windows peker på My Documents, noe som kan være upraktisk, så lag deg nye snarveier der du endrer:
Mål: git-bash.exe --cd-to-home
Start i: %HOMEDRIVE%%HOMEPATH%C:\dev\Git


Før du begynner, legg også inn:

git config -global user.name "Mitt Navn"

git config -global user.email "Mitt.Navn@domenet.no"



Det er nyttig å installere VSCode (Visual Studio Code) når vi skal jobbe med kode: https://code.visualstudio.com/
Legg til nyttige extension som feks
  • Open in browser
  • Trailing Spaces
  • Powershell
  • GitHub Pull Request
    (hvis du har lyst å prøve deg med SourceControl fra VSCode)

Enkel skisse




1. Utvikler 1 henter inn en kopi av koden som allerede ligger ute på ekstern GitHub (git clone)

2.  Utvikler 1 redigerer og gjør endringer i noen filer og registrerer i lokal Git at noen filer er endret slik at disse ligger i lokal Git staging-område (git add)

3. Utvikler 1 er ferdig med endringene sine og samler disse i en pakke som sendes fra lokal staging-område til lokal Git Repo

4. Utvikler 1 sender sine endringer fra sin lokale Git til ekstern GitHub

5. Utvikler 2 henter inn oppdaterte endringer fra ekstern GitHub ned til sin lokale Git for å ha en egen kopi av koden



Branch og Merge Request

I større prosjekter når det er mange som jobber inn mot det samme Repo er det vanlig å lage en Branch (en gren ut fra treet) av koden, og jobbe videre med den. Andre utviklere kan gjøre det samme, slik at det er flere som jobber med sine ting.

  • Når utvikler er ferdig med sine endringer, så lager utvikler en Merge Request, dvs koden som er endret på utvikler sin maskin blir satt opp til å limes inn sammen med nåværende versjon av koden i hovedtreet (Main).
  • Hovedkode kan ha endret seg i tiden en utvikler har holdt på med sin del i sin gren og derfor må det sjekkes om det er noe av den samme koden som flere har endret på.
  • Hvis det ikke er noen konflikter og Merge Request blir godkjent, så har vi fått oppdatert koden vår og opprinnelig Branch kan slettes, da endringene nå lever videre i hovedtreet.

Nyttige kommandoer

Kommando Beskrivelse

git init

git init gjør om en hvilken som helst lokal mappe til et Git repo

git clone

git clone brukes for å lage en lokal kopi av et repo eller en branch innen et repo

git add

git add legger til nye eller endret filer fra dit arbeidsområde/mappe til Git staging

git commit

git commit lager et snapshot av filene i Staging og flytter de inn i ditt lokale Git repo

git push

git push laster opp filer fra ditt lokale repo til remote repo, feks til GitHub

git pull

git pull oppdaterer ditt lokale repo og arbeidsområde med de siste endringer fra remote repo, feks fra GitHub

git status

git status gir deg oversikt over hva du jobber med, hvilken branch, hvilke filer som er i Staging etc

 

Tips

Ikke legg Repo i OneDrive, da det kan forårsake utilsiktede filsync som Git ikke får med seg.



Enkle bash kommandoer

Kommando Beskrivelse

help

Lister ut kommandoer med forklaring og eksempel på bruk

pil opp/ned

Går gjennom history med tidligere kommandoer

echo "$PWD"

Viser mappe du står i

 

Eksempel

MYUSER@MYPC /c/dev/git/helix (main)
$ git status
On branch main
Your branch is up to date with 'origin/main'.
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
        modified:   README.md
no changes added to commit (use "git add" and/or "git commit -a")

MYUSER@MYPC /c/dev/git/helix (main)
$ git add README.md
MYUSER@MYPC /c/dev/git/helix (main)
$ git commit -m "Updated from bash"
[main 4de4002] Updated from bash
 1 file changed, 1 insertion(+), 1 deletion(-)
MYUSER@MYPC /c/dev/git/helix (main)
$ git push
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Delta compression using up to 8 threads
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 309 bytes | 309.00 KiB/s, done.
Total 3 (delta 2), reused 0 (delta 0), pack-reused 0 (from 0)
remote: Resolving deltas: 100% (2/2), completed with 2 local objects.
To https://github.com/turtelduo/helix.git
   495225d..4de4002  main -> main


GitHub

Før vi starter

For å logge på GitHub må du ha en konto, enten en privat eller en tilkoblet epost adressen din der du jobber.

Du bør også ha satt opp Git på din maskin.

Arbeidsflyt

Repository, eller Repo som vi også sier, er en slags mappe som inneholder en samling av filer som hører til ditt 'prosjekt'.

Branch, eller gren, gjør at du kan jobbe i parallell med filene, eller koden din, som fortsatt eksisterer i ditt hoved-tre (main), altså en gren som stikker ut fra stammen.




Endre filer og commit changes. Etter at du har endret filene dine utfører du en commit med en beskrivelse på hva du har gjort. Dette for å holde en enkel oversikt over hva som er endret.

En pull request vil sende dine endringer som er gjort via dine commits opp til GitHub repo'et.

NoenTM må så ta en pull request review, dvs gå igjennom og godta, endre, eller avvise din opprinnelige pull request.

Hvis endring er godkjent, vil NoenTM gjøre en merge request (MR) slik at den nye koden kommer inn i ditt repo.



Automatisering

For å automatisere oppgaver kan vi bruke GitHub Actions. GitHub Actions er plattformen som gjør at du kan bygge og automatisere oppgaver på GitHub med Continuous Integration / Continuous Delivery (CI/CD) i det vi ofte kaller pipelines, som i DevOps-verden er å kombinere prosesser, verktøy og automasjon for  å gjøre det mulig for team å bygge, teste og levere software med høy kvalitet raskt til sluttbrukerene. 

GitHub Actions består av flere komponenter, bla:

Action er en spesilatilpasset applikasjon som kan kjøre på GitHub Action plattformen. Du kan bruke eksisterende actions, lage dine egne eller bruke tredjepartsutviklede actions som du finner på GitHub Markedplace.

Workflows kan utføre en eller flere jobber og skrives i YAML-filer. man kan kalle det byggeklosser som kan gjøre enkle eller kompliserte oppgaver, men gjerne brutt ned i oversiktlige oppgaver slik at de kan gjenbrukes. Du kan ha mange workflows og de ligger i en egen mappe  .github/workflows i ditt repo

Event er en spesiell hendelse som brukes til å trigge en workflow.

En runner er en server som kjører dine workflows når de blir trigget Hver runner kan kjøre en job om gangen. I GitHub kan vi ha runners som er en Ubuntu Linux, Microsoft Windows, macOS eller til-og-med din egen runner på din egen server, som kan kjøre dine workflow.


Referanser og kursmateriell

Fra Git



TR;TD

What is GitHub? 2:42


Når det går galt


Video på YouTube

Det er mange ivrige folk der ute som lager YouTube videoer og ikke alle er like morsom å se på. Noen sverger til Mac, Linux og Bash, andre bruker Git Desktop og mener det er mer intuitivt. Jeg synes det er viktig å forstå konseptet bak versjonering, hvordan man bruker enkle kommandoer som add og commit og hvordan vi håndterer konflikter ved merge request. Mer avanserte former å jobbe med Repo, slik som å lage en Branch, som rett og slett er å lage sin egen grein ut av en utviklings-tre, jobbe med denne, og senere kan merge (blande sammen) med eksisterende kode som de andre har jobbet med.

Under har jeg lenker til noen videoer jeg har presset meg i gjennom å se, og ingen stikker seg ut som en vinner. Kikk litt på de og se hvilke du har lyst å se.


Git and GitHub for Beginners, GitHub Basics Made Easy: A Fast Beginner's Tutorial!    23:39

Git & GitHub Crash Course 2025 49:28

Git and GitHub Tutorial for Beginners    46:18

Git and GitHub for Beginners - Crash Course 1:08:29

Git Tutorial For Dummies 19:24

Git Tutorial for Beginners: Learn Git in 1 Hour

Git, GitHub, & GitHub Desktop for beginners 22:15

Git vs GitHub


Microsoft Learn







På norsk



Referansen over alle referanser



Top 5 Popis postis

Citrix FAQ

How to Downgrade Windows Server 2012 R2 Datacenter to Windows Server 2012 R2 Standard?

ÆØÅ?