3. Grundlæggende Git#
3.1. Repositories#
Et Git-repository er en mappe i et filsystem, f.eks. på din harddisk, som indeholder et projekts filer og som er under versionsstyring af Git. Det letteste sted at møde repositories for første gang er github:
3.1.1. Repositores på GitHub#
Åbn jonascj/space-shooter-python-git i en webbrowser.
Websiden viser det repository som vil blive brugt i denne tutorial. Repository’et som kaldes jonascj/space-shooter-python-git og det indeholder kode og andre filer som udgør spillet.

Fig. 3.1 GitHubs visning af et repository.#
Aktivitet
Udforsk repository’et på GitHub. Du kan trygt navigere rundt på siden, du har kun læseadgang til repository’et og kan ikke ændre noget.
3.1.2. Fork et repository#
For at videreudvikle på projektet repræsenteret ved repository’et github.com/jonascj/space-shooter-python-git vha. både Git og GitHub laves en såkaldt fork af repository’et. En fork er en kopi af et repository som ejes af din GitHub-bruger.
Vælg Create a new fork
Navn og beskrivelse af repositoriet kan ændres hvis det ønskes.
Opret din fork ved at klikke Create fork.
Din nyligt oprettede fork er et nyt Git-repository (hosted af GitHub) som kaldes <username>/space-shooter-python-git, hvor <username> er dit GitHub-brugernavn.
3.1.3. Klon et repository#
At skaffe en lokal kopi af et repository, som du kan arbejde på fra en given computer, kaldes at klone et repository (engelsk: clone a repository).
Kopier URL’en til dit repository fra browserens adressebar:
Klon repository’et fra VS Code:
Vælg Source Ctrl 1 eller tryk Ctrl+Shift+G (macOS: Cmd+Shift+G).
Vælg Clone Repository 2 .
Indtast URL’en til dit repository 3 og afslut med Enter.
Vælg en mappe / placering hvor du ønsker din klon af repository’et placeret.
Hvis du vælger en mappe kaldet
projects
vil der under den mappe blive lavet en mappe med navnet på repository’et:projects/space-shooter-python-git
.Vælg Open når du bliver spurgt om du ønsker at åbne det netop klonede repository.
VS Code spørger om du stoler ophavsmanden til filerne i den mappe som åbnes. VS Code kan nemlig eksekvere programmer fra mappen automatisk, hvilket kan være uheldigt/farligt hvis mappen indeholder ondsindet kode.
I dette tilfælde kan du stole på indholdet af Space Shooter-projektet. Vælg derfor Yes, I trust the authors.
Filerne som udgør Space Shooter-projektet, og som hører til Git-repository’et, kan nu ses i din computers filsystem:
Fig. 3.2 Grafisk visning af filerne som verstionsstyres i repository’et.#
A Mappen med samme navn som repository’et
space-shooter-python-git
kan nu ses i mappen, som blev valgt som placering til klonen.B Skjult mappe med navn
.git
som indeholder al information om repository’et. Slettes denne mappe er mappenprojects/space-shooters-python-git
ikke længere et Git-repository.
Mappen og alle filer under den (bortset fra
.git
-mappen) kaldes repository’ets working tree[1].Aktivitet
Undersøg filerne som udgør projektet i dit operativsystems filbrowser.
3.1.4. Projektet i VS Code#
Filerne fra figur 3.2, kan også ses i VS Code og programmet/spillet kan også eksekveres fra VS Code. Det var hele pointen med at forke og klone: at blive i stand til at arbejde på koden!
Vælg Explorer 1 eller tryk Ctrl+Shift+E (macOS: Cmd+Shift+E).
Åbn filen
game.py
2 ved at klikke på den i EXPLORER-panelet.Kør programmet ved at klikke på play-knappen i øverste højre hjørne 3.

Spillet skulle gerne starte og se således ud:

