Git och Bash

Inledning

Bash är en kommandotolk som i detta sammanhang kan användas vid handhavande med Git. Det finns en uppsjö av möjligheter med Git men några av de viktigaste ges av Git-processens översiktsbild.

Installation

Git med tillhörande kommandotolk kan hämtas för installation till Windows-system från många ställen. https://git-for-windows.github.io/ är ett.

Git-bash-kommandon

Skapa ett nytt Repository

Skapa en ny mapp, öppna den och skapa ett nytt GIT Repository med

$ > git init

Checka ut ett Repository

Skapa en arbetskopia av ett lokalt Repository genom att exekvera kommandot

$ > git clone /path/to/repository

Checka ut en arbetskopia från en remote server:

$ > git clone username@host:/path/to/repository

[TOP]

Workflow

På lokal nivå finns tre “träd” som hanteras av GIT

  1. Det första är Working Directory som innehåller aktuella filer
  2. Det andra är Index med Staging
  3. Det tredje är HEAD-revisionen som pekar på senast gjorda Commit

Workflow GIT

Lägg till & gör Commit

Man lägger till ändringar till Index genom

$ > git add <filename>
$ > git add *

Det här är första steget i basic git workflow. För att göra Commit används

$ > git commit -m "Commit message"

Nu är det det gjort Commit på filen till HEAD-revisionen men än den finns inte på servern.

[TOP]

Pusha ändringar

När man har gjort Commit av ändringarna till den lokala HEAD-revisionen behöver man göra Push för att de ska hamna i remote Repository:

$ > git push origin master

Kommentar: “Master” kan ändras till vilken Branch som helst.
Om man inte utgått från ett klonat Reopsitory, och vill lägga till det till en remote server, läggs det till i efterhand med kommandot

$ > git remote add origin <server>

Efter detta kan man pusha upp ändringar och revisioner.

[TOP]

branching

När man utvecklar olika komponenter i en applikation är det mycket lämpligt att isolera komponenten i utvecklingsfas från resten av utvecklingsprogressionen till en dedikerad Branch. MASTER är default Branch när man skapar sitt Repository från början och bör inte användas till att checka in programdelar som är ofärdiga.

Skapa en ny Branch ”feature_x” och switcha till den

$ > git checkout -b feature_x

Switcha tillbaka till master

$ > git checkout master

Tabort Branch

$ > git branch -d feature_x

en Branch blir inte åtkomlig för andra förrän den har blivit Pushad

$ > git push origin <branch>

[TOP]

Uppdatera (Pull) & Merge

För att uppdatera lokalt Repository till senast gjorda (remote) Commit, exekvera

$ > git pull

i Working Directory för att hämta in från Remote Directory och sammanfoga med lokal Branch

För att göra Merge in i en annan Branch, annan än den den som för tillfället är den aktuella (MASTER ?), använd

$ > git merge <branch>

I båda fallen försöker GIT göra en automatisk sammanfogning. Olyckligtvis är detta inte alltid möjligt eftersom sammanfogningen resulterar i konflikter. För att lösa problemet måste man manuellt editera filerna. När ändringen är klar markeras filerna som sammanfogade med

$ > git add <filename>

Innan ändringarna sammanfogas kan man göra en förhandskoll på dem med

$ > git diff <source_branch> <target_branch>

[TOP]

Tagga

Det rekommenderas att skapa taggar för varje mjukvarurelease (detta är samma koncept som även finns i SVN). Såhär kan t ex taggen 1.0.0 skapas:

$ > git tag 1.0.0 1b2e1d63ff

1b2e1d63ff representerar de tio första tecknena i ID den Commit som ska få en Tag. ID kan erhållas genom att titta på loggen (se 2.3.4.1 nedan).

log

I den enklaste formen kan man läsa av en history log för sitt Repo med kommandot

$ > git log

Det är givetvis fullt möjligt att lägga till fler parametrar för att anpassa loggningsutskriften. Såhär kan man se Commits från en given utvecklare:

$ > git log --author=bob

En annan möjlighet är att komprimera utskriften så att varje loggningsevent hamnar på endast en rad:

$ > git log --pretty=oneline

Det är också möjligt att se en ASCII-trädrepresentation av alla Braches pyntat med utskrivna namn på alla taggar:

$ > git log --graph --oneline --decorate --all

Begränsa utskriften till de filer som har ändrats

$ > git log --name-status

Det här är endast några få av alla möjliga parametrar. För att se tillgängliga parametrar, se:

$ > git log --help

[TOP]

Ångra/ersätt lokala ändringar

Om man har gjort en tabbe kan man återställa lokala ändringar genom kommandot:

$ > git checkout -- <filename>

Detta skriver över ändringar som man har gjort lokalt med senaste HEAD-revisionen. Ändringar som redan indexerats, såväl som nya filer, kommer att behållas.
Om syftet är att göra en fullständig återställning (och göra sig av med alla lokala ändringar), hämta senaste ändringar från servern och peka den lokala master branchen på den såhär:

$ > git fetch origin
$ > git reset --hard origin/master

[TOP]

Användbara tips

Inbygda funktioner i GIT GUI

gitk – är en GIT Repository browser som kan visa ändringar/editeringar i olika Commits (exempelvis en ändringsgraf som visar information relaterad till en given Commit, samt filerna som ingår i aktuell revision).
Använd en färggrann output

$ > git config color.ui true

Visa loggning med en rad per commit

$ > git config format.pretty oneline

Använd interaktiva tillägg

$ > git add -i

[TOP]

Annonser