Kom igång med Git
Git har på kort tid blivit det mest populära verktyget för versionshantering. Men vad är då Git och hur fungerar det? Det ska vi reda ut här!
Installera och ställa in Git
Använder du någon Debianbaserad distrubition installerar du enklast Git med
kommandot apt-get install git
. Använder du CentOS eller något annan Red
Hat-baserad dist använder du kommandot yum install git
. Glöm inte bort att du
måste vara root för att kunna installera programmet.
Använder du Windows måste du själva ladda hem programmet från https://git-scm.com/download/win och installera det manuellt.
Några inställningar
När vi väl installerat Git är det dags att ställa in några viktiga inställningar. Dessa är främst ditt namn och din e-postadress. Dessa används för att identifiera dig när du bidrar till koden i en “Git-repo”, alltså ett projekt som använder Git.
Så här stället du in ditt namn och e-postadress
$> git config --global user.name "Kalle Anka"
$> git config --global user.email "kalle@cyberinfo.se"
git config
används för att göra diverse inställningar, både globalt med
--global
och icke globalt. Globala inställningar innebär att inställningar
sparas för den aktuella användaren, oavsett projekt. Man kan även ställa in sitt
namn och e-postadress för ett specifikt projekt ifall det skiljer sig från det
globala.
Om du vill ställa in ditt namn och din e-postadress för en specifik “Git-repo”,
alltså projekt, ändrar du katalog så att du står i den aktuella katalogen och
använder samma kommando som ovan, fast du utelämnar --global
.
Skapa din första Git-repo
Att skapa din första Git-repo kan verka komplicerat i början, så vi tar det steg
för steg. Antingen skapar du en tom katalog om du vill påbörja ett helt nytt
projekt, annars går det lika bra med en katalog med befintlig kod i. Observera
dock att alla filer i katalogen kommer att finnas med i Git-repon ifall du
använder argumentet -A
som i nedanstående exempel.
Här skapar vi en tom katalog med en testfil i.
$> mkdir test
$> cd test
$> echo "Testfil nummer 1" > test.txt
$> git init
Initialized empty Git repository in /home/jake/test/.git/
All information om vår nya Gir repo finns nu i katalogen .git som finns inuti vår Git-repo. Här kommer alla våra commits med mera att sparas.
Lägga till filer och commita dem
Nu har det blivit dags att lägga till några filer i vår Git-repo. Just nu finns
faktiska inga filer i Git. Vi kan börja med att titta hur det ser ut just nu med
kommandot git status
.
$> git status
On branch master
Initial commit
Untracked files:
(use "git add <file>..." to include in what will be committed)
test.txt
nothing added to commit but untracked files present (use "git add" to track)
Här ser vi att vår nya fil test.txt som vi skapade är “Untracked”, den tas alltså inte om hand av Git ännu. På sista raden ser vi också en sammanställning av hur Git-repon ser ut just nu, det vill säga “nothing added to commit, but untracked files present”.
För att lägga till filer från katalog till Git använder vi kommandot git
add
. Vi kan antingen lägga till enskilda filer, till exempel git add test.txt
för att lägga till endast filen test.txt. Men mest troligen vill man lägga
till samtliga filera i en katalog, istället för en fil i taget. Detta gör vi med
git add -A
, där -A
står för “All files”.
$> git add -A
Nu är filen tillagd, men ännu inte “commitad”. Om vi kollar statusen igen med
git status
så kommer vi att se just detta.
$> git status
On branch master
Initial commit
Changes to be committed:
(use "git rm --cached <file>..." to unstage)
new file: test.txt
Nu är filen test.txt i ett läge som kallas för “staged”. Vi får till och med hjälp från Git med hur vi kan “unstage” en fil.
Men nu vill vi gå vidare med att faktiskt commita filerna. Detta gör vi med git
commit
.
$> git commit -m "Ett kort beskrivande meddelande vad commiten handlar om"
[master] (root-commit) dc01a72] Ett kort beskrivande meddelande vad commiten
handlar om
1 file changed, 1 insertion(+)
create mode 100644 test.txt
Om vi nu åter kollar läget med git status
kommer vi få bekräftelse att allting
är commitat och klart.
$> git status
On branch master
nothing to commit, working tree clean
Allt är nu således frid och fröjd. Git tar nu hand om versionerna av filen åt
oss. Vi kan nu se loggen för denna Git-repo med git log
.
$> git log
commit dc01a7287d9d512743fead2a6ecacb5503717e32
Author: Jack-Benny Persson <jack-benny@cyberinfo.se>
Date: Wed May 31 04:06:27 2017 +0200
Ett kort beskrivande meddelande vad commiten handlar om
Här finns än så länge bara en enda commit, den vi precis skapade. Nu lägger vi till lite mer text i filen och skapar två nya commits.
$> echo "Radnummer två" >> test.txt
$> git add -A
$> git commit -m "Lagt till en andra rad"
[master 09db2d0] Lagt till en andra rad
1 file changed, 1 insertion(+)
$> echo "Tredje raden i filen" >> test.txt
$> git add -A
$> git commit -m "Lagt till ytterligare en rad"
[master 396878a] Lagt till ytterligare en rad
1 file changed, 1 insertion(+)
Om vi nu tittar i loggen för vårt projekt ser vi att vi har tre stycken commits.
$> git log
commit 396878a12c9cd592a8ed1af1f424aeb1fe432fe4
Author: Jack-Benny Persson <jack-benny@cyberinfo.se>
Date: Wed Jun 7 05:18:56 2017 +0200
Lagt till ytterligare en rad
commit 09db2d02a41ce4f28d1a1df2e1b958cd31cbd464
Author: Jack-Benny Persson <jack-benny@cyberinfo.se>
Date: Wed Jun 7 05:18:12 2017 +0200
Lagt till en andra rad
commit dc01a7287d9d512743fead2a6ecacb5503717e32
Author: Jack-Benny Persson <jack-benny@cyberinfo.se>
Date: Wed May 31 04:06:27 2017 +0200
Ett kort beskrivande meddelande vad commiten handlar om
Checka ut commits och göra ändringar
Låt oss nu anta att jag vill återgå till när jag endast hade två rader i filen för att lägga till en annan tredje rad. Om vi tittar i loggen ser vi att commit 09db2d02a41ce4f28d1a1df2e1b958cd31cbd464 är den commit som hade två rader i filen. Nu behöver vi göra en checkout av den commiten. För att göra en ändring i Git checkar man alltid ut den commit man vill ändra i i en ny gren. Här ska vi alltså göra två steg i ett, skapa en ny gren, och checka ut den commit som börjar med 09db2d (man behöver bara ange de första tecknen).
$> git checkout -b buggfix 09db2d
Switched to a new branch 'buggfix'
Om vi kör en git status
så kommer vi att se att vi är i grenen buggfix. Om
vi titta på innehållet i test.txt ser vi att vi återgått till endast två
rader.
$> cat test.txt
Testfil nummer 1
Radnummer två
Vi lägger nu till en ny tredje rad och skapar en ny commit.
$> echo "Den nya fina tredje raden" >> test.txt
Och om vi tar en titt på vilka skillnader det nu finns så kan vi skriva git
diff
, vilket ger följande resultat:
diff --git a/test.txt b/test.txt
index e26e1f6..c43b71b 100644
--- a/test.txt
+++ b/test.txt
@@ -1,2 +1,3 @@
Testfil nummer 1
Radnummer två
+Den nya fina tredje raden
Nu är det dags att lägga till och commita den nya ändringen.
$> git add -A
$> git commit -m "Lagt till en ny tredje rad"
[buggfix 6d942a4] Lagt till en ny tredje rad
1 file changed, 1 insertion(+)
De ändringar vi nu gjort har vi gjort en egen gren som heter buggfix. Vi ska
nu återgå till huvudgrenen, master. Detta gör vi med checkout
.
$> git checkout master
Switched to branch 'master'
Om vi nu tittar i filen test.txt ser vi att den gamla raden fortfarnade finns här. Detta är ju en annan gren.
$> cat test.txt
Testfil nummer 1
Radnummer två
Tredje raden i filen
Nu ska vi göra en merge för att slå samma vår nya buggfix-gren med huvudgrenen. Detta gör vi att för att vi vill behålla ändringen vi gjorde i huvudgrenen av projektet.
$> git merge buggfix
Auto-merging test.txt
CONFLICT (content): Merge conflict in test.txt
Automatic merge failed; fix conflicts and then commit the result
Nu misslyckades Git att göra en automatisk merge eftersom vi ändrat på samma
rad i samma fil. Nu behöver vi öppna vår editor, exempelvis vi
och lösa
konflikten. Innehållet i filen ser nu ut som följande:
Testfil nummer 1
Radnummer två
<<<<<<< HEAD
Tredje raden i filen
=======
Den nya fina tredje raden
>>>>>>> buggfix
Nu rensar vi upp HEAD och tar bort markeringarna så att filen ser ut så som vill ha den.
Testfil nummer 1
Radnummer två
Den nya fina tredje raden
Nu kan vi göra en ny commit och därefter radera den tillfälliga buggfix-grenen eftersom vi nu är klara.
$> git add -A
$> git commit -m "Klar med buggfixen"
[master ff2533f] Klar med buggfixen
$> git branch -d buggfix
Deleted branch buggfix (was 6d942a4).
Om vi nu tittar i loggen kan vi se alla commits, inklusive den commit vars innehåll vi ändrade (“Lagt till ytterliggare en rad”).
$> git log
commit ff2533f487eb03c366eb51c62276b9423c8d94a3
Merge: 396878a 6d942a4
Author: Jack-Benny Persson <jack-benny@cyberinfo.se>
Date: Wed Jun 7 05:45:01 2017 +0200
Klar med buggfixen
commit 6d942a429b6a1cf30a6561f30a0774e9da19d61c
Author: Jack-Benny Persson <jack-benny@cyberinfo.se>
Date: Wed Jun 7 05:36:05 2017 +0200
Lagt till en ny tredje rad
commit 396878a12c9cd592a8ed1af1f424aeb1fe432fe4
Author: Jack-Benny Persson <jack-benny@cyberinfo.se>
Date: Wed Jun 7 05:18:56 2017 +0200
Lagt till ytterligare en rad
commit 09db2d02a41ce4f28d1a1df2e1b958cd31cbd464
Author: Jack-Benny Persson <jack-benny@cyberinfo.se>
Date: Wed Jun 7 05:18:12 2017 +0200
Lagt till en andra rad
commit dc01a7287d9d512743fead2a6ecacb5503717e32
Author: Jack-Benny Persson <jack-benny@cyberinfo.se>
Date: Wed May 31 04:06:27 2017 +0200
Ett kort beskrivande meddelande vad commiten handlar om
Detta betyder alltså att historiken fortfarande finns kvar i Git, så vi kan fortfarande gå tillbaks och se hur filen såg ut just då.
Vi tittar först hur filen ser ut nu med cat test.txt
och checkar därefter ut
commit 396878a för att jämföra. Därefter återgår vi till där vi är i projektet
just nu.
$> cat test.txt
Testfil nummer 1
Radnummer två
Den nya fina tredje raden
$> git checkout 396878a
Note: checking out '396878a'.
You are in 'detached HEAD' state. You can look around, make experimental
changes and commit them, and you can discard any commits you make in this
state without impacting any branches by performing another checkout.
If you want to create a new branch to retain commits you create, you may
do so (now or later) by using -b with the checkout command again. Example:
git checkout -b <new-branch-name>
HEAD is now at 396878a... Lagt till ytterligare en rad
$> cat test.txt
Testfil nummer 1
Radnummer två
Tredje raden i filen
$> git checkout master
Previous HEAD position was 396878a... Lagt till ytterligare en rad
Switched to branch 'master'
$> cat test.txt
Testfil nummer 1
Radnummer två
Den nya fina tredje raden
Avslutning
Du har nu lärt dig allt det grundläggande du behöver kunna för att arbeta med Git. Det finns en hel del kvar att lära sig om Git, men just detta vi precis har gått igenom ligger till grund för allt i Git. Att kunna skapa commits, checka ut commits och grenar, göra ändringar, mergea, eller slå samman grenar. Detta är grunden för allt i Git.
Nyhetsbrev
Nyhetsuppdateringar från tidningen direkt till din inkorg, helt kostnadsfritt. Avsluta när du vill.
Relaterade artiklar
Senaste nyheterna och inläggen
-
Avlyssna trafik på servern med Wireshark och TShark
Wireshark är ett ovärderligt verktyg för att felsöka nätverkskonfigurationer, applikationer, API:er, demoner och mycket annat. I kombination med
tshark
kan vi dessutom avlyssna trafiken på en server i realtid. -
Mysig stämning på sommarens första demoparty
I helgen var det Reunion 2024 i Kvidinge Folkets hus, sommarens första skånska demoparty. Partyt organiserades av Jesper “Skuggan” Klingvall. På plats fanns ett 30-tal besökare.
-
Sommarens skånska demopartyn
Årets sommar bjuder på två skånska demopartyn. Först ut är Reunion i Kvidinge den 28–30 juni. Därefter är det Pågadata i Örtofta den 9–11 augusti.
-
Riskerna med BankID som ingen pratar om
BankID är ett säkert och smidigt sätt att identifiera sig online. Men i takt med dess ökade popularitet och användning har det blivit en svag länk – en single point of failure – på mer än ett sätt.
-
Polisernas fängelsedomar står fast
Efter tre år är målet mot de två poliser som olovligen tog sig in i en berusad mans bostad i Landskrona och misshandlade honom klart. Högsta domstolen beslutade den sjätte mars att avvisa överklagan. Fängelsedomarna för poliserna står därmed fast.
Utvalda artiklar
-
Mysig stämning på sommarens första demoparty
I helgen var det Reunion 2024 i Kvidinge Folkets hus, sommarens första skånska demoparty. Partyt organiserades av Jesper “Skuggan” Klingvall. På plats fanns ett 30-tal besökare.
-
Datorparty i Landskrona
I helgen höll Syntax Society sitt årliga sommarparty. Platsen var en källarlokal i Landskrona där ett femtontal personer medverkade.
-
Det första Pågadata har ägt rum
I helgen ägde det första Pågadata rum – uppföljaren till Gubbdata. Platsen var Folkets Hus i Kvidinge. Organisatör av partyt var Johan “z-nexx” Osvaldsson med hjälp från Jesper “Skuggan” Klingvall. Partyt hade över 100 anmälda deltagare.
-
Även hovrätten fäller poliserna för att ha satt dit oskyldig
Hovrätten fastställer straffet för de två poliser som förra året dömdes till vardera ett års fängelse av Lunds tingsrätt för att ha misshandlat och satt dit en oskyldig man. De båda poliserna ska även betala skadestånd till mannen.
-
Retroloppis i Påarp
Idag var det retroloppis hos Andreas Nilsson i Påarp. På baksidan av huset fanns hundratals spel uppradade på långa bord. Trots friska vindar och sval temperatur var loppisen välbesökt.
CyberInfo Sverige är ett it- och medieföretag i nordvästra Skåne som tillhandahåller böcker, utbildningar, nyheter och konsulttjänster inom Linux, säkerhet och programmering.
CyberInfo Sverige är godkänd för F-skatt, är momsregistrerat och innehar
utgivningsbevis för webbplatsen www.cyberinfo.se.