Fejlsøgning
Hvis spillet ikke starter (men en fejl vises i VS Codes indbyggede terminal) kan det skyldes pygame modulet ikke er installeret.
Se installationsinstruktionen her: Installation af pygame.
Hvis play-knappen 3 mangler i øverste højre hjørne kan det skyldes en eller flere VS Code Extensions mangler at blive installeret.
Se installationsinstruktionen her: Udvidelser/extensions.
3.2. Ændringer til kode/projekt#
Git kan detektere ændringer i projektets filer og visualisere dem for programmøren. Hvis ændringerne er uønskede kan Git også kassere ændringerne (engelsk: discard changes). Det vigtigt at kunne orientere sig om ændringer til projektet og det er nyttigt at kunne kassere uønskede ændringerne (f.eks. resultatet af et uheld eller et kort, fejlslagent eksperiment).
Vi vil nu lave en ændring til koden i game.py
for at se hvordan Git viser disse ændringer
og vi vil bede Git kassere ændringerne igen.
Slet
()
frapg.time.Clock()
i linje 9 1 og gem filen med Ctrl+S (macOS: Cmd+S).
Når programmet nu køres vha. play-knappen 2
fejler programmet med en AttributeError
fra linje 179 A.
VS Code og Git gør opmærksom på game.py
er ændret
i forhold til sidste commit (snapshot af projektet)
med et M ud for filnavnet B.
I alt én fil er ændret, indikeret med 1 C.
Hvis ændringen var lavet ved et uheld kunne man selvfølgelig finde frem til linje 9 ud fra fejlmeddelelsen, men det er hurtigere at bede Git kassere ændringen.
3.2.1. Status og diff#
Git kan vise et repository’s status, en liste af alle ændringer foretaget i working tree som endnu ikke er comitted.
Åbn SOURCE CONTROL-panelet ved at klikke på 1, eller brug genvejen Ctrl+Shift+G (macOS: Cmd+Shift+G), og klik på filen
game.py
2.A En tab som viser ændringerne til
game.py
. Visningen kaldes et diff, en forkortelse for difference.B Linje 9 er markeret i begge filer. Linjen markeret med rød er fjernet og linjen markeret med grøn er tilføjet.
I stedet for at se de to versioner side om side (engelsk: side-by-side diff) kan ændringen vises inline (engelsk: inline diff).
Klik på menuen … 1 og vælg/marker Inline View 2.
De to versioner af linje 9 A viser over hinanden (kaldet inline view).
Ændringen til linje 9 kan kasseres ved at klikke på Discard Changes-pilen 1 ud for filen
game.py
.Bekræft du vil kassere ændringerne ved at vælge Discard changes fra dialogboksen som fremkommer.
game.py
er nu ændret på harddisken, så filen igen er identisk med versionen afgame.py
fra sidste commit.Når der ingen ændringer er i working tree, i forhold til sidste commit, kaldes working tree clean[1].
Aktivitet
Foretag ændringer i game.py
og brug Git til at kassere ændringerne.
Læg mærke til hvordan diff-visningen ser ud ved forskellige slags ændringer:
Linje tilføjet
Linje slettet
Linje ændret
Flere linjer ændret
Foretag andre ændringer i projektet og brug Git til at kassere ændringerne:
Slet en fil fra projektmappen, f.eks.
images/alien_1.png
.Omdøb en fil.
Tilføj en fil
3.2.2. Tidligere versioner (checkout)#
En af de primære årsager til at benytte versionsstyring er, at forskellige versioner af et projekts filer kan gemmes og genskabes senere.
At skifte version til et givent commit kaldes at foretage et checkout. Ved checkout af et commit opdateres working tree til at se ud som det gjorde da det pågældende commit blev lavet. Fordi et checkout ændrer working tree kan man kun foretage checkouts hvis working tree er clean (ellers ville et checkout kassere ændringer foretaget i working tree).
Åbn fanen Git Graph ved at klikke på 1.
Højreklik på commit
Initial commit ... (e267)
2, vælg Checkout 3.Bekræft, at du vil lave et checkout af commit
e267
ved at vælge Yes, checkout i den fremkomne dialog.

Projektet er nu i en tilstand kaldet detached head, som dialogboksen informerede om. Det betyde blot, at det ikke er nyeste commit som er checked out.

Fig. 3.3 VS Code viser projektet som det så ud da commit e267
blev lavet.#
A Bemærk der står e267 .. i stedet for master som der har gjort indtil nu.
B EXPLORER-panel viser working tree som det så ud i første version af spillet.
C Fanen game.py viser filen
game.py
som den så ud i commite267
.
Afprøv spillet (kør programmet) vha. play-knappen 1.
Aktivitet
Foretag et checkout af andre commits og afprøv spillets forskellige versioner.
Foretag nogle ændringer til f.eks.
game.py
mens et commit er checked out (detached head). Husk at kassere dine ændringer før du foretaget et nyt checkout.
Skift tilbage til nyeste version af projektet ved at højreklikke på master 1 og vælge Checkout Branch 2.