"Hallo Amigo!"

"Hoi!"

"Vandaag zal ik je vertellen over versiebeheersystemen."

"Zoals je waarschijnlijk al weet, zijn programma's vaak erg groot en duurt het erg lang om te schrijven. Soms kunnen tientallen mensen jaren bezig zijn met het schrijven van een programma."

"Projecten met miljoenen regels code zijn realiteit."

"Wauw."

"Het is allemaal erg ingewikkeld. Mensen bemoeien zich vaak met elkaar, en passen vaak dezelfde code aan, enzovoort, enzovoort."

"Om orde in deze puinhoop te brengen, begonnen programmeurs versiebeheersystemen voor hun code te gebruiken."

" Een versiebeheersysteem is een programma dat bestaat uit een client en een server.

"Het programma slaat gegevens op (de code geschreven door programmeurs) op een server, en programmeurs voegen deze toe of wijzigen deze met behulp van clients."

"Het belangrijkste verschil tussen een versiebeheersysteem en programma's die het eenvoudig mogelijk maken om samen aan documenten te werken, is dat het alle vorige versies van alle documenten (codebestanden) opslaat."

"Kun je me meer details geven. Hoe werkt het allemaal?"

"Stel je voor dat je een programmeur bent en je wilt kleine wijzigingen aanbrengen in de broncode van een programma dat is opgeslagen in een repository op de server."

"Dit is wat je moet doen:"

"1) Log in op de server."

"2) Kopieer de nieuwste versie van alle bestanden naar uw computer met behulp van de opdracht Checkout."

"3) Breng wijzigingen aan in de vereiste bestanden."

"4) Voer het programma lokaal uit om ervoor te zorgen dat het compileert en draait."

"5) Stuur uw 'wijzigingen' naar de server met behulp van de opdracht Commit."

"Dat is over het algemeen logisch."

"Maar er is meer. Stel je voor dat je 's ochtends op je werk aankomt, maar het is al lunchtijd in India. Je Indiase collega's hebben dus al wijzigingen aangebracht en hun wijzigingen vastgelegd in je repository op de server."

"Je moet werken met de nieuwste versie van de code. Je voert dus de opdracht Update uit ."

"Wat is het verschil met Checkout ?"

" Checkout is ontworpen om alle bestanden van de repository te kopiëren, maar Update werkt alleen de bestanden bij die op de server zijn bijgewerkt sinds u voor het laatst een Checkout / Update- opdracht hebt uitgevoerd."

"Dit is ongeveer hoe het werkt:"

Afrekenen :

Versiebeheersystemen - 1

"Laten we nu zeggen dat we bestand B hebben gewijzigd en het naar de server willen uploaden. Om dit te doen, moeten we de opdracht Commit gebruiken."

Versiebeheersystemen - 2

"En zo werkt de opdracht Update :"

Versiebeheersystemen - 3

'Wat interessant! Zijn er nog andere commando's?'

"Ja, er zijn er nogal wat. Maar ze variëren afhankelijk van het versiebeheerprogramma dat je kiest. Dus ik probeer alleen de algemene principes uit te leggen."

"Er is ook een bewerking die samenvoegen wordt genoemd - het samenvoegen van twee documenten. Stel dat twee programmeurs tegelijkertijd hetzelfde bestand wijzigen. Dan staat het programma op de server niet toe dat beide wijzigingen worden vastgelegd. Degene die het eerst vastlegt, mag zijn of haar veranderingen."

"Dus wat doet de andere persoon?"

"Hij of zij zal worden uitgenodigd om een ​​update- operatie uit te voeren om de laatste wijzigingen van de server te halen. Trouwens, dit - een update doen voordat je vastlegt - is een goede gewoonte."

"Vervolgens zal het clientprogramma tijdens de updatebewerking proberen de lokale wijzigingen samen te voegen met de wijzigingen die van de server zijn ontvangen."

"Als de programmeurs verschillende delen van het bestand hebben gewijzigd, zal het versiebeheerprogramma ze waarschijnlijk met succes kunnen samenvoegen.  Als de wijzigingen zich op dezelfde plaats bevinden, zal het versiebeheerprogramma een samenvoegconflict rapporteren en de gebruiker vragen handmatig voeg de wijzigingen samen."

"Dit gebeurt bijvoorbeeld vaak als beide programmeurs iets toevoegen aan het einde van een bestand."

'Ik begrijp het. Al met al lijkt dat redelijk.'

"En er is nog iets: takken."

"Stel je voor dat twee programmeurs van een team de taak hebben om dezelfde module te herschrijven. Of nog beter: het helemaal opnieuw te schrijven. Totdat deze module is voltooid, kan het programma niet worden uitgevoerd en misschien zelfs niet worden gecompileerd."

"Dus wat moeten ze doen?"

"Ze gaan vooruit door branches aan de repository toe te voegen. Grofweg betekent dit dat de repository in twee delen wordt verdeeld. Niet door bestanden of mappen, maar door versies."

"Stel je voor dat elektriciteit nooit is ontdekt en robots nooit zijn uitgevonden. Dan zouden de drie bevrijdingsoorlogen nooit zijn gebeurd en zou de hele menselijke geschiedenis een heel ander pad zijn ingeslagen. "

"Dit pad is een alternatieve tak van de geschiedenis."

"Of je kunt gewoon proberen je een branch voor te stellen als simpelweg een kopie van de repository. Met andere woorden, op een gegeven moment hebben we een kloon van de repository op de server gemaakt, zodat naast de hoofdrepository (vaak de trunk ), hebben we nog een filiaal ."

"Nou, dat lijkt me begrijpelijker.

"Waarom kon je niet gewoon zeggen dat we de repository hebben gekopieerd?"

"Dit is niet eenvoudig kopiëren."

"Deze takken kunnen niet alleen van de stam worden gescheiden, maar er ook in worden samengevoegd."

"Met andere woorden, er kan wat werk worden gedaan in een branch, en als het klaar is, kun je de repository branch toevoegen aan de repository trunk?"

"Ja."

"En wat gebeurt er met de dossiers?"

"De bestanden worden samengevoegd."

"Nou, dat klinkt cool. Ik hoop dat het net zo cool is in actie."

"En nog wat. Oké, laten we even pauzeren."

"Er is hier veel nuttige informatie  "