Chapters ▾ 2nd Edition

1.1 Kom igång - Om versionshantering

Detta kapitel handlar om att komma igång med Git. Vi börjar med att förklara lite bakgrund om versionshanteringsverktyg, går sedan vidare till hur du får Git att fungera på ditt system och till sist hur du konfigurerar det för att börja arbeta. I slutet av kapitlet kommer du att förstå varför Git finns, varför du bör använda det samt vara redo att använda det.

Om versionshantering

Vad är “versionshantering” och varför ska du bry dig? Versionshantering är ett system som registrerar ändringar i en fil eller en samling filer över tid så att du kan återskapa särskilda versioner senare. I exemplen i denna bok använder vi källkod som de filer som versionshanteras, men i praktiken kan du göra samma sak med nästan vilken typ av fil som helst på en dator.

Om du är grafiker eller webbdesigner och vill spara varje version av en bild eller layout (vilket du med största sannolikhet vill) är ett versionshanteringssystem (VCS, efter engelskans "Version Control System") ett mycket klokt val. Det låter dig återställa valda filer eller hela projekt till ett tidigare läge, jämföra ändringar över tid, se vem som senast ändrade något som orsakar problem, vem som införde ett fel och när, och mycket mer. Att använda ett VCS betyder också att om du gör fel eller tappar filer kan du i regel återställa allt utan större ansträngning. Dessutom får du allt detta med en mycket liten extra arbetsinsats.

Lokala versionshanteringssystem

Många väljer att kopiera filer till en annan katalog (kanske en tidsstämplad katalog, om de tänkt till). Detta arbetssätt är mycket vanligt eftersom det är så enkelt, men det är också väldigt felkänsligt. Det är lätt att glömma vilken katalog du är i och råka skriva till fel fil eller skriva över filer du inte hade tänkt.

För att hantera detta problem utvecklade programmerare för länge sedan lokala VCS:er som hade en enkel databas som höll reda på alla ändringar i filer som var versionshanterade.

Lokalt versionshanteringsdiagram
Figur 1. Lokalt versionshanteringsdiagram

Ett av de populäraste VCS‑verktygen var ett system som kallades RCS, vilket än idag distribueras med många datorer. RCS fungerar genom att hålla reda på så kallade ändringspatchar (alltså skillnader mellan filer) i ett särskilt format på hårddisken; det kan sedan återskapa hur en fil såg ut vid en viss tidpunkt genom att lägga ihop alla ändringspatchar.

Centraliserade versionshanteringssystem

Nästa stora problem folk stöter på är att de behöver samarbeta med utvecklare på andra system. För att hantera detta utvecklades centraliserade versionshanteringssystem (CVCS). Dessa system (till exempel CVS, Subversion och Perforce) har en enda server som innehåller alla versionshanterade filer och ett antal klienter som hämtar ut filer från den centrala platsen. Under många år var detta standardmetoden för versionshantering.

Centraliserat versionshanteringsdiagram
Figur 2. Centraliserat versionshanteringsdiagram

Den här modellen ger många fördelar, särskilt jämfört med lokala VCS:er. Till exempel vet alla till viss del vad alla andra i projektet gör. Administratörer har detaljerad kontroll över vem som kan göra vad, och det är betydligt enklare att administrera ett centraliserat system än att hantera lokala databaser på varje klient.

Men den här modellen har också några allvarliga nackdelar. Den mest uppenbara är den enda felpunkt som den centraliserade servern utgör. Om den servern går ner i en timme kan ingen under den tiden samarbeta eller spara versionshanterade ändringar i det de jobbar med. Om hårddisken där den centrala databasen ligger blir korrupt och man inte har riktiga säkerhetskopior förlorar man allt – hela projektets historik, förutom de enstaka versioner som råkar finnas på folks lokala maskiner. Lokala VCS:er lider av samma problem – när hela projektets historik finns 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 (till exempel Git, Mercurial eller Darcs) hämtar klienterna inte bara den senaste ögonblicksbilden av filerna; de speglar hela kodförrådet, inklusive all historik. Om en server dör och systemen samarbetade via den servern kan vilket som helst av klienternas kodförråd kopieras tillbaka till servern för att återställa den. Varje klon är i praktiken en fullständig säkerhetskopia av all data.

Distribuerat versionshanteringsdiagram
Figur 3. Distribuerat versionshanteringsdiagram

Dessutom hanterar många av dessa system flera fjärrkodförråd ganska väl, så du kan samarbeta med olika grupper av personer på olika sätt samtidigt inom samma projekt. Det gör det möjligt att använda flera typer av arbetsflöden som inte är möjliga i centraliserade system, till exempel hierarkiska modeller.