-
1. Kom igÄng
- 1.1 Om versionshantering
- 1.2 En kort historik av Git
- 1.3 Vad Àr Git?
- 1.4 Kommandoraden
- 1.5 Installera Git
- 1.6 AnvÀnda Git för första gÄngen
- 1.7 FÄ hjÀlp
- 1.8 Sammanfattning
-
2. Grunder i Git
- 2.1 Skaffa ett Git-förvar
- 2.2 Spara Àndringar till förvaret
- 2.3 Visa historiken
- 2.4 Ă ngra saker
- 2.5 Jobba med fjÀrrförvar
- 2.6 Taggning
- 2.7 Git alias
- 2.8 Sammanfattning
-
3. Git förgreningar
-
4. Git pÄ servern
- 4.1 Protokollen
- 4.2 Skaffa Git pÄ en server
- 4.3 Generera din publika SSH-nyckel
- 4.4 Konvigurera servern
- 4.5 Git Daemonen
- 4.6 Smart HTTP
- 4.7 GitWeb
- 4.8 GitLab
- 4.9 Alternativ tillhandahÄllna av tredje part
- 4.10 Sammanfattning
-
5. Distribuerade Git
-
6. GitHub
-
7. Git Tools
- 7.1 Revision Selection
- 7.2 Interactive Staging
- 7.3 Stashing and Cleaning
- 7.4 Signing Your Work
- 7.5 Searching
- 7.6 Rewriting History
- 7.7 Reset Demystified
- 7.8 Advanced Merging
- 7.9 Rerere
- 7.10 Debugging with Git
- 7.11 Submodules
- 7.12 Bundling
- 7.13 Replace
- 7.14 Credential Storage
- 7.15 Summary
-
8. Customizing Git
- 8.1 Git Configuration
- 8.2 Git Attributes
- 8.3 Git Hooks
- 8.4 An Example Git-Enforced Policy
- 8.5 Summary
-
9. Git and Other Systems
- 9.1 Git as a Client
- 9.2 Migrating to Git
- 9.3 Summary
-
10. Git Internals
- 10.1 Plumbing and Porcelain
- 10.2 Git Objects
- 10.3 Git References
- 10.4 Packfiles
- 10.5 The Refspec
- 10.6 Transfer Protocols
- 10.7 Maintenance and Data Recovery
- 10.8 Environment Variables
- 10.9 Summary
-
A1. Bilaga A: Git in Other Environments
- A1.1 Graphical Interfaces
- A1.2 Git in Visual Studio
- A1.3 Git in Eclipse
- A1.4 Git in Bash
- A1.5 Git in Zsh
- A1.6 Git in PowerShell
- A1.7 Summary
-
A2. Bilaga B: Embedding Git in your Applications
- A2.1 Command-line Git
- A2.2 Libgit2
- A2.3 JGit
- A2.4 go-git
- A2.5 Dulwich
-
A3. Bilaga C: Git Commands
- A3.1 Setup and Config
- A3.2 Getting and Creating Projects
- A3.3 Basic Snapshotting
- A3.4 Branching and Merging
- A3.5 Sharing and Updating Projects
- A3.6 Inspection and Comparison
- A3.7 Debugging
- A3.8 Patching
- A3.9 Email
- A3.10 External Systems
- A3.11 Administration
- A3.12 Plumbing Commands
1.3 Kom igÄng - Vad Àr Git?
Vad Àr Git?
Vad Ă€r Git i ett nötskal? Detta Ă€r ett viktigt avsnitt att greppa, eftersom om du förstĂ„r vad Git Ă€r och det grunderna i hur det fungerar, sĂ„ kommer det bli mycket enklare för dig att anvĂ€nda Git effekivt. NĂ€r du nu lĂ€r dig Git, försök att rensa huvudet pĂ„ sĂ„dant som har med andra versionshanteringssystem, som t.ex. CVS, Subversion eller Perforceâââdetta för att undvika att blanda ihop saker nĂ€r du lĂ€r dig Git. Trots att Gits anvĂ€ndargrĂ€nssnitt Ă€r hyfsat likt andra versionshanterinssystem, sĂ„ lagrar och tĂ€nker Git pĂ„ information pĂ„ ett annat sĂ€tt, och att förstĂ„ dessa skilnader kommer vara fördelaktigt för att undvika att blanda ihop det med andra verktyg.
Ăgonblicksbilder (snapshots), inte skillnader
Den största skillnaden mellan Git och andra versionshanteringssystem (Subversion och liknande) Àr hur Git tÀnker pÄ data. Konceptuellt sÄ sparar de flesta andra system information som en lista av filÀndringar. De andra systemen (CVS, Subversion, Perforce, Bazaar, och sÄ vidare) tÀnker pÄ informationen de lagrar som en uppsÀttning filer och Àndringarna som gjorts i varje fil över tid (detta kallas vanligen för deltabaserad versionshantering).
Git tÀnker inte pÄ eller lagrar sin data pÄ detta sÀttet. IstÀllet ser Git sina data som en serie ögonblicksbilder av ett miniatyrfilsystem. Varje gÄng du gör sparar en version eller sparar tillstÄndet i ditt projekt i Git sÄ tar egentligen Git en bild över hur alla dina filer ser ut för ögonblicket och sparar en referens till den ögonblicksbilden. För att effektivisera sparas inte en fil igen ifall den inte har Àndrats, utan endast en lÀnk till föregÄende identiska fil som redan lagrats. Git tÀnker pÄ sina data som en ström av ögonblicksbilder
Detta Àr en viktig distinktion mellan Git och nÀstan alla andra versionshanteringsystem. Det gör att Git omprövar nÀstan varje aspekt av versionshantering som de flesta andra versionshanteringssystem kopierat frÄn den föregÄende generationen. Detta gör Git mer likt ett minifilsystem med nÄgra extremt kraftfulla verktyg ovanpÄ det, snarare Àn endast ett versionshanteringssystem. Vi kommer att utforska nÄgra av fördelarna man fÄr genom att tÀnka pÄ data pÄ detta sÀtt, nÀr vi gÄr igenom Git branching i Git förgreningar.
NÀstan varje operation Àr lokal
De flesta operationer i Git behöver endast lokala filer och resurser för att fungeraâââgenerellt behövs ingen annan information frĂ„n en annan dator pĂ„ ditt nĂ€tverk. Om du Ă€r van vid ett centraliserat versionshanteringssystem dĂ€r de flesta operationerna har viss nĂ€tverksfördröjning, kommer denna aspekt av Git fĂ„ dig att tro att snabbhetsgudarna har vĂ€lsignat Git med vĂ€rldsfrĂ€mmande krafter. Eftersom du har hela historiken av ditt projekt direkt pĂ„ din lokala hĂ„rddisk, verkar alla operationer ske nĂ€rmast ögonblickliga.
Till exempel, för att blĂ€ddra i projekthistoriken behöver inte Git kontakta en server för att hĂ€mta historikenâââden bara lĂ€ser direkt frĂ„n din lokala databas. Detta betyder att du ser projekthistoriken nĂ€rmast ögonblickligen. Om du vill se filĂ€ndringar mellan nuvarande version av filen och för en mĂ„nad sedan, kan Git ta reda pĂ„ hur filen sĂ„g ut förra mĂ„naden och göra en lokal jĂ€mförelse istĂ€llet för att att be en server göra det eller hĂ€mta en Ă€ldre version frĂ„n en server och göra det lokalt.
Sammantaget innebÀr detta att det finns vÀldigt lite du inte kan göra om du Àr offline eller inte har VPN. Om du Àr pÄ ett flygplan eller ett tÄg och vill göra lite jobb, kan du göra det och spara versioner gladeligen (till din lokala kopia, eller hur?) tills du fÄr tillgÄng till en nÀtverksanslutning för att skicka dina versiner. Om du Äker hem och inte kan fÄ igÄng din VPN klient ordentligt, kan du fortfarande jobba. I mÄnga andra system Àr detta antingen omöjigt eller vÀldigt omstÀndligt. Till exempel, i Perforce, kan du inte göra mycket ifall du inte Àr ansluten till en server; i Subversion och CVS kan du editera filer, men inte spara Àndringarna till din databas (eftersom att den Àr offline). Detta kanske inte verkar vara en stor sak, men du kommer att bli överraskad över vilken skillnad det kan göra.
Git har integritet
För allt i Git berÀknas en checksumma innan det lagras och sedan refererar man till denna checksumma. Detta betyder att det Àr omöjligt att Àndra innehÄllet i nÄgon fil eller katalog utan att Git kÀnner till det. Denna funktionalitet Àr inbyggt i Git pÄ de lÀgsta nivÄerna och Àr fundamentalt för dess filosofi. Du kan inte tappa information pÄ vÀgen eller fÄ en korrupt fil utan att Git kan detektera det.
Mekanismen som Git anvÀnder för att berÀkna checksumman kallas för en SHA-1 hash. Det Àr en fyrtio tecken lÄng teckenstrÀng som bestÄr av hexadecimala tecken (0-9 och a-f) och berÀknas baserat pÄ innehÄllet i en fil eller katalogstruktur i Git. En SHA-1 has ser ut ungefÀr sÄhÀr:
24b9da6552252987aa493b52f8696cd6d3b00373
Du kommer att se dessa hashvÀrden överallt i Git, eftersom Git anvÀnder dem sÄ mycket. I sjÀlva verket refererar Git till hashsumman av en fils innehÄll i sin databas, och inte filnamnet.
Git lÀgger oftast bara till data
NÀr du gör nÄgot i Git sÄ resulterar detta alltid i att nÄgot lÀggs till i Gits databas. Det Àr svÄrt att fÄ systemet att göra nÄgot som inte kan Ängras, eller att ta bort data pÄ nÄgot sÀtt. Som med vilket versionshanteringssystem som helst, kan du förlora eller förstöra Àndringar som du Ànnu inte förbundit, men vÀl efter att en ögonblicksbild har förbundits Àr det svÄrt att förlora den, speciellt om du regelbundet skickar dina Àndringar vidare till ett annat förvar.
Detta gör att det Àr kul att anvÀnda Git, eftersom vi vet att vi kan experimentera utan nÄgon som helst fara för att stÀlla till saker och ting. För en mer ingÄende beskrivning över hur Git hanterar sin data och hur du kan Äterskapa det som verkar vara förlorat, se à ngra saker.
De tre tillstÄnden
Var nu uppmĂ€rksamâââdetta Ă€r de huvudsakliga delarna som du mĂ„ste komma ihĂ„g om Git om du vill att resten av inlĂ€rningsprocessen skall gĂ„ smĂ€rtfritt. Git har tre huvudsakliga tillstĂ„nd som dina filer kan vara i: sparade, modifierade, och preparerad:
-
Sparad (eng. commited) betyder att datan Àr sÀkert sparad i din lokala databas.
-
Modifierad (eng. modified) betyder att du har Àndrat i filen, men att Àndringarna inte Àr lagrade i din databas Ànnu.
-
Preparerad (eng. staged) betyder att du har valt en modifierad fil i sin nuvarande form för att ingÄ i din nÀsta version.
Detta leder oss till tre huvuddelar av ett Gitprojekt: Gitkatalogen, arbetstrÀdet och den prepareringsytan.
Gitkatalogen Àr dÀr Git lagrar metadata och objektdatabasen för ditt projekt. Detta Àr den viktigaste delen av Git och det Àr denna du kopierar om du klonar ett förvar frÄn en annan dator.
ArbetstrÀdet Àr en enstaka utcheckning av en version av projektet. Dessa filer hÀmtas frÄn den komprimerade databasen i Gitkatalogen och placeras pÄ disken sÄ att du kan anvÀnda eller modifiera dem.
Prepareringsytan Ă€r en fil, generellt inuti din Gitkatalog, som sparar information om vad som skall ingĂ„ i din nĂ€sta version. Dess tekniska namn pĂ„ GitsprĂ„k Ă€r âindexâ, men âprepareringsytanâ fungerar lika bra.
Det huvudsakliga arbetsflödet i Git liknar detta:
-
Du modifierar filer i ditt arbetstrÀd.
-
Du vÀljer selektivt ut de Àndringar som skall ingÄ i din nÀsta version, och endast de Àndringarna lÀggs till prepareringsytan.
-
Du sparar en ny version, som tar Àndrigarna i prepareringsytan och sparar den ögonblicksbilden permanent till din Gitkatalog.
Om en specifik version av en fil finns i Gitkatalogen, Àr den att anse som sparad. Om den har modifierats och lagts till prepareringsytan, Àr den preparerad. Om om den har Àndrats efter att den checkats ut, men inte har preparerats Àr den modifierad. I Grunder i Git, kommer du lÀra dig mer om dessa olika tillstÄnd och hur du antingen kan dra nytta av dem eller skippa prepareringsytan helt.