"Hej, Amigo!"

"Hej!"

"Idag ska jag berätta om versionskontrollsystem."

"Som du säkert redan vet är program ofta väldigt stora och tar väldigt lång tid att skriva. Ibland kan dussintals människor ägna år åt att skriva ett program."

"Projekt med miljontals rader kod är en realitet."

"Oj."

"Det hela är väldigt komplicerat. Människor stör ofta varandra och modifierar ofta samma kod, och så vidare och så vidare."

"För att få ordning på den här röran började programmerare använda versionskontrollsystem för sin kod."

" Ett versionskontrollsystem är ett program som består av en klient och server.

"Programmet lagrar data (koden skriven av programmerare) på en server, och programmerare lägger till eller ändrar den med hjälp av klienter."

"Den största skillnaden mellan ett versionskontrollsystem och program som helt enkelt gör det möjligt att arbeta tillsammans med dokument är att det lagrar alla tidigare versioner av alla dokument (kodfiler)."

"Kan du ge mig mer detaljer. Hur fungerar det hela?"

"Föreställ dig att du är en programmerare och du vill göra små ändringar i källkoden för ett program som är lagrat i ett arkiv på servern."

"Här är vad du behöver göra:"

"1) Logga in på servern."

"2) Kopiera den senaste versionen av alla filer till din dator med kommandot Checkout."

"3) Gör ändringar i de nödvändiga filerna."

"4) Kör programmet lokalt för att se till att det kompileras och körs."

"5) Skicka dina 'ändringar' till servern med kommandot Commit."

"Det är generellt sett vettigt."

"Men det finns mer. Föreställ dig att du kommer till jobbet på morgonen, men det är redan lunchtid i Indien. Så dina indiska kollegor har redan gjort ändringar och gjort ändringar i ditt förråd på servern."

"Du måste arbeta med den senaste versionen av koden. Så du utför kommandot Uppdatera ."

"Hur skiljer sig det från Checkout ?"

" Checkout är designat för att kopiera alla förvarets filer, men Update uppdaterar bara de filer som har uppdaterats på servern sedan du senast körde ett Checkout / Update -kommando."

"Så här fungerar det ungefär:"

Utcheckning :

Versionskontrollsystem - 1

"Låt oss nu säga att vi ändrade fil B och vill ladda upp den till servern. För att göra detta måste vi använda kommandot Commit. "

Versionskontrollsystem - 2

"Och så här fungerar kommandot Uppdatera :"

Versionskontrollsystem - 3

"Vad intressant! Finns det några andra kommandon?"

"Ja, det finns ganska många. Men de varierar beroende på vilket versionskontrollprogram du väljer. Så jag försöker bara förklara de allmänna principerna."

"Det finns också en operation som kallas sammanslagning - sammanslutningen av två dokument. Antag att två programmerare modifieras samma fil samtidigt. Då kommer programmet på servern inte att tillåta att båda ändringarna committeras. Den som begår först får lägga till sin fil. eller hennes förändringar."

"Så vad gör den andra personen?"

"Han eller hon kommer att bjudas in att utföra en uppdateringsoperation för att hämta de senaste ändringarna från servern. Förresten, det här - att göra en uppdatering innan du genomför - är god praxis."

"Sedan, under uppdateringsoperationen, kommer klientprogrammet att försöka slå samman de lokala ändringarna med ändringarna som tas emot från servern."

"Om programmerarna ändrade olika delar av filen, kommer versionskontrollprogrammet förmodligen att kunna slå samman dem framgångsrikt.  Om ändringarna är på samma plats kommer versionskontrollprogrammet att rapportera en sammanslagningskonflikt och uppmana användaren att manuellt slå samman ändringarna."

"Till exempel händer detta ofta när båda programmerarna lägger till något i slutet av en fil."

"Jag förstår. Sammantaget verkar det rimligt."

"Och det finns en sak till: grenar."

"Föreställ dig att två programmerare från ett team har i uppdrag att skriva om samma modul. Eller ännu bättre - skriva om den från grunden. Tills den här modulen är klar kommer programmet inte att kunna köras och kanske inte ens kompilera."

"Så vad ska de göra?"

"De går vidare genom att lägga till grenar till förvaret. Grovt sett betyder det att förvaret delas upp i två delar. Inte efter filer eller kataloger, utan efter versioner."

"Föreställ dig att elektricitet aldrig upptäcktes och robotar aldrig uppfanns. Då skulle de tre befrielsekrigen aldrig ha inträffat, och hela mänsklighetens historia skulle ha följt en helt annan väg. "

"Denna väg är en alternativ gren av historien."

"Eller så kan du bara försöka föreställa dig en gren som helt enkelt en kopia av förvaret. Med andra ord, vid något tillfälle gjorde vi en klon av förvaret på servern, så att förutom huvudförvaret (ofta kallad trunk ) ), vi har en annan filial ."

"Tja, det verkar mer förståeligt.

"Varför kunde du inte bara säga att vi kopierade förvaret?"

"Det här är inte enkel kopiering."

"Dessa grenar kan inte bara separeras från stammen, utan också slås samman i den."

"Med andra ord kan en del arbete utföras i en gren, och sedan när den är klar kan du lägga till förvarsgrenen till förvarsstammen?"

"Japp."

"Och vad kommer att hända med filerna?"

"Filerna kommer att slås samman."

"Tja, det låter coolt. Jag hoppas att det är lika coolt i action."

"Och lite till. Okej, låt oss ta en paus."

"Det finns en massa användbar information  här "