Utforska versionskontroll med Git
Det finns olika typer av versionskontrollsystem (VCS), men i allmänhet kan de kategoriseras som centraliserade och distribuerade. Under de senaste åren (delvis på grund av DevOps växande popularitet) har den senare kategorin fått stor popularitet, med Git som de facto standard inom modern programvaruutveckling. Detta specifika VCS skulle vara det lämpligaste valet för organisationen i vårt exempelscenario, särskilt med tanke på dess avsikt att använda GitHub som målplattform för sin DevOps-övergång. I den här lektionen utforskar du användningen av Git som versionskontroll.
Centraliserad kontra distribuerad versionskontroll
Både centraliserade versionskontrollsystem (CVCS) och distribuerade versionskontrollsystem (DVCS) ger möjlighet att hantera och spåra ändringar i programutvecklingsprojekt. De främsta skillnaderna mellan dem är relaterade till hur de implementerar lagringsplatser och samarbete. I synnerhet:
- Lagringsplats: I centraliserade system finns det en enda centraliserad instans av lagringsplatsen som innehåller projektets fullständiga historik. I distribuerade system skulle varje teammedlem vanligtvis ha en, fullt fungerande lokal kopia av hela lagringsplatsen, eventuellt inklusive dess fullständiga versionshistorik.
- Nätverksanslutning: I centraliserade system krävs åtkomst till den centraliserade instansen av lagringsplatsen för att utföra många åtgärder, inklusive uppdateringar och historikhämtning. I distribuerade system kan alla aktiviteter utföras mot den lokala kopian av lagringsplatsen.
- Samarbetsmodell: I centraliserade system checkar utvecklare ut filer från den centraliserade instansen av lagringsplatsen medan de är anslutna till den via ett nätverk innan de gör ändringar och genomför ändringarna. Detta förhindrar att andra kan göra ändringar i utcheckade filer. I distribuerade system gör och genomför utvecklare ändringar i sin lokala kopia av lagringsplatsen, som någon gång senare synkroniseras med andra kopior.
- Förgrening och sammanslagningsmodell: I centraliserade system kräver förgrening och sammanslagning vanligtvis samordning med andra. I distribuerade system kan grenar skapas oberoende av varandra i lokala kopior och sammanfogas efteråt.
Det är värt att notera att även om den distribuerade modellen inte förlitar sig på att ha en central lagringsplats (i traditionell mening), är det vanligt att implementera en kopia av lagringsplatsen, som hanteras av tjänster som GitHub, GitLab eller Bitbucket. Den här instansen fungerar som fokuspunkt för samarbete och synkronisering.
Git-terminologi
För att kunna arbeta med Git är det viktigt att bekanta sig med dess terminologi. Vissa av begreppen är unika för Git, vilket skiljer det från andra DVCS. De mest grundläggande Git-termerna är:
- Arbetsträd: en katalogstruktur som innehåller alla projektets filer.
- Lagringsplats (kallas ofta lagringsplats): katalogen som finns på den översta nivån i ett arbetsträd som är värd för alla projektets filer tillsammans med versionshistoriken för dessa filer.
- Klona: åtgärden att skapa en kopia av en fjärrlagringsplats på en lokal dator för att arbeta med ett projekt som du har åtkomst till.
- Fork: åtgärden att skapa en GitHub-värdbaserad kopia av ett fjärrförvar för att arbeta med ett projekt som du inte har åtkomst till. En förgrening används vanligtvis om du tänker bidra till någon annans projekt eller skapa en egen version av ett sådant projekt. Även om du inte har skrivåtkomst till den ursprungliga lagringsplatsen kan du hantera din förgrening helt.
- Commit: en ögonblicksbild av de ändringar som gjorts i filerna i ett repository vid en viss tidpunkt. Kommandon används för att registrera och spara ändringar.
- Mellanlagringsområde en mellanliggande plats (som inte ingår i arkivet) där ändringar i filer i arbetsträdet förbereds innan de commiteras. Det gör att utvecklare kan välja ändringar som de tänker genomföra.
- Branch: en namngiven serie av länkade commits. Enkelt uttryckt representerar en gren en distinkt version av ett projekt. Detta gör det möjligt att arbeta med olika delar av ett projekt samtidigt utan att påverka dess huvudversion. Den senaste commit i en gren kallas head. Standardgrenen som genereras automatiskt när du initierar en lagringsplats kallas main eller master.
- Slå samman: processen för att kombinera ändringar från en gren (eller commit) till en annan. Detta integrerar ändringar från en gren till en annan.
- Objekt: en av fyra typer av entiteter som är tillgängliga på en lagringsplats. Dessa entiteter omfattar blobbar som representerar enskilda filer, ett träd som representerar ett arbetsträd, en commit som representerar en specifik version av arbetsträdet och en tagg, som är en etikett som tilldelas en enskild commit.
- Hash: en automatiskt genererad, unik identifierare med fast längd som representerar innehållet i ett objekt. När objektet ändras ändras även dess hash. På så sätt kan Git avgöra vilket innehåll i en lagringsplats som har uppdaterats.
- Fjärranslutning: en referens till en annan lagringsplats (förutom den lokala) som vanligtvis pekar på lagringsplatsens tjänstvärdinstans. Detta fungerar som standard för push- och pull-åtgärder.
- Pull: åtgärden som hämtar ändringar från en fjärrlagringsplats och sammanfogar dem till den aktuella grenen.
- Push: den åtgärd som skickar lokala commits till en fjärrlagringsplats och uppdaterar den med ändringar som gjorts lokalt.
- Hämta: åtgärden som hämtar ändringar från en fjärrlagringsplats utan att automatiskt slå samman dem. Detta gör det möjligt för deras granskning innan en sammanslagning tillämpas.
- Pull-begäran: en funktion i Git-baserade värdplattformar (till exempel GitHub) som gör det möjligt för utvecklare att föreslå ändringar och begära att de slås samman till en målgren.
Git har också en omfattande uppsättning kommandon som ger möjlighet att fullständigt implementera och hantera versionskontroll via kommandogränssnittet, till exempel Linux Bash eller Windows-kommandotolken. Du kan också hantera Git via skrivbordsprogram som GitHub Desktop. Git-baserade värdplattformar tillhandahåller ett webbgränssnitt som underlättar interaktion med lagringsplatser på tjänstsidan.
Git jämfört med GitHub
Som vi beskrev tidigare är Git en DVCS med öppen källkod med flera plattformar som underlättar samarbete med hjälp av lokala lagringsplatser, som kan synkroniseras med fjärranslutna lagringsplatser. GitHub är en molnbaserad tjänst som tillhandahåller en värdplattform för Git-lagringsplatser. Det utökar utbudet av Git-funktioner genom att inkludera stöd för:
- Fjärranslutna lagringsplatser: underlätta interaktion mellan distribuerade team.
- Samarbetsverktyg: som inkluderar funktioner som ärenden, diskussioner, pull requests, meddelanden, etiketter, åtgärder, forks, wikis och projekt.
- Webbaserat gränssnitt: minimera behovet av att använda Git-kommandon
- Branch Protection: tillämpa villkor som måste uppfyllas innan en sammanfogning kan äga rum (till exempel slutförda granskningar av pull-förfrågningar).