# Praktisk examinationsuppgift

De praktiska examinationsuppgifterna genomförs enskilt och lämnas in innan de muntliga examinationerna. Deadline för inlämning av uppgifterna framgår under instruktionerna för varje uppgift.

> Speciella regler gäller för genomförandet av de praktiska examinationsuppgifterna:
>
> * Uppgifterna är **obligatoriska** att genomföra för att få genomföra de muntliga examinationerna.
> * Uppgifterna ska genomföras **enskilt** utan hjälp från utomstående part. Det är tillåtet att söka generell hjälp kring delar som uppgifterna innefattar så som "Hur får man ut längden på en array?", "Hur fungerar for-satsen etc." men det är inte tillåtet att ställa direkta frågor kring hur man löser uppgifterna.&#x20;
> * Du ska göra **regelbunda "commits"** när du löser uppgifterna. Denna historik ska finnas på GitHub. Ett tiotal egna "commits" per examinationsuppgift bör finnas.

### Steg 1. Gå till din katalog för kursens lokala repon

Under kursen kommer du att arbeta med flera repon. Det är därför lämpligt att samla de lokala repona för examinationsuppgifterna under en och samma katalog, förslagsvis namngiven efter kursens kod 1dv024.

```

> cd 1dv024
```

### Steg 2. Klona ditt repo för examinationsuppgiften.

Du har blivit tilldelad ett privat repo för var och en av examinationsuppgifterna.

```

> git clone https://github.com/1dv024/example-username-examination-1.git
Cloning into 'example-username-examination-1'...
warning: You appear to have cloned an empty repository.
```

> &#x20;OBS! Ersätt `example-username` i `example-username-examination-1.git` med ditt användarnamn du fått av universitetet.
>
> &#x20;Genom att använda `git clone` klonar du ett befintligt repo på GitHub, d.v.s. du skapar en lokal fullständig arbetskopia av repot på GitHub. En katalog kommer att skapas med samma namn som repot du klonar, i detta fall `[example-username]-examination-1`, och fyllas med de filer och kataloger repot innehåller. De ändringar du gör lokalt kommer att skickas till repot på GitHub då du använder kommandot `git push`.

### Steg 3. Byt till den klonade katalogen

```

> cd example-username-examination-1
```

### Steg 4. Hämta filer (och kataloger)

```

> git pull https://github.com/1dv024/examination-1.git
remote: Counting objects: 6, done.
remote: Total 6 (delta 0), reused 0 (delta 0), pack-reused 5
Unpacking objects: 100% (6/6), done.
From https://github.com/1dv024/examination-1
 * branch            HEAD       -> FETCH_HEAD
```

Exempelutskrift av kommandot \`pull <https://github.com/1dv024/examination-1.git> \`.

## Steg 5. Ignorera inte .gitignore!

Använd aliaset `ignore`, du själv skapat, för att generera en .gitignore-fil.

```

> git ignore csharp,visualstudiocode,windows >> .gitignore
```

> &#x20;Använder du inte Visual Studio Code? Ersätt `visualstudiocode` med det utvecklingsverktyg du föredrar, t.ex. `visualstudio`.
>
> &#x20;Använder du inte Windows? Har du en Mac så ersätter du `windows` med `macos`. Använder du Linux så ersätter du `windows` med `linux`.

## Steg 6. Lägg till och spåra ändringar

```

> git add .
```

## Steg 7. Lagra ändringarna

```

>  git commit -m 'Adding .gitignore'
[master 91bc553] Adding .gitignore
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 .gitignore
```

Exempelutskrift av kommandot \`git commit\`.

## Steg 8. Skicka ändringarna till GitHub

```

> git push
Counting objects: 9, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (8/8), done.
Writing objects: 100% (9/9), 31.60 KiB | 1.75 MiB/s, done.
Total 9 (delta 1), reused 0 (delta 0)
remote: Resolving deltas: 100% (1/1), done.
To github.com:1dv024/example-username-examination-1.git
 * [new branch]      master -> master
```

Exempelutskrift av kommandot \`git push\`.

## Steg 9. Skapa konsolprojekt

```

> dotnet new console
The template "Console Application" was created successfully.

