NybörjareMjukvaruutveckling

Git

Git

Ett distribuerat versionshanteringssystem för att spåra kodändringar, samarbeta med team och hantera projekthistorik.

#versionshantering#collaboration#github#gitlab#source-code

Vad är Git?

Git är ett distribuerat versionshanteringssystem för att registrera kodändringar över tid. Med Git kan utvecklare spara historiken över sitt arbete, jobba med flera funktioner separat och samarbeta utan att ständigt skriva över varandras filer.

Git används vanligtvis för att:

  • Spåra kodändringar
  • Arbeta tillsammans med ett team
  • Gå tillbaka till en tidigare version vid problem
  • Testa nya funktioner i en separat gren

Git skapades av Linus Torvalds år 2005. Git är fortfarande det främsta verktyget för versionshantering i många mjukvaruprojekt.

Varför är Git viktigt?

Innan Git

Föreställ dig att du arbetar utan Git:

project/
├── app.js
├── app_backup.js
├── app_backup_final.js
├── app_backup_final_FINAL.js
├── app_backup_final_FINAL_v2.js
└── app_backup_THIS_ONE_USE_THIS.js

Problem:

  • Dubblettfiler överallt
  • Du vet inte vilka ändringar som gjorts
  • Svårt att samarbeta med teamet
  • Rädsla för att radera kod eftersom du inte kan gå tillbaka

Med Git

$ git log --oneline
a1b2c3d (HEAD -> main) Add user authentication
d4e5f6g Refactor database queries
g7h8i9j Initial commit

Fördelar:

  • Fullständig historik över alla ändringar
  • Vem som ändrat vad och när
  • Möjlighet att gå tillbaka till vilken version som helst
  • Teamsamarbete utan konflikter

Grundläggande Git-koncept

Repository (Repo)

Projektmappen som spåras av Git. Ett repository innehåller:

  • Källkod
  • Historik över alla ändringar
  • Grenar (branches) och taggar
  • Konfiguration
# Initiera ett nytt repository
git init

# Klona ett befintligt repository
git clone https://github.com/username/project.git

Commit

En ögonblicksbild av dina kodändringar. Som en "sparpunkt" i ett spel.

# Visa filstatus
git status

# Lägg till filer i staging
git add index.html
git add .  # Lägg till alla filer

# Checka in ändringarna
git commit -m "Add homepage design"

Branch

En separat utvecklingsgren. Som ett "parallellt universum" för din kod.

# Lista grenar
git branch

# Skapa en ny gren
git branch feature-login

# Byt till grenen
git checkout feature-login
# eller med Git 2.23+
git switch feature-login

# Skapa och byt samtidigt
git checkout -b feature-login

Merge

Slår ihop ändringar från en gren till en annan.

# Byt till målgrenen
git checkout main

# Slå ihop den andra grenen
git merge feature-login

Grundläggande Git-arbetsflöde

1. Grundinställning

# Konfigurera identitet
git config --global user.name "Ditt namn"
git config --global user.email "email@example.com"

# Visa konfigurationen
git config --list

2. Dagligt arbetsflöde

# 1. Kontrollera status
git status

# 2. Hämta de senaste ändringarna
git pull origin main

# 3. Skapa en funktionsgren
git checkout -b feature-new-button

# 4. Gör ändringar och lägg till dem
git add .

# 5. Checka in ändringarna
git commit -m "Add new button to homepage"

# 6. Pusha till fjärrarkivet (remote)
git push origin feature-new-button

3. Slå ihop med huvudgrenen

# Byt till main
git checkout main

# Hämta senaste ändringar
git pull origin main

# Slå ihop funktionsgrenen
git merge feature-new-button

# Pusha till fjärrarkivet
git push origin main

Viktiga Git-kommandon

Status och information

# Filstatus
git status

# Visa commit-historik
git log
git log --oneline
git log --graph --oneline --all

# Visa ändringar
git diff
git diff --staged

# Visa en specifik commit
git show a1b2c3d

Arbeta med ändringar

# Lägg till filer
git add file.txt
git add *.js
git add .

# Ta bort från staging
git reset file.txt

# Kasta ändringar
git checkout -- file.txt
git restore file.txt  # Git 2.23+

# Undanlägg ändringar (tillfällig sparning)
git stash
git stash list
git stash pop

Grenar

# Lista grenar
git branch
git branch -a  # Inkludera fjärrgrenar

# Skapa gren
git branch feature-name

# Byt gren
git switch feature-name

# Ta bort gren
git branch -d feature-name
git branch -D feature-name  # Tvinga borttagning

