Despre controlul versiunilor – Git

Cred că cel mai negru coșmar al unui programator este atunci când ai un client (sau project manager) care se sucește fix după cum bate vântul. Sunt convins că nu sunt singurul care a avut parte de situații de genul:

– Fă așa!
– Ah, ba nu, fă așa!
– Știi ce? M-am răzgândit! Fă așa dar păstrează modificările de ieri!

Desigur, așa înseamnă într-un alt fel, de fiecare dată.

Ce poți face în astfel de situații?

  1. Îți iei un prieten. Nimeni nu-ți va mai spune nimic! :D
  2. Folosești version control.

Version… ce?

Controlul versiunii (VC) este o tehnologie nou apărută în mijlocul anilor ’80 și presupune urmărirea modificărilor aduse unui fișier. În principiu, e foarte simplu: e ca și cum ai face un back-up la un fișier, astfel încât te poți întoarce la o versiune mai veche, doar că ai câteva unelte în plus. De exemplu, poți vedea diferențele între două versiuni ale aceluiași fișier sau poți îmbina (merge) două versiuni ale aceluiași fișier.

Aceste treburi sunt utile atunci când lucrezi singur și necesare când lucrezi în echipă. De exemplu, dacă sunt trei programatori care lucrează la un proiect și întâmplători toți au nevoie să adauge ceva în același fișier, o pot face simultan. Programul de VC va combina modificările, rezultând un singur fișier dar care va conține toate modificările făcute de cei trei programatori. Mișto, nu? Detalii suplimentare despre VC găsești aici.

Cum abia am descoperit Git, voi face o scurtă sinteză despre ce am învățat în vreo două zile, lucrând singur. Pentru lucrul în echipă ai nevoie de un server Git, iar eu n-am avut timpul necesar configurării unuia. Atât SVN cât și Git îți permit să lucrezi fără a avea un server propriu-zis.

De ce Git?

  • Dacă acum doi ani eram destul de încântat de subversion, treburile s-au schimbat un pic după ce am primit câteva erori razna și conflicte la greu.
  • Fiecare folder conține un folder (ascuns) .svn. Dacă vrei să copiezi un folder în cadrul aceluiași proiect, te-ai scos! Mi se pare o pierdere de timp să-i dau export sau să șterg manual fiecare folder. Git-ul are un singur folder: .git. Îl ștergi? Dispare repository-ul local.
  • Nu se învârte în jurul unui repo central. Fiind un sistem de control al versiunii (VCS) distribuit, fiecare utilizator are o copie a repo-ului central. Știu, nu este mare brânză, dar un diff local este un pic mai rapid decât un diff în rețea. La fel și pentru restul de 90% din comenzi. În plus, nu ești dependent de conexiune pentru a putea face toate aceste operații. Da, știu, România este în primele locuri din lume la conexiuni de mare viteză, dar uneori îți mai pică netul sau trebuie să lucrezi în deplasare.
  • E cool, toată lumea îl folosește! :D

De ce NU Git?

Cred că cele mai puternice argumente care ar putea fi aduse ar fi că este mai dificil de configurat și că „nu există niciun tool”. Parțial adevărat.

Instalarea

Cum eu folosesc E-texteditor, am ales să folosesc cygwin, deci îți voi arăta cum se folosește în linie de comandă. Se aplică doar pentru sistemul de operare Windows. Indiferent dacă ai cygwin instalat sau nu, descarcă (din nou) setup.exe de pe site-ul oficial, rulează-l și alege calea spre cygwin-ul instalat deja (sau pune un path simplu, de genul c:\cygwin). Asigură-te că următoarele pachete sunt instalate:

  • chere;
  • git (eu le-am instalat pe toate);
  • nano (poți volosi editorul default, vim, e doar o chestie de preferințe).

Configurările suplimentare

După ce a terminat de instalat și descărcat, deschizi frumușel consola Cygwin și scrii chere -i. Asta îți va adăuga în meniul contextual din Windows Explore opțiunea “Bash prompt here”.

Dacă tot ești în consolă mai scrii și următoarele:

$ git config --global user.name "Numele Tău"
$ git config --global user.email Emailul_tău
$ git config --global core.filemode false

Pentru chestii suplimentare, cum ar fi cheile SSH, găsești aici un ghid detaliat.

Comenzi uzuale

După cum am zis, comanda chere i îți adaugă în meniul contextual „Bash […]”. Ceea ce înseamnă că nu trebuie decât să faci click dreapta pe folderul pe care vrei să-l pui sub VC și să alegi… „Bash promt”.

