"Hei, Amigo!"

"Hei!"

"I dag skal jeg fortelle deg om versjonskontrollsystemer."

"Som du sikkert allerede vet, er programmer ofte veldig store og tar veldig lang tid å skrive. Noen ganger kan dusinvis av mennesker bruke år på å skrive et program."

"Prosjekter med millioner av kodelinjer er en realitet."

"Wow."

"Det hele er veldig komplisert. Folk forstyrrer ofte hverandre, og endrer ofte den samme koden, og så videre og så videre."

"For å bringe orden på dette rotet begynte programmerere å bruke versjonskontrollsystemer for koden deres."

" Et versjonskontrollsystem er et program som består av en klient og server.

"Programmet lagrer data (koden skrevet av programmerere) på en server, og programmerere legger til eller endrer dem ved hjelp av klienter."

"Hovedforskjellen mellom et versjonskontrollsystem og programmer som ganske enkelt gjør det mulig å samarbeide om dokumenter er at det lagrer alle de tidligere versjonene av alle dokumentene (kodefiler)."

"Kan du gi meg flere detaljer. Hvordan fungerer det hele?"

"Se for deg at du er en programmerer og du vil gjøre små endringer i kildekoden til et program som er lagret i et depot på serveren."

"Her er hva du trenger å gjøre:"

"1) Logg inn på serveren."

"2) Kopier den nyeste versjonen av alle filene til datamaskinen din ved å bruke Checkout-kommandoen."

"3) Gjør endringer i de nødvendige filene."

"4) Kjør programmet lokalt for å sikre at det kompilerer og kjører."

"5) Send dine 'endringer' til serveren ved å bruke Commit-kommandoen."

"Det er generelt fornuftig."

"Men det er mer. Tenk deg at du kommer på jobb om morgenen, men det er allerede lunsjtid i India. Så de indiske kollegene dine har allerede gjort endringer og forpliktet endringene til lageret ditt på serveren."

"Du må jobbe med den nyeste versjonen av koden. Så du utfører Oppdater- kommandoen."

"Hvordan er det forskjellig fra Checkout ?"

" Checkout er designet for å kopiere alle depotets filer, men Update oppdaterer bare filene som har blitt oppdatert på serveren siden du sist kjørte en Checkout / Update- kommando."

"Slik fungerer det omtrent:"

Utsjekking :

Versjonskontrollsystemer - 1

"Nå, la oss si at vi endret fil B og ønsker å laste den opp til serveren. For å gjøre dette, må vi bruke Commit- kommandoen."

Versjonskontrollsystemer - 2

"Og her er hvordan Oppdater- kommandoen fungerer:"

Versjonskontrollsystemer - 3

"Hvor interessant! Er det noen andre kommandoer?"

"Ja, det er ganske mange. Men de varierer avhengig av hvilket versjonskontrollprogram du velger. Så jeg prøver bare å forklare de generelle prinsippene."

"Det er også en operasjon som kalles sammenslåing - sammenslåing av to dokumenter. Anta at to programmerere endres i samme fil samtidig. Da vil ikke programmet på serveren tillate at begge endringene blir forpliktet. Den som forplikter seg først, får legge til sin fil. eller endringene hennes."

"Så hva gjør den andre personen?"

"Han eller hun vil bli invitert til å utføre en oppdateringsoperasjon for å hente de siste endringene fra serveren. Forresten, dette - å gjøre en oppdatering før du forplikter - er god praksis."

"Deretter, under oppdateringsoperasjonen, vil klientprogrammet prøve å slå sammen de lokale endringene med endringene mottatt fra serveren."

"Hvis programmererne endret forskjellige deler av filen, vil versjonskontrollprogrammet sannsynligvis kunne slå dem sammen.  Hvis endringene er på samme sted, vil versjonskontrollprogrammet rapportere en flettekonflikt og be brukeren om å manuelt slå sammen endringene."

"For eksempel skjer dette ofte når begge programmererne legger til noe på slutten av en fil."

"Jeg skjønner. Totalt sett virker det rimelig."

"Og det er en ting til: grener."

"Tenk deg at to programmerere fra et team har i oppgave å omskrive den samme modulen. Eller enda bedre - å skrive den om fra bunnen av. Før denne modulen er fullført, vil ikke programmet kunne kjøre, og kanskje ikke engang kompilere."

"Så hva skal de gjøre?"

"De går videre ved å legge til grener til depotet. Grovt sett betyr dette at depotet blir delt i to deler. Ikke etter filer eller kataloger, men etter versjoner."

"Se for deg at elektrisitet aldri ble oppdaget og roboter aldri ble oppfunnet. Da ville de tre frigjøringskrigene aldri ha skjedd, og hele menneskehetens historie ville ha fulgt en helt annen vei. "

"Denne stien er en alternativ gren av historien."

"Eller du kan bare prøve å forestille deg en gren som ganske enkelt en kopi av depotet. Med andre ord, på et tidspunkt laget vi en kloning av depotet på serveren, slik at det i tillegg til hovedlageret (ofte kalt stammen ) ), vi har en annen filial ."

"Vel, det virker mer forståelig.

"Hvorfor kunne du ikke bare si at vi kopierte depotet?"

"Dette er ikke enkel kopiering."

"Disse grenene kan ikke bare skilles fra stammen, men også slås sammen i den."

"Med andre ord, noe arbeid kan gjøres i en gren, og når den er ferdig kan du legge til depotgrenen til depotstammen?"

"Japp."

"Og hva vil skje med filene?"

"Filene vil bli slått sammen."

"Vel, det høres kult ut. Jeg håper det er like kult i aksjon."

"Og litt til. Ok, la oss ta en pause."

"Det er en haug med nyttig informasjon  her "