-
1. Kom igång
- 1.1 Om versionshantering
- 1.2 En kort historik om Git
- 1.3 Vad är Git?
- 1.4 Kommandoraden
- 1.5 Installera Git
- 1.6 Första gången med Git
- 1.7 Få hjälp
- 1.8 Sammanfattning
-
2. Grunderna i Git
- 2.1 Att få tag i ett Git‑kodförråd
- 2.2 Spara ändringar i kodförrådet
- 2.3 Visa incheckningshistoriken
- 2.4 Ångra saker
- 2.5 Arbeta med fjärrkodförråd
- 2.6 Att tagga
- 2.7 Git-alias
- 2.8 Sammanfattning
-
3. Git-grenar
- 3.1 Grenar i korthet
- 3.2 Grundläggande gren- och sammanfogningsarbete
- 3.3 Grenhantering
- 3.4 Arbetsflöden med grenar
- 3.5 Fjärrgrenar
- 3.6 Ombasering
- 3.7 Sammanfattning
-
4. Git på servern
- 4.1 Protokollen
- 4.2 Konfigurera Git på en server
- 4.3 Generera din publika SSH-nyckel
- 4.4 Konfigurera servern
- 4.5 Git-demon
- 4.6 Smart HTTP
- 4.7 GitWeb
- 4.8 GitLab
- 4.9 Tredjepartsalternativ
- 4.10 Sammanfattning
-
5. Distribuerat Git
-
6. GitHub
-
7. Git-verktyg
- 7.1 Revisionsurval
- 7.2 Interaktiv köläggning
- 7.3 Lägga undan och städa
- 7.4 Signera ditt arbete
- 7.5 Sökning
- 7.6 Skriva om historik
- 7.7 Nollställning förklarad
- 7.8 Avancerad sammanslagning
- 7.9 Rerere
- 7.10 Felsöka med Git
- 7.11 Undermoduler
- 7.12 Bunta
- 7.13 Ersätt
- 7.14 Lagring av inloggningsuppgifter
- 7.15 Sammanfattning
-
8. Anpassa Git
- 8.1 Git‑konfiguration
- 8.2 Git‑attribut
- 8.3 Git‑krokar
- 8.4 Ett exempel på Git‑upprätthållen policy
- 8.5 Sammanfattning
-
9. Git och andra system
- 9.1 Git som klient
- 9.2 Migrera till Git
- 9.3 Sammanfattning
-
10. Git bakom kulisserna
- 10.1 Lågnivådel och användardel
- 10.2 Git-objekt
- 10.3 Git-referenser
- 10.4 Packfiler
- 10.5 Refspecen
- 10.6 Överföringsprotokoll
- 10.7 Underhåll och dataåterställning
- 10.8 Miljövariabler
- 10.9 Sammanfattning
-
A1. Bilaga A: Git i andra miljöer
- A1.1 Grafiska gränssnitt
- A1.2 Git i Visual Studio
- A1.3 Git i Visual Studio Code
- A1.4 Git i IntelliJ / PyCharm / WebStorm / PhpStorm / RubyMine
- A1.5 Git i Sublime Text
- A1.6 Git i Bash
- A1.7 Git i Zsh
- A1.8 Git i PowerShell
- A1.9 Sammanfattning
-
A2. Bilaga B: Bädda in Git i dina applikationer
- A2.1 Git på kommandoraden
- A2.2 Libgit2
- A2.3 JGit
- A2.4 go-git
- A2.5 Dulwich
-
A3. Bilaga C: Git-kommandon
- A3.1 Uppstart och konfiguration
- A3.2 Skaffa och skapa projekt
- A3.3 Grundläggande ögonblicksbilder
- A3.4 Grening och sammanslagning
- A3.5 Dela och uppdatera projekt
- A3.6 Inspektion och jämförelse
- A3.7 Felsökning
- A3.8 Patchning
- A3.9 E‑post
- A3.10 Externa system
- A3.11 Administration
- A3.12 Lågnivåkommandon
1.3 Kom igång - Vad är Git?
Vad är Git?
Så vad är då egentligen Git? Det här avsnittet är viktigt, för om du förstår vad Git är och hur det fungerar blir det mycket enklare att använda Git effektivt. När du lär dig Git, försök att lägga åt sidan det du kan om andra VCS:er, som CVS, Subversion eller Perforce – då undviker du en del förvirring. Även om Gits användargränssnitt är ganska likt dessa andra VCS:er lagrar och tänker Git på information på ett helt annat sätt, och om du förstår skillnaderna blir det lättare att undvika missförstånd.
Ögonblicksbilder, inte skillnader
Den stora skillnaden mellan Git och alla andra VCS:er (Subversion med flera) är hur Git ser på sina data. Konceptuellt lagrar de flesta andra system information som en lista med filändringar. De systemen (CVS, Subversion, Perforce och så vidare) ser informationen de lagrar som en uppsättning filer och ändringarna som gjorts i varje fil över tid (detta brukar kallas deltabaserad versionshantering).
Git lagrar inte sina data på det sättet. I stället ser Git sina data som en serie ögonblicksbilder av ett litet filsystem. Varje gång du gör en incheckning eller sparar läget för projektet tar Git i praktiken en bild av hur alla filer ser ut just då och sparar en referens till den ögonblicksbilden. För att vara effektiv sparar Git inte en fil igen om den inte ändrats, utan bara en länk till den tidigare identiska filen som redan finns. Git tänker alltså på sina data som ett flöde av ögonblicksbilder.
Det här är en viktig skillnad mellan Git och nästan alla andra VCS:er. Den gör att Git ändrar nästan varje del av versionshanteringen som de flesta andra system bara kopierade från föregående generation. Det gör Git mer likt ett litet filsystem med några otroligt kraftfulla verktyg ovanpå, snarare än ett VCS. Vi utforskar några av fördelarna med att tänka på data på detta sätt när vi går igenom grenar i Git-grenar.
Nästan varje åtgärd är lokal
De flesta åtgärder i Git behöver bara lokala filer och resurser – i regel krävs ingen information från en annan dator i nätverket. Om du är van vid ett centraliserat VCS där de flesta åtgärder har nätverksfördröjning kommer denna funktion i Git få dig att tro att hastighetsgudarna har välsignat Git med övernaturliga krafter. Eftersom du har hela projektets historik på den lokala disken verkar de flesta åtgärder nästan omedelbara.
Till exempel behöver Git inte kontakta en server för att bläddra i historiken – den läser den direkt från din lokala databas. Det betyder att du ser projektets historik nästan omedelbart. Om du vill se ändringarna mellan den nuvarande versionen av en fil och den som fanns för en månad sedan kan Git ta fram filen från förra månaden och göra en lokal jämförelse, i stället för att be en fjärrserver göra det eller hämta en äldre version och göra jämförelsen lokalt.
Det innebär också att du kan göra nästan allt även utan uppkoppling eller VPN. Om du sitter på ett flygplan eller tåg och vill göra lite arbete kan du göra incheckningar glatt (till din lokala kopia, kom ihåg) tills du får en nätverksanslutning för att skicka dina ändringar. Om du kommer hem och inte får igång VPN-klienten kan du ändå arbeta. I många andra system är det antingen omöjligt eller väldigt krångligt. I Perforce kan du till exempel inte göra mycket om du inte är ansluten till servern; i Subversion och CVS kan du redigera filer men du kan inte göra en incheckning av ändringarna i din databas (eftersom du saknar uppkoppling). Det kanske inte låter så viktigt, men du kommer att märka stor skillnad i praktiken.
Git har inbyggd dataintegritet
Allt i Git får en kontrollsumma innan det lagras och refereras sedan via den kontrollsumman. Det betyder att det är omöjligt att ändra innehållet i någon fil eller katalog utan att Git märker det. Funktionen är inbyggd i Git på de lägsta nivåerna och är en grundpelare i dess filosofi. Du kan inte tappa information på vägen eller få en korrupt fil utan att upptäcka det.
Mekanismen som Git använder kallas en SHA‑1‑summa. Det är en sträng på 40 tecken som består av hexadecimala tecken (0–9 och a–f) och beräknas från innehållet i en fil eller katalogstruktur i Git. En SHA‑1‑summa ser ut ungefär så här:
24b9da6552252987aa493b52f8696cd6d3b00373
Du kommer att se dessa kontrollsummor överallt i Git eftersom Git använder dem så mycket. Faktum är att Git lagrar allt i sin databas utifrån innehållets kontrollsumma, inte filnamnet.
Git lägger i regel bara till data
När du gör saker i Git leder nästan allt till att data läggs till i Git‑databasen. Det är svårt att få systemet att göra något som inte går att ångra eller att radera data på något sätt. Som med alla VCS:er kan du förlora eller ställa till ändringar som du inte har gjort en incheckning av ännu, men när du väl har gjort en incheckning av en ögonblicksbild är den svår att bli av med, särskilt om du regelbundet skickar dina ändringar vidare till ett annat kodförråd.
Det gör Git till ett nöje att använda, eftersom vi vet att vi kan experimentera utan att riskera att ställa till det ordentligt. För en mer ingående beskrivning av hur Git lagrar sina data och hur du kan återställa sådant som verkar förlorat, se Ångra saker.
De tre tillstånden
Var uppmärksam nu – det här är det viktigaste du behöver komma ihåg om Git för att resten av inlärningen ska gå smidigt. Git har tre huvudtillstånd som dina filer kan befinna sig i: ändrad, köad och incheckad:
-
Ändrad (eng. modified) betyder att du har ändrat filen men ännu inte gjort en incheckning i databasen.
-
Köad (eng. staged) betyder att du har markerat en ändrad fil i dess nuvarande form för att ingå i nästa incheckning.
-
Incheckad (eng. committed) betyder att data är säkert lagrad i din lokala databas.
Det leder oss till de tre huvuddelarna i ett Git‑projekt: arbetskatalogen, köytan och Git‑katalogen.
Arbetskatalogen är en enskild arbetskopia av en version av projektet. Filerna plockas ut ur den komprimerade databasen i Git‑katalogen på disken så att du kan använda eller ändra dem.
Köytan är en fil, vanligtvis inuti Git‑katalogen, som lagrar information om vad som ska ingå i nästa incheckning. Dess tekniska namn i Git är “index”, men “köytan” fungerar lika bra.
Git‑katalogen är där Git lagrar metadata och objektdatabasen för ditt projekt. Det är den viktigaste delen av Git och det är den som kopieras när du klonar ett kodförråd från en annan dator.
Det grundläggande arbetsflödet i Git ser ungefär ut så här:
-
Du ändrar filer i arbetskatalogen.
-
Du köar selektivt bara de ändringar du vill ha med i nästa incheckning, vilket lägger endast dessa ändringar i köytan.
-
Du gör en incheckning, vilket tar filerna som de ligger i köytan och lagrar ögonblicksbilden permanent i Git‑katalogen.
Om en viss version av en fil finns i Git‑katalogen räknas den som incheckad. Om den har ändrats och lagts till i köytan är den köad. Och om den har ändrats efter att den togs ut men inte köades är den ändrad. I Grunderna i Git får du lära dig mer om dessa tillstånd och hur du antingen kan dra nytta av dem eller hoppa över köytan helt.