hint: Dacă nu apare, încearcă să apeși click dreapta în timp ce ții tasta Shift apăsată

Dacă a apărut consola, poți merge mai departe. Dacă n-a apărut, înseamnă că ești mai ghinionist ca mine, deci lasă-mi un comentariu :)

Inițializarea

Dacă ești în folderul potrivit scrii doar:

git init

Și gata. În folderul curent a mai apărut un folder .git de care nu ne atingem (acolo este repository-ul).

Este posibil să ai fișiere ce nu necesită controlul versiunii. Un folder temp, de exemplu. Creezi un fișier cu numele .gitignore (ai grijă la punctul din față!) și scrii fiecare folder pe o linie:

temp/*
ignore_this/*
*.tmp

Comenzi uzuale

Aici poate că ar fi trebuit să scriu multe. Să explic fiecare comandă ce face și de ce face. Dar m-am gândit la următoarea chestie: dacă tot există un crash course, de ce să nu îl folosim? Și dacă tot ești pe acolo, aruncă un ochi și pe 20 comenzi pentru lucrul de zi cu zi.

Concluzii

Un VCS, indiferent care (SVN, Git, Mercurial sau care or mai fi) este o unealtă puternică, indiferent dacă lucrezi singur sau în echipă. Așa cum am zis, un VCS este imperios necesar într-o echipă, evitând multe situații absurde (se lucrează direct pe server, nu se poate lucra pe același fișier simultan, echipa este dependentă de tot ce scrie fiecare – imaginează-ți ce se întâmplă când un programator generează o eroare chiar în head și durează câteva minute să repare).

Git are multe avantaje în fața celorlalte VCS-uri și, în ciuda impresiei inițiale, este simplu de folosit.

Link-uri utile

Link-uri în limba română

Link-uri generale, cu sau fără legătură directă cu Git

13 Comentarii to “Despre controlul versiunilor – Git”

  1. Felicitari, nice wrap-up :)

  2. Staicu Ionuț-Bogdan

    Felicitari, nice wrap-up :)

    Mulțumesc :)

  3. Fix din motivele are le-ai enumerat mai sus am inceput si eu sa folosesc acum ceva vreme version controlling. Ideea e ca n-am apucat sa folosesc Git-ul cum trebuia, momentan m-am rezumat la Revision History din e-text care deocamdata ma satisface.

    Oricum in general eu sunt cel mai mare dusman al meu cand vine vorba de markup si de programare, razgandindu-ma mai des decat o adolescenta de 16 ani :) incercand sa fac totul cat mai optim posibil.

    Nice review anyway.

  4. Staicu Ionuț-Bogdan

    Trece in lista si msysgit

    Oups, uitasem de el. 10x. Adăugat ;)

  5. In curand sper sa fie utilizabil Veracity.

    Intre timp eu am cam trecut pe Mercurial.

  6. Staicu Ionuț-Bogdan

    Intre timp eu am cam trecut pe Mercurial.

    Oh, cmon dude… Abia am trecut pe git! Când am descoperit svn, s-a găsit rapid unu’ să-mi spună să trec pe git. Acum, că am trecut pe git să migrez iar? NUUU!!!

  7. Esti major si vaccinat, alegi ce vrei :D

    Am cateva link-uri stranse aici, pe categorii: Git resources

  8. Staicu Ionuț-Bogdan

    Am cateva link-uri stranse aici

    Câteva? :| Cred că avem standarde diferite pentru sensul acestui cuvânt! :D 10x!

  9. ar trebui sa adaugi si res asta: http://www.gitready.com/
    e destul de buna!

  10. Staicu Ionuț-Bogdan

    Oups. My bad! Adăugat și gitready și community book.

    Thanks guys!

Show trackbacks
  1. […] mod de a învăța cum să folosești Git cât mai eficient. Cred că-ți aduci aminte că am scris despre Git cu câteva luni în urmă; ei bine, încă îl folosesc cu spor. Ba chiar mi-am tras și server […]

Ți-a plăcut articolul? Lasă un comentariu!

You can insert code snippets using BBcode:
[js].[/js] [html].[/html] [php].[/php] [css].[/css]
You can also use some HTML tags:
<blockquote>.</blockquote> <code>.</code> <a href="">.</a> <strong>.</strong> <em>.</em>

windows apple dropbox facebook twitter