Vad är versionskontroll?

Slutförd

Ett versionskontrollsystem (VCS) är ett program eller en uppsättning program som spårar ändringar i en samling filer. Ett mål med en VCS är att enkelt återkalla tidigare versioner av enskilda filer eller hela projektet. Ett annat mål är att låta flera teammedlemmar arbeta med ett projekt, även på samma filer, samtidigt utan att påverka varandras arbete.

Ett annat namn för en VCS är ett SCM-system (Software Configuration Management). De två termerna används ofta omväxlande– i själva verket finns Gits officiella dokumentation på git-scm.com. Tekniskt sett är versionskontroll bara en av de metoder som ingår i SCM. En VCS kan användas för andra projekt än programvara, inklusive böcker och online-självstudier.

Med en VCS kan du:

  • Se alla ändringar som gjorts i projektet, när ändringarna gjordes och vem som gjorde dem.
  • Inkludera ett meddelande med varje ändring för att förklara resonemanget bakom det.
  • Hämta tidigare versioner av hela projektet eller enskilda filer.
  • Skapa grenardär ändringar kan göras i experimentellt syfte. Med den här funktionen kan flera olika uppsättningar med ändringar (till exempel funktioner eller felkorrigeringar) bearbetas samtidigt, eventuellt av olika personer, utan att påverka huvudgrenen. Senare kan du sammanfoga de ändringar som du vill behålla tillbaka till huvudgrenen.
  • Koppla en tagg till en version, till exempel för att markera en ny version.

Git är en snabb, mångsidig, mycket skalbar, kostnadsfri VCS med öppen källkod. Huvudförfattaren är Linux Torvalds, skaparen av Linux.

Distribuerad versionskontroll

Tidigare instanser av VCSe, inklusive CVS, Subversion (SVN) och Perforce, använde en centraliserad server för att lagra ett projekts historik. Den här centraliseringen innebar att den ena servern också var en enskild felpunkt.

Git distribueras, vilket innebär att ett projekts fullständiga historik lagras både på klienten och på servern. Du kan redigera filer utan nätverksanslutning, kontrollera dem lokalt och synkronisera med servern när en anslutning blir tillgänglig. Om en server kraschar har du fortfarande en lokal kopia av projektet. Tekniskt sett behöver du inte ens ha en server. Ändringar kan skickas i e-post eller delas med hjälp av flyttbara medier, men ingen använder Git på det här sättet i praktiken.

Terminologi för Git

För att förstå Git behöver du förstå terminologin. Här är en kort lista över termer som Git-användare ofta använder. Oroa dig inte för detaljerna för tillfället; alla dessa termer blir bekanta när du arbetar dig igenom övningarna i den här modulen.

  • Arbetsträd: Uppsättningen kapslade kataloger och filer som innehåller projektet som bearbetas.

  • Lagringsplats (lagringsplats): Katalogen, som finns på den översta nivån i ett arbetsträd, där Git behåller all historik och alla metadata för ett projekt. Lagringsplatser kallas nästan alltid repos (repositories). En tom lagringsplats är en lagringsplats som inte ingår i ett arbetsträd. Den används för delning eller säkerhetskopiering. En tom lagringsplats är vanligtvis en katalog med ett namn som slutar i .git, till exempel project.git.

  • Hash: Ett tal som skapas av en hash-funktion som representerar innehållet i en fil eller ett annat objekt som ett fast antal siffror. Git använder hasher som är 160 bitar långa. En fördel med hasher är att Git kan se om en fil har ändrats genom att hasha dess innehåll och jämföra resultatet med föregående hash. Om filens tids- och datumstämpel ändras, men filhashen inte ändras, vet Git att filinnehållet inte ändras.

  • Objekt: En Git-lagringsplats innehåller fyra typer av objekt, var och en unikt identifierad av en SHA-1-hash. Ett blobobjekt innehåller en vanlig fil. Ett trädobjekt representerar en katalog. Det innehåller namn, hasher och behörigheter. Ett incheckningsobjekt representerar en specifik version av arbetsträdet. En tagg är ett namn som är kopplat till incheckning.

  • Incheckning: När det används som ett verb innebär incheckning att göra ett incheckningsobjekt. Den här åtgärden kallas så efter incheckningar till databaser. Det innebär att du genomför de ändringar du har gjort så att andra så småningom kan se dem också.

  • Gren: En gren är en namngiven serie länkade incheckningar. Den senaste incheckningen av en gren kallas huvud. Standardgrenen, som skapas när du initierar en lagringsplats, kallas main, ofta namngiven master i Git. Chefen för den aktuella grenen heter HEAD. Grenar är en otroligt användbar funktion i Git eftersom de gör det möjligt för utvecklare att arbeta oberoende (eller tillsammans) i grenar och senare sammanfoga sina ändringar i standardgrenen.

  • Fjärranslutning: En fjärranslutning är en namngiven referens till en annan Git-lagringsplats. När du skapar en lagringsplats skapar Git en fjärrdator med namnet origin som är standardfjärrvärdet för push- och pull-åtgärder.

  • Kommandon, underkommandon och alternativ: Git-åtgärder utförs med hjälp av kommandon som git push och git pull. git är kommandot och push eller pull är underkommandot. Underkommandot anger den åtgärd som du vill att Git ska utföra. Kommandon åtföljs ofta av alternativ som använder bindestreck (-) eller dubbla bindestreck (--). Exempel: git reset --hard

Dessa termer och andra, som push och pull, kommer att vara mer meningsfulla inom kort. Men du måste börja någonstans, och du kan tycka att det är bra att komma tillbaka och granska den här ordlistan med termer när du har slutfört modulen.

Git-kommandoraden

Flera olika GUIs är tillgängliga för Git, inklusive GitHub Desktop. Många programmeringsredigerare, till exempel Microsoft Visual Studio Code, har också ett gränssnitt till Git. De fungerar alla på olika sätt och de har olika begränsningar. Ingen av dem implementerar alla av funktionerna i Git.

Övningarna i den här modulen använder Git-kommandoraden , särskilt Git-kommandon som körs i Azure Cloud Shell. Gits kommandoradsgränssnitt fungerar dock på samma sätt, oavsett vilket operativsystem du använder. Med kommandoraden kan du dessutom utnyttja alla funktioner i Git. Utvecklare som bara ser Git via ett GUI konfronteras ibland med felmeddelanden som de inte kan lösa, och de måste tillgripa kommandoraden för att komma igång igen.

Git och GitHub

När du arbetar med Git kanske du undrar över skillnaderna mellan de funktioner som erbjuds och de funktioner som erbjuds på GitHub.

Som tidigare nämnts är Git ett distribuerat versionskontrollsystem (DVCS) som flera utvecklare och andra deltagare kan använda för att arbeta med ett projekt. Det ger ett sätt att arbeta med en eller flera lokala grenar och sedan skicka dem till en fjärrlagringsplats.

GitHub är en molnplattform med Git som kärnteknik. GitHub förenklar processen att samarbeta i projekt och tillhandahåller en webbplats, fler kommandoradsverktyg och övergripande flöde som utvecklare och användare kan använda för att arbeta tillsammans. GitHub fungerar som fjärrlagringsplatsen som nämndes tidigare.

Här är några av de viktigaste funktionerna i GitHub:

  • Problem
  • Diskussioner
  • Hämta begäranden
  • Aviseringar
  • Etiketter
  • Åtgärder
  • Gafflar
  • Projekt

Mer information om GitHub finns i modulen Introduktion till GitHub Microsoft Learn eller hjälpdokumentationen Komma igång med GitHub .

Nästa steg är att prova Git på egen hand!