# Git/markdown skola med William
***- Git i terminalen, windows/mac/linux.***
***- Vi ska även kolla lite på markdown***
---
# Git basics
- Version Control
- Spårbarhet
- Inget mer oroande över "vad fan var det jag ändrade sist?"
---
# Basic kommandon för att enkelt starta igång projekt
---
```bash=
git config --global user.name "username"
```
Sätter ert användarnamn globalt, alltså för alla repos etc.
```bash=
git config --global user.email "email@example.com"
```
Sätt er commit mail adress.
---
# Ansluta till github
---
- Mac/linux
```bash=
ls -al ~/.ssh
```
Kolla om det finns någon av dessa: id_rsa.pub, id_ecdsa.pub, id_ed25519.pub
---
I windows ligger dessa under:
``` bash=
C:\Users\{dittanvändarnamn}\.ssh\id_rsa.pub
```
Har ni ingen SSH key kan ni läsa på [Github Docs](https://docs.github.com/en/github/authenticating-to-github/connecting-to-github-with-ssh) hur man gör.
Ni måste även koppla er nyckel till ert github konto. På github: Settings -> SSH and GPG keys -> New SSH key.
---

---
I din repo hittar du din ssh anslutning när du klickar på code knappen.
```bash=
#SSH variant
git remote add origin git@github.com:Krut-Oskar/git_test.git
#HTTPS variant
git remote add origin https://github.com/Krut-Oskar/git_test.git
```
Nu är origin namnet på din remote repo.
Du kan nu pusha saker från din lokala repo till din remote(github) direkt från terminalen.
---
# VAD FAN ÄR ETT LOCAL REPO DÅ?
---
## Jo det ska jag berätta. SKOJA vet typ inte men kan förklara lite hur det funkar.
---
- Först måste ni ha en liten mapp för ert projekt.
```bash=
#Basically samma för alla OS.
cd /home/user/dev
mkdir mittnyaprojekt
cd mittnyaprojekt
```
---
# Starta git
---
- Initiera git i den här mappen
```bash=
git init
```
---
- skriv `git status`
- Nu borde det se ut så här ish.

---
- Nu kan ni slänga in lite filer och skriva `git status` igen och det borde se ut så här.

---
- Dett betyder att filerna inte är spåras av git. Men git ser att de finns i mappen.
- För att börja spåra dessa filer med git måste de läggas till. Det gör vi med `git add {filnamn}`.
---
- Här har jag endast börjat spåra README.md men inte python filen. Alla ändringar jag gör till den filen kommer nu sparas av git.

---
- För att commita den här ändringen så att git sparar ner den använder jag `git commit -m "mitt meddelande"`

---
## Nu har jag en local repository
- Att "committa" är som att trycka "Spara som.." i Word.
- Comitten sparar de ändringar som ni gjort till alla filer som är addade och spåras av git.
- Om ni gör det ofta blir det lätt att gå tillbaka och se vad ni gjort om ni får errors.
- Filen som är comittad försvinner även från `git status` om den inte ändras, så fort den ändras kommer det synas
---

- Nu är ni redo för att pusha till github!
---
## Pusha till github
- Nu kan ni lägga till er remote repository som jag visade i början.
- För att skicka det som är sparat och ändrings historiken till github använder vi `git push` kommandot.
---
```bash=
git push origin main. #origin är namnet på remote och main är namnet på den branch vi pushar till.
```
- Nu borde dina filer ha skickats till ditt github repo.
### Så enkelt var det
---
# Branches
---
- Fungerar som nya kopior av koden där ni kan utveckla nya features/funktioner utan att förstöra koden som ligger i main.
- När ni har testat så att allt fungerar och inget gått sönder kan ni merga/sammanfoga så att den nya funktioner hamnar i main.
---
```mermaid
graph TD;
A[main]-->B[G delen];
A-->C[VG delen];
B-->E[hej jag heter william]
E-->C
```
---

---
## Git pull/clone/fetch
---
### Clone
`git clone {url}`
Kopierar en repository till den directory du är på din dator. Används för att ladda ner kod från github t.ex.
---
### Fetch
`git fetch {url}`
Laddar ner ny data från specifierad repository men ändrar inget i din lokala
repository.
---
### Pull
`git pull {url}`
Laddar ner ny data från specifierad repository ***och mergar den med ditt nuvarande lokala repository.*** Så var försiktiga med detta bör endast användas med en "tom" lokal repository. ***Alla sparade ändringar som endast finns lokalt kommer att skrivas över.***
---
## Extra
---
### Git log
`git log`
Används för att se commit historik.
---
### Git ammend
`git commit --ammend`
Används för att t.ex. lägga till en till fil i en commit om man glömt en. Den ersätter din tidigare commit så du kommer bara se en commit i historiken.
---
### Git restore
```bash=
git restore {filename}
git restore --staged {filename}
```
Används för att återställa en fil till hur den såg ut i den senaste commiten (eller clonen). Om du har råkat adda en fil som du inte ville adda kan du med flaggan --staged ta bort den så att git slutar spåra den.
---
### Läs mer
[Gits egen hemsida!](https://git-scm.com/doc)
[Github docs.](https://docs.github.com/en)
---
# QUIZ
---
# 1. Vilket kommando använder jag för att skicka mina filer till en remote repository?
---
```bash=
git push origin main
```
---
# 2. Vilket kommando använder jag för att börja spåra filer?
---
```bash=
git add {filename}
```
---
# 3. Varför är det viktigt att committa och skriva commit-meddelanden?
---
>För att kunna se förändringar över tid och veta när jag gjorde vad och kunna gå tillbaka till en tidigare sparad version om något pajar.
---
# 4. Varför göra allt detta via terminalen när jag kan använda GitHub-Desktop?
---
>För att du ser ut som en hacker såklart.
---
# 5. Vad är det för skillnad på `git pull` och `git fetch`?
---
>Pull sammanfogar med din lokala repository och skriver över dina lokala commits. Fetch uppdaterar bara filerna i ditt lokala repository men skriver inte över ändringar du gjort.
{"metaMigratedAt":"2023-06-15T22:44:15.064Z","metaMigratedFrom":"Content","title":"Git/markdown skola med William","breaks":true,"contributors":"[{\"id\":\"d438c954-2614-4748-a960-b249ee09dfcd\",\"add\":6195,\"del\":163}]"}