"Hej, Amigo!"

"Hej!"

"I dag vil jeg fortælle dig om versionskontrolsystemer."

"Som du sikkert allerede ved, er programmer ofte meget store og tager meget lang tid at skrive. Nogle gange kan snesevis af mennesker bruge år på at skrive et program."

"Projekter med millioner af linjer kode er en realitet."

"Hov."

"Det hele er meget kompliceret. Folk blander sig ofte med hinanden og ændrer ofte den samme kode, og så videre og så videre."

"For at bringe orden i dette rod begyndte programmører at bruge versionskontrolsystemer til deres kode."

" Et versionskontrolsystem er et program bestående af en klient og server.

"Programmet gemmer data (koden skrevet af programmører) på en server, og programmører tilføjer eller ændrer dem ved hjælp af klienter."

"Den største forskel mellem et versionskontrolsystem og programmer, der simpelthen gør det muligt at arbejde sammen om dokumenter, er, at det gemmer alle de tidligere versioner af alle dokumenterne (kodefiler)."

"Kan du give mig flere detaljer. Hvordan fungerer det hele?"

"Forestil dig, at du er programmør, og du vil lave små ændringer i kildekoden for et program, der er gemt i et lager på serveren."

"Her er hvad du skal gøre:"

"1) Log ind på serveren."

"2) Kopier den seneste version af alle filerne til din computer ved hjælp af Checkout-kommandoen."

"3) Foretag ændringer af de nødvendige filer."

"4) Kør programmet lokalt for at sikre, at det kompilerer og kører."

"5) Send dine 'ændringer' til serveren ved hjælp af kommandoen Commit."

"Det giver generelt mening."

"Men der er mere. Forestil dig, at du ankommer på arbejde om morgenen, men det er allerede frokosttid i Indien. Så dine indiske kolleger har allerede foretaget ændringer og forpligtet deres ændringer til dit lager på serveren."

"Du skal arbejde med den nyeste version af koden. Så du udfører kommandoen Update ."

"Hvordan adskiller det sig fra Checkout ?"

" Checkout er designet til at kopiere alle depotets filer, men Update opdaterer kun de filer, der er blevet opdateret på serveren, siden du sidst kørte en Checkout / Update- kommando."

"Sådan fungerer det omtrent:"

Checkout :

Versionskontrolsystemer - 1

"Lad os nu sige, at vi har ændret fil B og vil uploade den til serveren. For at gøre dette skal vi bruge kommandoen Commit ."

Versionskontrolsystemer - 2

"Og sådan fungerer Update- kommandoen:"

Versionskontrolsystemer - 3

"Hvor interessant! Er der andre kommandoer?"

"Ja, der er en del. Men de varierer afhængigt af hvilket versionskontrolprogram du vælger. Så jeg prøver lige at forklare de generelle principper."

"Der er også en operation kaldet sammensmeltning - foreningen af ​​to dokumenter. Antag, at to programmører ændres i den samme fil på samme tid. Så vil programmet på serveren ikke tillade, at begge ændringer bliver forpligtet. Den, der forpligter sig først, kan tilføje sin eller hendes ændringer."

"Så hvad gør den anden person?"

"Han eller hun vil blive inviteret til at udføre en opdateringsoperation for at få fat i de seneste ændringer fra serveren. Dette er i øvrigt god praksis - at lave en opdatering før forpligtelse."

"Så vil klientprogrammet under opdateringsoperationen forsøge at flette de lokale ændringer med ændringerne modtaget fra serveren."

"Hvis programmørerne har ændret forskellige dele af filen, så vil versionskontrolprogrammet formentlig være i stand til at flette dem sammen.  Hvis ændringerne er på samme sted, vil versionskontrolprogrammet rapportere en flettekonflikt og bede brugeren om manuelt at flette ændringerne."

"For eksempel sker dette ofte, når begge programmører tilføjer noget til slutningen af ​​en fil."

"Jeg kan se. Samlet set virker det rimeligt."

"Og der er en ting mere: grene."

"Forestil dig, at to programmører fra et team har til opgave at omskrive det samme modul. Eller endnu bedre - at omskrive det fra bunden. Indtil dette modul er færdigt, vil programmet ikke være i stand til at køre og måske ikke engang kompilere."

"Så hvad skal de gøre?"

"De kommer videre ved at tilføje grene til depotet. Groft sagt betyder det, at depotet bliver opdelt i to dele. Ikke efter filer eller mapper, men efter versioner."

"Forestil dig , at elektricitet aldrig blev opdaget, og robotter aldrig blev opfundet. Så ville de tre befrielseskrige aldrig være sket, og hele menneskehedens historie ville have fulgt en helt anden vej. "

"Denne vej er en alternativ gren af ​​historien."

"Eller du kan bare prøve at forestille dig en gren som blot en kopi af depotet. Med andre ord lavede vi på et tidspunkt en klon af depotet på serveren, så det ud over hovedlageret (ofte kaldet stammen ) ), vi har en anden filial ."

"Nå, det virker mere forståeligt.

"Hvorfor kunne du ikke bare sige, at vi kopierede depotet?"

"Dette er ikke simpel kopiering."

"Disse grene kan ikke kun adskilles fra stammen, men også flettes ind i den."

"Med andre ord, noget arbejde kan udføres i en filial, og når det er færdigt, kan du tilføje depotgrenen til depotstammen?"

"Ja."

"Og hvad vil der ske med filerne?"

"Filerne vil blive flettet."

"Nå, det lyder fedt. Jeg håber, det er lige så fedt i aktion."

"Og så nogle. Okay, lad os tage en pause."

"Der er en masse nyttig information  her "