> For the complete documentation index, see [llms.txt](https://coursepress.gitbook.io/1dv021/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://coursepress.gitbook.io/1dv021/guider/arbetsgang-med-en-ovningsuppgift.md).

# Arbetsgång med en övningsuppgift

Här hittar du anvisningar som visar dig steg för steg de moment du gör för att arbeta med en övningsuppgift.

{% hint style="danger" %}
För att kunna följa denna guide behöver du ha följt guiden ["Så kommer du igång med ditt repo för övningsuppgifterna"](/1dv021/guider/sa-kommer-du-igang-med-ditt-repo-for-ovningsuppgifterna.md).
{% endhint %}

{% hint style="warning" %}
**OBS!** Denna guide använder övningsuppgiften "Hello, World!" som exempel. Arbetar du med en annan övningsuppgift så får du byta ut alla förekomster av `hello-world` till det som gäller för den övningsuppgiften.
{% endhint %}

## Steg 1. Öppna ett terminalfönster

Öppna ett terminalfönster (Bash).

{% tabs %}
{% tab title="Windows" %}
Bash installerades när du installerade *Git*. Sök efter och välj *Git Bash*.
{% endtab %}

{% tab title="macOS" %}
Bash är en del av din plattform från början. Sök efter och välj *Terminal*, som är applikationen du ska använda.
{% endtab %}

{% tab title="Linux" %}
Bash är en del av din plattform från början. Sök efter och välj *Terminal*, som är applikationen du ska använda.
{% endtab %}
{% endtabs %}

## Steg 2. Byt till katalogen för dina övningsuppgifter

Se till att du befinner dig i katalogen för dina övningsuppgifter på din dator, `1dv021/example-username-exercises`, genom att använda kommandot `cd` ("*change directory*").

```bash
cd 1dv021/example-username-exercises
```

{% hint style="danger" %}
***OBS!***  Ersätt `example-username` i `example-username-exercises` med ditt användarnamn du fått av universitetet.
{% endhint %}

## Steg 3. Lägg till ett alias för källan till övningsuppgiften

```bash
git remote add simple-addition https://github.com/1dv021/exercise-simple-addition.git
```

## Steg 4. Lägg till övningsuppgiften

```bash
git subtree add --prefix=simple-addition --squash simple-addition master
```

Exempelutskrift:

```
git fetch simple-addition master
warning: no common commits
remote: Counting objects: 9, done.
remote: Compressing objects: 100% (7/7), done.
remote: Total 9 (delta 0), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (9/9), done.
From https://github.com/1dv021/exercise-simple-addition
 * branch            master     -> FETCH_HEAD
 * [new branch]      master     -> simple-addition/master
Added dir 'simple-addition'
```

{% hint style="danger" %}

#### Möts du av felmeddelandet *Repository not found*?

Visas ett felmeddelande som

```
remote: Repository not found.
fatal: repository '......' not found.
```

så har du troligtvis skrivit något tecken fel i Steg 3. För att åtgärda detta så använder du följande kommando:

```bash
git remote set-url simple-addition https://github.com/1dv021/exercise-simple-addition.git
```

{% endhint %}

{% hint style="danger" %}

#### Möts du av felmeddelandet *Working tree has modifications. Cannot add*?

Visas ett felmeddelande som

```
Working tree has modifications. Cannot add.
```

så har du troligtvis ändringar som du inte gjort en *commit* av.  Se till att lägga till alla ändringar, skapa en *commit* och gör en *push*.

```
git add .
git commit -m 'Saving changes'
git push
```

{% endhint %}

## Steg 5. Byt till den skapade katalogen

```bash
cd simple-addition
```

## Steg 6. Skapa en .gitignore-fil

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

{% tabs %}
{% tab title="Windows" %}

```bash
git ignore node,visualstudiocode,windows >> .gitignore
```

{% endtab %}

{% tab title="macOS" %}

```bash
git ignore node,visualstudiocode,macos >> .gitignore
```

{% endtab %}

{% tab title="Linux" %}

```bash
git ignore node,visualstudiocode,linux >> .gitignore
```

{% endtab %}
{% endtabs %}

{% hint style="warning" %}
Använder du inte Visual Studio Code? Ersätt `visualstudiocode` med det utvecklingsverktyg du föredrar, t.ex. `sublimetext` eller `webstorm`. Föredrar du Atom? Atom behöver inga inställningar i .gitignore-filen varför du i så fall inte behöver ange något utvecklingsverktyg.
{% endhint %}

## Steg 7. Lägg till och spåra den nya filen

```bash
git add .
```

## Steg 8. Lagra ändringarna

```bash
git commit -m 'Adding .gitignore'
```

Exempelutskrift:

```
[master 71d7ee9] Adding .gitignore
 1 file changed, 93 insertions(+)
 create mode 100644 simple-addition/.gitignore
```

## Steg 9. Skicka ändringarna till GitHub

```bash
git push
```

Exempelutskrift:

```
Counting objects: 14, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (12/12), done.
Writing objects: 100% (14/14), 3.11 KiB | 0 bytes/s, done.
Total 14 (delta 2), reused 0 (delta 0)
remote: Resolving deltas: 100% (2/2), done.
To https://github.com/1dv021/example-username-exercises.git
   1ef2f38..71d7ee9  master -> master
```

## Steg 10. Installera paket

Innan du kan köra applikationen, eller dess test, måste du exekvera kommandot `npm install` i terminalfönstret för att installera de paket applikationen är beroende av.

```bash
npm install
```

## Steg 11. Kontinuerligt arbetsflöde

### Steg 11.1

Hämta alla ändringar från ditt privata repo för övningsuppgifter 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.

```bash
git pull
```

Exempelutskrift:

```
Already up-to-date.
```

### Steg 11.2

Starta Visual Studio Code på din plattform och öppna katalogen (innefrån VS Code med **File - Open Folder...**) med övningsuppgiften, `~/1dv021/example-username-exercises/simple-addition/`.

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

```bash
git add .
```

### Steg 11.5

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

```bash
git status
```

Exempelutskrift:

```
On branch master
Your branch is up-to-date with 'origin/master'.
Changes to be committed:
  (use "git reset HEAD ..." to unstage)

        modified:   app.js
        modified:   src/calc.js
```

### Steg 11.6

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

```bash
git commit -m 'Adding example functionality'
```

Exempelutskrift:

```
[master 31e85a8] Adding example functionality
 2 files changed, 3 insertions(+), 3 deletions(-)
```

{% hint style="warning" %}
Vill du skicka din ändring till ditt privata repo för övningsuppgifter på GitHub? Gå då till steg 11.7.
{% endhint %}

{% hint style="warning" %}
Vill du fortsätta koda? Gå till steg 11.3.
{% endhint %}

### Steg 11.7

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

```bash
git push
```

Exempelutskrift:

```
Counting objects: 6, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (5/5), done.
Writing objects: 100% (6/6), 566 bytes | 0 bytes/s, done.
Total 6 (delta 4), reused 0 (delta 0)
remote: Resolving deltas: 100% (4/4), completed with 4 local objects.
To https://github.com/1dv021/example-username-exercises.git
   71d7ee9..31e85a8  master -> master
```

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