Fjärroperationer

# Lista fjärrarkiv
git remote -v

# Lägg till fjärrarkiv
git remote add origin https://github.com/user/repo.git

# Hämta ändringar (utan att slå ihop)
git fetch origin

# Hämta och slå ihop ändringar (fetch + merge)
git pull origin main

# Pusha ändringar
git push origin main
git push -u origin main  # Ställ in upstream

Ångra ändringar

# Ångra senaste commit (behåll ändringarna)
git reset --soft HEAD~1

# Ångra senaste commit (kasta ändringarna)
git reset --hard HEAD~1

# Återställ en commit (skapar en ny commit)
git revert a1b2c3d

# Ändra senaste commit
git commit --amend -m "New message"

Grenstrategier

Git Flow

En populär strategi för produktionsappar:

main (production)
├── develop (integration)
    ├── feature/login
    ├── feature/payment
    └── feature/dashboard

release/1.0.0
hotfix/critical-bug

GitHub Flow

En enklare strategi för kontinuerlig driftsättning (continuous deployment):

main (always deployable)
├── feature/user-auth
├── feature/api-endpoint
└── bugfix/login-error

.gitignore-filen

En fil för att exkludera filer/mappar från Git:

# Node.js
node_modules/
npm-debug.log
.env

# Python
__pycache__/
*.pyc
venv/

# IDE
.vscode/
.idea/
*.swp

# OS
.DS_Store
Thumbs.db

# Byggfiler
dist/
build/
*.log

Git med GitHub/GitLab

SSH-konfiguration

# Generera SSH-nyckel
ssh-keygen -t ed25519 -C "email@example.com"

# Kopiera publik nyckel
cat ~/.ssh/id_ed25519.pub

# Lägg till i GitHub-/GitLab-inställningarna
# Testa anslutningen
ssh -T git@github.com

Pull Requests / Merge Requests

Samarbetsflöde:

  1. Forka/klona repositoryt
  2. Skapa en gren för funktionen
  3. Checka in ändringar med beskrivande meddelanden
  4. Pusha till fjärrarkivet
  5. Skapa en PR/MR på GitHub/GitLab
  6. Kodgranskning från teamet
  7. Slå ihop (merge) efter godkännande

Bästa praxis för Git

1. Commit-meddelanden

Mindre bra:

git commit -m "fix"
git commit -m "update"
git commit -m "asdfasdf"

Bättre:

git commit -m "Fix login validation bug"
git commit -m "Add user profile endpoint"
git commit -m "Refactor database connection logic"

Bra format:

<type>: <subject>

<body>

<footer>

Exempel:

feat: Add user authentication

- Implement JWT token generation
- Add login/register endpoints
- Create middleware for auth check

Closes #123

Typer:

  • feat: Ny funktion
  • fix: Buggfix
  • docs: Dokumentation
  • style: Formatering, ingen kodändring
  • refactor: Kodomstrukturering
  • test: Lägg till tester
  • chore: Underhållsuppgifter

2. Checka in ofta, förbättra senare

# Checka in ofta under utveckling
git commit -m "WIP: Add user model"
git commit -m "WIP: Add validation"
git commit -m "WIP: Add tests"

# Slå ihop (squash) commits innan merge
git rebase -i HEAD~3

3. Checka aldrig in känslig data

Checka inte in:

  • API-nycklar
  • Lösenord
  • Databasuppgifter
  • Privata nycklar
  • .env-filer

Använd miljövariabler:

// config.js
module.exports = {
  apiKey: process.env.API_KEY,
  dbPassword: process.env.DB_PASSWORD
}

4. Hämta innan du pushar

# Hämta alltid först
git pull origin main

# Lös eventuella konflikter
# Pusha sedan
git push origin main

Hantera sammanslagningskonflikter

När Git inte kan slå ihop automatiskt:

$ git merge feature-branch
Auto-merging index.html
CONFLICT (content): Merge conflict in index.html
Automatic merge failed; fix conflicts and then commit the result.

Fil med konflikt:

<!DOCTYPE html>
<html>
<<<<<<< HEAD
  <title>Main Branch Title</title>
=======
  <title>Feature Branch Title</title>
>>>>>>> feature-branch
</html>

Lösning:

  1. Redigera filen, ta bort konfliktmarkörerna
  2. Behåll en version eller kombinera båda
  3. git add filen
  4. git commit för att slutföra sammanslagningen
# Efter att ha löst konflikten
git add index.html
git commit -m "Resolve merge conflict in index.html"

