Git 🌙
Chapters â–Ÿ 2nd Edition

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).

Lagrar data som Àndringar till en basversion av varje fil.
Figur 4. Lagrar data som Àndringar till en basversion av varje fil.

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

Lagrar data som ögonblicksbilder av projektet över tid.
Figur 5. Lagrar data som ögonblicksbilder av projektet över tid.

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.

ArbetstrÀdet, prepareringsytan och Gitkatalogen.
Figur 6. ArbetstrÀdet, den prepareringsytan och Gitkatalogen.

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:

  1. Du modifierar filer i ditt arbetstrÀd.

  2. Du vÀljer selektivt ut de Àndringar som skall ingÄ i din nÀsta version, och endast de Àndringarna lÀggs till prepareringsytan.

  3. 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.

scroll-to-top