"Bună, Amigo!"

"Bună!"

„Astăzi vă voi povesti despre sistemele de control al versiunilor”.

„După cum probabil știți deja, programele sunt adesea foarte mari și durează foarte mult să scrieți. Uneori, zeci de oameni își pot petrece ani de zile scriind un program.”

„Proiectele cu milioane de linii de cod sunt o realitate”.

— Uau.

"Totul este foarte complicat. Oamenii intervin adesea unul cu celălalt și adesea modifică același cod și așa mai departe."

„Pentru a pune ordine în această mizerie, programatorii au început să folosească sisteme de control al versiunilor pentru codul lor”.

Un sistem de control al versiunilor este un program format dintr-un client și un server.

„Programul stochează date (codul scris de programatori) pe un server, iar programatorii le adaugă sau le modifică folosind clienți.”

„Principala diferență dintre un sistem de control al versiunilor și programele care pur și simplu fac posibilă lucrul în colaborare pe documente este că stochează toate versiunile anterioare ale tuturor documentelor (fișiere de cod).”

"Poți să-mi dai mai multe detalii. Cum funcționează totul?"

„Imaginați-vă că sunteți programator și doriți să faceți mici modificări codului sursă al unui program stocat într-un depozit de pe server.”

„Iată ce trebuie să faci:”

"1) Conectați-vă la server."

„2) Copiați cea mai recentă versiune a tuturor fișierelor pe computer folosind comanda Checkout.”

"3) Efectuați modificări la fișierele necesare."

"4) Rulați programul local pentru a vă asigura că se compilează și rulează."

„5) Trimiteți „modificările” dvs. către server folosind comanda Commit.”

— În general, asta are sens.

"Dar mai sunt. Imaginează-ți că ajungi la serviciu dimineața, dar este deja ora prânzului în India. Așa că colegii tăi indieni au făcut deja modificări și și-au trimis modificările în depozitul tău de pe server."

"Trebuie să lucrați cu cea mai recentă versiune a codului. Deci executați comanda Actualizare ."

„Cum este diferit de Checkout ?”

Checkout este conceput pentru a copia toate fișierele depozitului, dar Update actualizează numai fișierele care au fost actualizate pe server de când ați executat ultima dată o comandă Checkout / Actualizare .”

„Aproximativ așa funcționează:”

Checkout :

Sisteme de control al versiunilor - 1

„Acum, să presupunem că am schimbat fișierul B și dorim să-l încărcăm pe server. Pentru a face acest lucru, trebuie să folosim comanda Commit .”

Sisteme de control al versiunilor - 2

„Și iată cum funcționează comanda Actualizare :”

Sisteme de control al versiunilor - 3

"Ce interesant! Există alte comenzi?"

"Da, sunt destul de multe. Dar ele variază în funcție de programul de control al versiunilor pe care îl alegeți. Deci, încerc să explic doar principiile generale."

„Există și o operațiune numită fuzionare — unirea a două documente. Să presupunem că doi programatori sunt modificați același fișier în același timp. Apoi programul de pe server nu va permite comiterea ambelor modificări. Cine comite primul poate să-și adauge sau schimbările ei”.

— Deci ce face cealaltă persoană?

„El sau ea va fi invitat să efectueze o operațiune de actualizare pentru a prelua cele mai recente modificări de pe server. Apropo, aceasta – a face o actualizare înainte de a se angaja – este o practică bună.”

„Apoi, în timpul operațiunii de actualizare, programul client va încerca să îmbine modificările locale cu modificările primite de la server.”

„Dacă programatorii au schimbat diferite părți ale fișierului, atunci programul de control al versiunii va putea probabil să le îmbine cu succes.  Dacă modificările sunt în același loc, atunci programul de control al versiunii va raporta un conflict de îmbinare și va solicita utilizatorului să facă manual îmbina modificările.”

„De exemplu, acest lucru se întâmplă adesea când ambii programatori adaugă ceva la sfârșitul unui fișier.”

— Înțeleg. În general, pare rezonabil.

— Și mai e ceva: ramuri.

„Imaginați-vă că doi programatori dintr-o echipă sunt însărcinați să rescrie același modul. Sau și mai bine – să-l rescrie de la zero. Până la finalizarea acestui modul, programul nu va putea rula și s-ar putea să nu fie compilat.”

— Deci, ce ar trebui să facă?

„Ei avansează prin adăugarea de ramuri în depozit. În general, acest lucru înseamnă că depozitul este împărțit în două părți. Nu după fișiere sau directoare, ci pe versiuni.”

„Imaginați-vă că electricitatea nu a fost niciodată descoperită și roboții nu au fost inventați. Atunci cele trei războaie de eliberare nu s-ar fi întâmplat niciodată și toată istoria omenirii ar fi urmat un drum complet diferit.

„Această cale este o ramură alternativă a istoriei”.

„Sau puteți încerca să vă imaginați o ramură ca o simplă copie a depozitului. Cu alte cuvinte, la un moment dat, am făcut o clonă a depozitului de pe server, astfel încât, pe lângă depozitul principal (denumit adesea trunk) . ), avem o altă sucursală ."

„Ei bine, asta pare mai de înțeles.

„De ce nu ai putut spune că am copiat depozitul?”

„Aceasta nu este o simplă copiere”.

„Aceste ramuri nu numai că pot fi separate de trunchi, ci și îmbinate în el”.

„Cu alte cuvinte, unele lucrări se pot face într-o ramură, iar apoi, când este terminată, puteți adăuga ramura depozitului la trunchiul depozitului?”

"Da."

— Și ce se va întâmpla cu dosarele?

„Fișierele vor fi îmbinate”.

"Ei bine, asta sună cool. Sper că este la fel de cool în acțiune."

— Și apoi niște. Bine, hai să luăm o pauză.

„Există o grămadă de informații utile  aici