Git-alias (genvägar)

# Konfigurera alias
git config --global alias.co checkout
git config --global alias.br branch
git config --global alias.ci commit
git config --global alias.st status
git config --global alias.unstage 'reset HEAD --'
git config --global alias.last 'log -1 HEAD'
git config --global alias.visual 'log --graph --oneline --all'

# Användning
git co main
git br feature-new
git ci -m "message"
git st

Vanliga misstag och lösningar

1. Checkat in på fel gren

# Skapa en gren från nuvarande tillstånd
git branch correct-branch

# Återställ den nuvarande grenen
git reset --hard HEAD~1

# Byt till rätt gren
git checkout correct-branch

2. Behöver ändra senaste commit-meddelandet

git commit --amend -m "Correct message"

3. Råkat radera en fil

# Återställ från senaste commit
git checkout HEAD -- file.txt

4. Vill ångra alla lokala ändringar

# Kasta alla lokala ändringar
git reset --hard HEAD

# Rensa ospårade filer
git clean -fd

Git för team

Checklista för kodgranskning

  • Koden följer stilguiden
  • Tester finns med
  • Ingen känslig data har checkats in
  • Commit-meddelandena är tydliga
  • Dokumentationen är uppdaterad
  • Inga sammanslagningskonflikter

Skyddade grenar

På GitHub/GitLab kan du sätta regler för huvudgrenen:

  • Kräv granskning av pull requests
  • Kräv att statuskontroller godkänns
  • Kräv att grenar är uppdaterade
  • Ingen force push tillåten

Gittips för dig som utvecklare

1. Börja med ett eget projekt

# Skapa ett enkelt projekt
mkdir my-first-repo
cd my-first-repo
git init
echo "# My First Repo" > README.md
git add README.md
git commit -m "Initial commit"

Små projekt är faktiskt perfekta för att lära sig Git, eftersom du kan experimentera fritt utan att riskera att förstöra teamets arbete.

2. Öva via GitHub

  • Skapa ett gratis GitHub-konto
  • Klona eller forka ett open source-projekt
  • Testa att bidra med något litet, till exempel en dokumentationsfix
  • Använd publika repositories för att bygga upp din portfolio

3. Lär dig av verkliga scenarier

Prova scenarier som ofta uppstår i praktiken:

  • Skapa en ny gren
  • Lösa en sammanslagningskonflikt
  • Testa merge och rebase
  • Återställa felaktiga ändringar

4. Använd ett GUI om det underlättar

Om kommandoraden känns tung i början kan GUI-verktyg hjälpa dig att förstå Gits arbetsflöde:

  • GitHub Desktop - Enkelt och nybörjarvänligt
  • SourceTree - Fler funktioner
  • GitKraken - Tydlig visualisering
  • VS Code - Har inbyggd Git-integration

Git med smbCloud

smbCloud integreras med Git för automatisk driftsättning:

# Konfigurera fjärrarkiv
git remote add smb https://git.smbcloud.xyz/yourapp.git

# Driftsätt med git push
git push smb main

# smbCloud gör automatiskt följande:
# Hämtar senaste koden
# Installerar beroenden
# Kör tester
# Bygger applikationen
# Driftsätter till produktion

Resurser för att lära dig mer

Interaktiva handledningar

  • Learn Git Branching - learngitbranching.js.org
  • GitHub Skills - skills.github.com

Fusklappar

  • GitHub Git Cheat Sheet - education.github.com/git-cheat-sheet-education.pdf
  • Atlassian Git Cheat Sheet - atlassian.com/git/tutorials/atlassian-git-cheatsheet

Böcker

  • Pro Git (Gratis) - git-scm.com/book
  • Git Pocket Guide - O'Reilly

Sammanfattning

Git är grunden i mångas dagliga utvecklingsarbete. Med Git kan du spåra ändringar, arbeta säkrare och samarbeta utan att behöva förlita dig på förvirrande manuella filkopior.

Nästa steg:

  1. Installera Git på din dator
  2. Skapa ett GitHub-konto
  3. Initiera Git i ett eget projekt
  4. Öva på commit, gren och merge
  5. Testa att bidra med något litet till open source

När grunderna känns bekväma blir mer avancerade funktioner som rebase, cherry-pick och CI/CD-arbetsflöden mycket lättare att förstå.

Relaterade termer

Kom igång

Redo att bygga med smbCloud?

Distribuera Node.js, Swift och Ruby med ett enda kommando.

Kom igång med smbCloud →

Senast uppdaterad: 15 januari 2024