despre versionarea codului

📚 scurt context

Mai toate aplicațiile au apărut ca urmare a unei nevoi — o astfel de nevoie a fost aceea de a putea urmări și gestiona toate schimbările făcute de-a lungul timpului asupra unui fișier sau set de fișiere. Așa au apărut sistemele de control al versiunilor (aka version control, aka source control, aka revision control, etc.).

viata fara sistem de versionare
viata fara sistem de versionare

Câteva exemple de domenii și contexte unde sunt utilizate frecvent aceste tipuri de sisteme:

  • dezvoltare software
  • proiecte de echipă unde mai mulți oameni lucrează asupra acelorași fișiere (documente, texte, cod sursă, etc.)
  • gestionarea documentațiilor tehnice sau administrative în companiile mari
  • proiecte de design grafic
  • zona de DevOps pentru versionarea configurațiilor de infrastructură
  • scrierea de conținut de către autori sau editori care colaborează la redactarea articolelor, cărților sau altor tipuri de conținut

🤯 Versionarea este o practică esențială în dezvoltarea software, dar ghici ce? nimeni nu te învață asta – nici în facultate, nici la primul job. E ca și cum toți presupun că te-ai născut știind Git. Așa că vei învăța singur, pe repede înainte, cu frică să nu strici ceva.

📣 Detaliile următoare au ca punct de plecare dezvoltarea de software și gestionarea versiunilor pentru codul sursă aferent aplicațiilor.

🛟 cum mă ajuta un astfel de tool?

Indiferent de soluția particulară de versionare a codului pe care alegi să o folosești, aceasta te va ajuta cu următoarele:

  • vei avea un istoric complet al tuturor modificărilor făcute asupra fișierelor versionate de-a lungul timpului; dacă ai curiozitatea să afli cum arăta codul sursă acum 5 ani, vei putea face asta
  • poți compara versiuni diferite ale codului, ceea ce este extrem de util atunci când dezvolți noi funcționalități sau investighezi probleme din versiuni mai vechi ale aplicației
  • poți reveni rapid la o versiune anterioară a codului — de preferat una funcțională 😁
  • posibilitatea de a avea mai multe persoane care lucrează pe același proiect în același timp, fără să vă călcați pe cod
  • îți oferă răspunsuri pentru întrebări de genul: cine a modificat un anumit fișier? când s-a făcut modificarea? ce modificări au fost făcute? 🕵️ cine a scris tâmpenia asta de cod?

📊 tipuri de sisteme de versionare

Sistemele de versionare a codului pot fi grupate în următoarele categorii:

  • sisteme de versionare locale
    • rulează complet local și au în spate o simplă bază de date care menține toate versiunile fișierelor versionate
    • 👎 nu pot fi folosite pentru munca colaborativă în echipă — mai mulți programatori nu pot colabora la dezvoltarea unei aplicații
    • un exemplu cunoscut de sistem de versionare local este GNU RCS
  • sisteme de versionare centralizate
    • adresează problema principală a sistemelor de versionare locale și permit munca colaborativă în echipă
    • presupun o componentă centrală tip server care conține tot istoricul, fișierele versionate și versiunea curentă a proiectului. Programatorii pot obține și actualiza fișierele versionate interacționând cu această componentă centrală
    • acest tip de sistem de versionare a reprezentat standardul timp de mulți ani
    • 👎 în cazul în care componenta tip server nu poate fi accesată din diverse motive (hard-disk defect, probleme de configurare/rețea, etc.), niciun programator nu mai poate obține sau modifica fișierele versionate
    • exemple de sisteme de versionare centralizate: Subversion, CVS, Perforce
  • sisteme de versionare distribuite
    • acest tip de sistem este cel mai utilizat în prezent pentru versionarea codului sursă
    • comparativ cu sistemele de versionare centralizate, tot istoricul proiectului și fișierele versionate există și pe PC-ul fiecărui programator, odată ce acesta și-a descărcat local proiectul; practic, se comportă ca și cum ai avea un backup complet al proiectului local.
    • majoritatea operațiilor cu sistemul de versionare sunt foarte rapide și nu implică o interacțiune cu un server central
    • acest tip de sistem de versionare este utilizat frecvent în proiecte software complexe, formate din mai mulți programatori
    • exemple de sisteme de versionare distribuite: Git, Mercurial, GNU Bazaar

🪚 ce tool de versionare să folosesc?

ce tool de versionare sa folosesc

🧠 de ce să îmi bat capul cu Git?

Oricare ar fi rolul tău într-o echipă de dezvoltare software — dev, tester, băiatul de la DevOps, etc. — sunt șanse mari să întâlnești Git pe orice proiect. Și nu doar că o să-l saluți ocazional, ci o să petreci timp serios cu el — o să devină prietenul sau coșmarul tău zilnic 😁.

Spre deosebire de multe tool-uri, librării sau framework-uri care se schimbă frecvent de-a lungul timpului, conceptele și funcționalitățile de bază ale Git rămân relativ constante, ceea ce-l transformă într-un tool valoros pe termen lung.

Dacă îți faci puțin curaj să înțelegi cum funcționează și să înveți câteva comenzi de bază, o să-ți faci munca de zi cu zi mult mai ușoară.


Acest articol face parte din seria de articole 🔗 ghid de supraviețuire pentru git.