Processing post-creation actions...
Running 'dotnet restore' on C:\1dv024\example-username-examination-1\example-username-examination-1.csproj...
  Restoring packages for C:\1dv024\example-username-examination-1\example-username-examination-1.csproj...
  Generating MSBuild file C:\1dv024\example-username-examination-1\obj\example-username-examination-1.csproj.nuget.g.props.
  Generating MSBuild file C:\1dv024\example-username-examination-1\obj\example-username-examination-1.csproj.nuget.g.targets.
  Restore completed in 175,22 ms for C:\1dv024\example-username-examination-1\example-username-examination-1.csproj.

Restore succeeded.
```

Exempelutskrift av kommandot \`dotnet new console\`.

## 10. Spåra, skicka och lagra ändringarna

```

> git add .
> git commit -m 'Initializing a console application'
[master d96558f] Initializing a console application
 2 files changed, 20 insertions(+)
 create mode 100644 Program.cs
 create mode 100644 example-username-examination-1.csproj
> git push
Counting objects: 4, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (4/4), done.
Writing objects: 100% (4/4), 728 bytes | 728.00 KiB/s, done.
Total 4 (delta 0), reused 0 (delta 0)
To https://github.com/1dv024/example-username-examination-1.git
   2002324..d96558f  master -> master
```

Exempelutskrift av \`git\`-kommandon.

## Steg 11. Kontinuerligt arbetsflöde

### Steg 11.1

Hämta alla ändringar från ditt privata repo för examinationsuppgiften på GitHub.

Detta är mycket viktigt att du gör innan du påbörjar ett nytt arbetspass - i synnerhet om du kodar på flera olika enheter.

```

> git pull
Already up-to-date.
```

Exempelutskrift av kommandot \`git pull\`.

### Steg 11.2

Starta Visual Studio Code på din plattform och öppna katalogen (innefrån VS Code med **File - Open Folder...**) med examinationsuppgiften, `~/1dv024/username-examination-1/`.

### Steg 11.3

**KODA HÄR!**

Skriv inte så mycket kod åt gången, ju mindre dina "*commits*" är desto bättre, om det skulle bli något fel.

### Steg 11.4

Lägg till nya filer och ändringar du gjort.

```

> git add .
```

### Steg 11.5

Visa de ändringar som du kommer att skapa en "*commit*" för.

```

> git status
```

### Steg 11.6

Skapa en "*commit*" med ett meddelande som beskriver ändringen.

```

> git commit -m 'Add example functionality'
```

* Vill du skicka din ändring till ditt privata repo för examinationsuppgiften på GitHub? Gå då till steg 11.7.
* Vill du fortsätta koda? Gå till steg 11.3.

### Steg 11.7

Skicka dina ändringar till ditt privata repo för examinationsuppgiften på GitHub.

```

> git push
```

* Kodat färdigt för stunden? Klar med examinationsuppgiften? Du kan stänga av datorn, allt finns ju på GitHub!
* Lägga till kod för ny funktionalitet? Gå till steg 12.3.

## Steg 12. Inlämning

Lämna in uppgiften senast deadline (se respektive examinationsuppgift på kursens webbplats) genom att göra en "release" på GitHub. Ange taggen "v1.0" när du gör en "release".

### Steg 12.1

Gå till examinationsuppgiften repo på GitHub och klicka på fliken "0 releases".

![](https://github.com/coursepress/objektorienterad-programmering-1dv024/tree/dfd9bfed0cdee9463f99b11aefe1e064fad33f5d/examinationsuppgifter/om/praktisk-examinationsuppgift/bilder/0-releases.png)

### Steg 12.2

Klicka på "Create a new release".

![](https://github.com/coursepress/objektorienterad-programmering-1dv024/tree/dfd9bfed0cdee9463f99b11aefe1e064fad33f5d/examinationsuppgifter/om/praktisk-examinationsuppgift/bilder/create-a-new-release.png)

### Steg 12.3

Fyll i information om din "release" och publicera den.

![](https://github.com/coursepress/objektorienterad-programmering-1dv024/tree/dfd9bfed0cdee9463f99b11aefe1e064fad33f5d/examinationsuppgifter/om/praktisk-examinationsuppgift/bilder/publish-release.png)

Om du efter du publicerat en "release" vill göra förändringar så går det bra. När du gör en ny "release" döper du i så fall den till v1.1 och så vidare.
