Denne workshopen er en kort og enkel introduksjon til versjonskontroll med GitHub. Gjennom workshopen vil du bli kjent med de mest vanlige kommandoene i Git og scenarioene man treffer på når man bruker Git som verktøy.
- Før du kan begynne med workshopen må du ha
git
installert på din maskin. Hvordan du installerergit
for ditt operativsystem kan du se her. - Du vil trenge en GitHub-konto for å kunne gjennomføre alle oppgavene i workshopen (Du kan gjennomføre noen av oppgavene uten en GitHub-konto). For å opprette en konto kan du besøke denne lenken.
- Før du starter med oppgavene må du "forke" repoet til din GitHub. Helt til høyre for navnet på repoet vil du finne en knapp som heter "fork". Ved å klikke på denne vil du opprette en kopi av repoet på din GitHub som du kan jobbe ut i fra. Det er veldig viktig at "Copy the main branch only" er av når du forker repoet.
Du kommer til å se noen emojis i oppgavene. De betyr ca det her:
- 🏆 Oppgave: Her er hva du skal gjøre
- 💡 Tips: Litt ekstra info som kan være greit å være for å løse en oppgave eller bare et tips
- ✅ Testing av løsningen: Hvordan du kan sjekke at det du har gjør blir riktig
- 🚨 Løsningsforslag: Her finner du en komplett gjennomgang av hvordan du kan løse oppgaven
For å gjøre det lesbart hvem som har endret en commit etc. må vi konfiguere litt informasjon om deg.
Vi started med å sette navnet og bruker kommandoen:
git config --global user.name "Kari Nordmann"
Og epostadressen din:
git config --global user.email "[email protected]"
Før vi kan starte med å teste hvordan git
fungerer lokalt på din maskin, må vi hente repoet fra din GitHub til din maskin.
🏆 Last ned repoet til din maskin ved hjelp av git clone
.
💡 Om du ikke vil bruke terminalen for å laste ned repoet kan du gjøre det på nettsiden til repoet.
🚨 Løsningsforslag
> git clone https://github.com/<ditt brukernavn på github>/versionskontroll-intro.git
Cloning into 'versjonskontroll-intro'...
remote: Enumerating objects: 54, done.
remote: Counting objects: 100% (54/54), done.
remote: Compressing objects: 100% (50/50), done.
remote: Total 54 (delta 1), reused 54 (delta 1), pack-reused 0
Receiving objects: 100% (54/54), 249.08 KiB | 3.95 MiB/s, done.
Resolving deltas: 100% (1/1), done.
Nå har vi klonet repoet og fått vår egen versjon lokalt. Vi kan nå starte med kanskje en av de mest brukte funksjonene i git, nemlig å se hvordan ståa ser ut! Har vi endret noe og hvilken branch står vi på?
🏆 I terminalen, skriv git status
. Hva sier terminalen?
🚨 Løsningsforslag
> git status
On branch main
Your branch is up to date with 'origin/main'.
nothing to commit, working tree clean
🏆 Åpne filen endre-meg.txt
og erstatt placeholderne og med de riktige verdiene.
💡 En nyttig kommando for å se hvilke endringer som er gjort er
git diff
. Prøv den ut for å se hvordan endringene i filen vises!
🏆 Kjør kommandoen vi lærte i oppgave 2 for å se status
. Hvordan ser det ut?
🚨 Løsningsforslag
> 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: endre-meg.txt
no changes added to commit (use "git add" and/or "git commit -a")
Nå skal vi legge til endringene våre i historien.
🏆 Bruk git add
for å legge til filen vi har endret i versjonshistorikken.
🏆 Kjør git status
hvordan ser det ut?
🏆 Bruk git commit -m <en melding som beskriver endringene>
for å legge til en melding om endringene vi har gjort.
🏆 Hvordan ser status ut nå?
🚨 Løsningsforslag
> git add endre-meg.txt
> git commit -m "legger til universitet og dato i diktet"
[main b9758b4] legger til universitet og dato i diktet
1 file changed, 2 insertions(+), 2 deletions(-)
> git status
On branch main
Your branch is ahead of 'origin/main' by 1 commit.
(use "git push" to publish your local commits)
nothing to commit, working tree clean
Vi har nå fått gjort en endring og lagt det til i historikken lokalt på maskinen din. Det er nå på tid å få dyttet disse endringene til remote/GitHub også 🤩
💡 Du kan bruke
git log
for å se at remoten/GitHub ligger bak den lokale historikken din.
🏆 Bruk git push
for å dytte endringene dine til remote
🏆 Kjør git status
. Hvordan ser det ut nå?
🚨 Løsningsforslag
> git status
On branch main
Your branch is up to date with 'origin/main'.
nothing to commit, working tree clean
En av de største fordelene med å bruke versjonskontroll er at det gjør det mulig å jobbe med nye features eller bug fixes uten at man må jobbe med den versjonen som er stabil. I denne oppgaven skal du lage din første gren aka branch!
🏆 Bruk git switch
til å lage din første branch, gi den et navn som indikerer at vi skal endre tittelen på diktet
💡 Om du får en feilmelding om at branchen ikke eksisterer, så kan du prøve igjen med
git switch --create <branch-navn>
🏆 Kjør git status
, står du fortsatt på main
?
🚨 Løsningsforslag
> git switch --create "må-få-endret-den-tittelen-på-diktet"
Switched to a new branch 'må-få-endret-den-tittelen-på-diktet'
> git status
On branch må-få-endret-den-tittelen-på-diktet
nothing to commit, working tree clean
Diktet i endre-meg.txt
har ikke verdens beste tittel (diktet er ikke fantastisk heller 🤖). I denne oppgaven skal vi endre nettopp tittelen.
🏆 Gi diktet i endre-meg.txt
en bedre tittel og legg endringene dine i historien med en beskrivende commit-melding.
🚨 Løsningsforslag
> git add endre-meg.txt
> git commit -m "gir diktet en ny tittel"
[må-få-endret-den-tittelen-på-diktet 65daea4] gir diktet en ny tittel
1 file changed, 1 insertion(+), 1 deletion(-)
Noen på teamet har også endret detaljer i diktet og vi må hente inn disse endringene før vi kan pushe vår branch med ny tittel på diktet.
🏆 Bruk git pull
for å hente inn endringene til kollegaen din.
💡 For å se andre brancher som finnes på repoet kan du bruke
git branch -a
for å se brancher som eksisterer lokalt eller på remote/GitHub
🏆 Hva skjedde når du prøvde å hente endringene fra kollegaen din?
🚨 Løsningsforslag
> git pull origin dikt-med-annet-universitet
Auto-merging endre-meg.txt
CONFLICT (content): Merge conflict in endre-meg.txt
Automatic merge failed; fix conflicts and then commit the result.
Når vi prøve å hente inn endringene til kollegaen vår oppstod det som heter en merge conflict! I neste oppgave skal vi se på hvordan vi kan løse slike.
Kollegaen hadde også fylt inn universitet og dato i diktet og det har nå oppstått en merge-conflict siden begge har endret på samme del av diktet.
🏆 Kjør git status
og åpne filen hvor det har oppstått en merge conflict i en tekst-editor.
🚨 Løsningsforslag
On branch må-få-endret-den-tittelen-på-diktet
You have unmerged paths.
(fix conflicts and run "git commit")
(use "git merge --abort" to abort the merge)
Unmerged paths:
(use "git add <file>..." to mark resolution)
both modified: endre-meg.txt
no changes added to commit (use "git add" and/or "git commit -a")
🏆 Løs merge conflicten ved å fjerne datoen og universitetsnavnet som kollegaen din har endret til på hen sin branch.
🚨 Løsningsforslag
vim endre-meg.txt
-- GitHub reisen --
På universitets sti jeg trår,
Versionskontroll jeg nå skal lære.
Commits, branches, og mergekommandoer,
I kodeskogen, jeg finner mine spor.
Git og GitHub, verden åpner seg,
Historien i filene jeg forstår nå lett.
Dagens dato, en ny start, en tid for vekst,
Med versionskontroll, jeg tar den beste fest.
<<<<<<< HEAD
Dato: 31.10.23
Universitet: UiT
=======
Dato: UiO
Universitet: 31.10.2023
>>>>>>> origin/dikt-med-annet-universitet
For å beholde de endringene vi har endret til må vi fjerne alt som ikke hører til vår "head".
-- GitHub reisen --
På universitets sti jeg trår,
Versionskontroll jeg nå skal lære.
Commits, branches, og mergekommandoer,
I kodeskogen, jeg finner mine spor.
Git og GitHub, verden åpner seg,
Historien i filene jeg forstår nå lett.
Dagens dato, en ny start, en tid for vekst,
Med versionskontroll, jeg tar den beste fest.
Dato: 31.10.23
Universitet: UiT
Så må vi legge til den "korrekte" filen tilbake i historien.
> git add endre-meg.txt
Til slutt må vi "commite" for å markere merge conflicten
som løst. Kjører en git status
for å sjekke at alt er løst.
> git commit
[må-få-endret-den-tittelen-på-diktet e89fc29] Merge remote-tracking branch 'origin/dikt-med-annet-universitet' into må-få-endret-den-tittelen-på-diktet
> git status
On branch må-få-endret-den-tittelen-på-diktet
nothing to commit, working tree clean
Vi har nå endret tittel på diktet og det er på tide å få dette inn i main
. Dette kan vi gjøre ved å lage en Pull Request
💡 Prøv å kjør
git log
nå som vi har fikset merge conflicten. Har kollegaen din gjort noen andre endringer også?
🏆 Bruk kommandoen du lærte tidligere i kurset til å få din branch opp til remote/GitHub
💡 Du må konfiguere hva som skal være upstream eller du kan skrive
git push origin <branch navn>
om du får en advarsel ved å bruke baregit push
🏆 Besøk repoet ditt på GitHub og opprett en pull request mot main
base
. Du kan se i bildet nedenfor hvordan du velger base.
🚨 Løsningsforslag
> git push origin må-få-endret-den-tittelen-på-diktet
Enumerating objects: 8, done.
Counting objects: 100% (8/8), done.
Delta compression using up to 16 threads
Compressing objects: 100% (4/4), done.
Writing objects: 100% (4/4), 857 bytes | 857.00 KiB/s, done.
Total 4 (delta 2), reused 0 (delta 0), pack-reused 0
remote: Resolving deltas: 100% (2/2), completed with 1 local object.
remote:
remote: Create a pull request for 'må-få-endret-den-tittelen-på-diktet' on GitHub by visiting:
remote: https://github.com/dittbrukernavn/versjonskontroll-intro/pull/new/slug
remote:
To github.com:joakimsjo/versjonskontroll-intro.git
* [new branch] må-få-endret-den-tittelen-på-diktet -> må-få-endret-den-tittelen-på-diktet
På GitHub
- Velg "Compare & pull request" på oversikten av repoet ditt for å opprette en Pull Request.
- Gi Pull Requesten din et beskrivende navn.
- Velg "Create pull request".
Du har nå fått en kort introduksjon til de vanligste kommandoene og scenarioene man kan oppleve når man benytter seg av git som versjonskontroll. Om du har lyst til å lære enda mer om git kan du besøke disse lenkene for mer informasjon og eksempler:
- Enda mer forståelse om branches/grener
- GitHub sin dokumentasjon
- Git forklart gjennom gitarspill
- Pretty git log
- Oversikt over applikasjoner for å administrere git
Dette er et hot tip 🔥 Som student kan man få tilgang til flere funksjoner og verktøy graits gjennom GitHub sin Student Developer Pack. Her kan du også få tilgang til flere ressurser som lærer deg blant annet mer om hvordan GitHub kan brukes til å bygge, teste og deploye applikasjonene dine automatisk. For å se alle fordeler og hvordan søke — gå hit!