Git
Chapters ▾ 2nd Edition

1.1 Kom igång - Om versionshantering

Detta kapitel kommer att handla om hur du kommer igång med Git. Vi börjar med en liten introduktion till versionshanteringsverktyg, sedan går vi vidare med hur du får igång Git på din dator, och slutligen hur du kan börja använda det. I slutet av kapitlet skall du förstå varför Git finns, varför det skall användas och du skall vara redo att kunna använda det.

Om versionshantering

Vad är “versionshantering”, och varför skall du bry dig? Ett versionshanteringsverktyg är ett program som håller reda på ändringar i en eller flera filer över tid så att du kan återskapa specifika versioner vid en senare tidpunkt. I exemplena i denna boken, kommer du att använda källkod som de filer som skall versionshanteras, men i verkligheten kan du göra samma sak med nästan vilken typ av fil som helst på en dator.

Om du är grafiker eller webdesigner och vill spara varje version av en bild eller layout (vilket du med största sannolikt vill), så är ett versionshanteringssysttem (VCS, efter engelskans “Version Control System”) en bra sak att använda. Det tillåter dig att återskapa valda filer eller hela projekt till ett tidigare tillstånd, jämföra ändringar över tid, se vem som senast ändrade något som kan ge upphov till ett problem, vem som introducerade ett fel och när, samt mycket mer. Att använda ett VCS betyder även att om du klantar till det eller förlorar filer, så kan du i regel med lätthet återställa allt. Allt detta får du utan att det ger speciellt mycket merarbete.

Lokala versionshanteringssystem

Många väljer att kopiera filer till ett annan mapp för som en primitiv versionshanteringsmetod (förslagsvis en mapp med aktuell tid i namnet, om man har tänkt till). Detta arbetssätt är mycket vanligt för att det är så enkelt, men det är också väldigt felkänsligt. Det är lätt att glömma vilken mapp du är i och råkar skriva till fel fil eller skriver över filer som du inte hade tänkt.

För att hantera detta problem, utvecklade programmerare för längesedan lokala VCS som hade en simpel databas för att hålla koll på ändrigarna i filerna som var versionshanterade.

Local version control diagram
Figure 1. Lokal versionshantering.

En av de mer populära VCS-verktygen var ett system som kallades RCS, vilket än idag distribueras med många datorer. RCS arbetar genom att hålla reda på s.k. patchar (d.v.s. skillnader mellan filer) i ett speciellt format på hårddisken; det kan återskapa hur en fil såg ut vid en speciell tidpunkt genom att summera de olika patcharna.

Centraliserade Versionshanteringssystem

Nästa stora problem folk stöter på är när de skall samarbeta med andra utvecklare på andra system. För att hantera detta problem utvecklade man centrala versionshanteringssystem (CVCS). Dessa system (som t.ex. CVS, Subversion, och Perforce) har en enda server som innehåller alla versionshanterade filer och ett antal klienter som checkar ut filer från den centrala servern. Under många år var detta det vanligaste sättet att versionshantera.

Centralized version control diagram
Figure 2. Centraliserad versionshantering.

Denna setup ger många fördelar, speciellt över lokala VCS. Till exempel så vet alla, till viss del, vad andra gör i projektet. Administratörer har detaljerad kontroll över vem som kan göra vad, och det är betydligt enklare att administrera ett centralt system än att hantera lokala databaser på varje klient.

Dock har denna setup några verkliga tillkortakommanden. Den mest uppenbara är den felkritiska del som en enda central server utgör. Om servern går ner under en timme så kan ingen samarbeta alls eller spara versionshanterade ändringar av något de jobbar med för tillfället. Om hårddisken på servern blir korrupt eller skadas, och att inga säkerhetskopior har sparats, så förloras allt — hela projektets historik, förutom enstaka versioner som folk råkar ha på sina lokala maskiner. Lokala versionshanteringssystem lider av samma problem — om hela projektets historik finns lagrat på ett enda ställe, riskerar man att förlora allt.

Distribuerade Versionshanteringssystem

Det är här distribuerade versionshanteringssystem (DVCS) kommer in. I ett sådant system, checkar klienterna inte ut den senaste versionen av filerna; istället speglar de hela förvaret, inklusive all historik. Således, om en server dör och systemen samarbetar via den servern, så kan vilken som helst av klienternas förvar kopieras upp till servern för att återställa den. Varje klon är i själva verket en fullständig säkerhetskopia av all data.

Distribuerad versionshantering.
Figure 3. Distribuerad versionshantering.

Vidare hanterar dessa systemen ganska bra med att ha flera fjärrförvar som de kan jobba med, så du kan samarbeta med olika personer på olika sätt samtidigt inom samma projekt. Detta ger möjligheten att använda sig av olika arbetsflöden som inte är möjliga med centrala system, som t.ex. hierarkiska modeller.