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.

../_images/github-space-shooter.png

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.

  1. Vælg Create a new fork

    ../_images/github-fork.png
  2. Navn og beskrivelse af repositoriet kan ændres hvis det ønskes.

    Opret din fork ved at klikke Create fork.

    ../_images/github-fork-create.png

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).

  1. Kopier URL’en til dit repository fra browserens adressebar:

    ../_images/github-repo-url.png
  2. 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.

    ../_images/vscode-clone-github-repo.png
  3. 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.

    ../_images/vscode-clone-select-repo-location.png
  4. Vælg Open når du bliver spurgt om du ønsker at åbne det netop klonede repository.

    ../_images/vscode-clone-open-cloned-repo.png
  5. 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.

    ../_images/vscode-open-trust-author.png
  6. Filerne som udgør Space Shooter-projektet, og som hører til Git-repository’et, kan nu ses i din computers filsystem:

    ../_images/filebrowser-repo-working-tree.png

    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 mappen projects/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.

../_images/vscode-file-explorer.png

Spillet skulle gerne starte og se således ud:

../_images/space-shooter-showcase.png

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.

  1. Slet () fra pg.time.Clock() i linje 9 1 og gem filen med Ctrl+S (macOS: Cmd+S).

    ../_images/vscode-explorer-modified-error.png

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.

  1. Å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.

    ../_images/vscode-git-diff-side-by-side.png
    • 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.

  2. 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).

    ../_images/vscode-git-diff-inline.png
  3. Æ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.

    ../_images/vscode-sourcecontrol-discard.png

    game.py er nu ændret på harddisken, så filen igen er identisk med versionen af game.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).

  1. Åbn fanen Git Graph ved at klikke på 1.

  2. Højreklik på commit Initial commit ... (e267) 2, vælg Checkout 3.

  3. Bekræft, at du vil lave et checkout af commit e267 ved at vælge Yes, checkout i den fremkomne dialog.

../_images/vscode-gitgraph-checkout-commit.png

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.

../_images/vscode-detached-head.png

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 commit e267.

  1. 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.

  1. Skift tilbage til nyeste version af projektet ved at højreklikke på master 1 og vælge Checkout Branch 2.

    ../_images/vscode-checkout-master.png

3.3. Litteratur#