Despre Git

Ce este Git ?
GIT-ul este un sistem de centralizare a fisierelor de tip DVCSs (Distributed Version Control Systems). Un VCS (Version Control System) este un sistem care inregistreaza schimbarile facute unui fisier sau a unui set de fisiere cu ajutorul caruia putem reveni in orice moment la o versiune mai veche a fisierului sau a intregului proiect, putem compara modificarile in timp sau putem vedea cine a modificat ultimul un proiect pentru a depista o anumita problema aparuta recent. DVCS-urile, fata de CVCS-uri (Centralized Version Control Systems) au avantajul ca, in orice moment apar probleme cu server-ul centralizat in care se stocheaza date, orice sistem care colabora cu server-ul are practic un full-backup al proiectului salvat si poate fi restaurat cu usurinta.



Cand a aparut GIT-ul si de ce?

In 2005, cand BitKeeper a incetat sa ofere serviciul gratuit, comunitatea de development a sistemului de operare Linux (in special Linus Torvalds) au fost nevoiti sa gaseasca o solutie care sa inlocuiasca BitKeeper. Cerintele lor erau: sa fie rapid, simplu, sa poata lucra cu branch-uri si sa fie eficient in proiecte mari cum era Kernelul de Linux. Din 2005, de cand a aparut, GIT a evoluat foarte mult si a reusit sa ramana bazat pe aceleasi principii.

Performanta

Performanta GIT-ului, fie ca vorbim de modificari, branch-uri noi, merge-uri sau comparari cu versiuni mai vechi este una foarte buna. Fata de alte software-uri de control a versiunii, GIT nu tine cont de numele fisierelor cand determina care ar trebui sa fie dimensiunea si istoricul de versiune a unui fisier, in schimb, GIT se focuseaza pe continutul in sine stiind ca fisierele sunt des redenumite, impartite sau rearanjate. GIT permite unei echipe sa lucreze la mai multe versiuni de proiect fara a afecta cealalta versiune, de exemplu daca apare un bug intr-o versiune mai veche a proiectului, utilizatorii pot oricand sa modifice doar versiunea specifica astfel incat se creeaza un nou branch separat pentru modificarea respectiva.

Securitate

Una dintre cele mai importante prioritati ale GIT-ului este integritatea codului sursa. Continutul fisierelor, relatia dintre fisiere si foldere, versiunile, tag-urile cat si commit-urile sunt securizate folosind algoritmul de criptare SHA1. Acesta protejeaza codul si istoricul modificarilor impotriva modificarilor accidentale sau din greseala si se asigura ca istoricul este prezent in totalitate.

Flexibilitate

Una dintre caracteristicile cheie ale GIT-ului este flexibilitatea. GIT este flexibil din mai multe puncte de vedere: suporta o varietate de workflow-uri nonliniare, este eficient atat in proiecte mari cat si in cele mici si este compatibil cu majoritatea sistemelor si protocoalelor existente.
Git a fost proiectat sa suporte branch-urile noi si tag-urile dar si operatiunile care afecteaza branch-urile si tag-urile (de exemplu: merge, revert) sunt stocate in istoricul schimbarilor. Nu toate sistemele de control al versiunilor au acest nivel avansat de stocare a schimbarilor.

Comenzi si operatiuni GIT

Operatiunile de baza in Git sunt:

  • Initialize
  • Add
  • Commit
  • Pull
  • Push

Operatiunile avansate principale sunt:

  • Branching
  • Merging
  • Rebasing

In aceasta poza putem vedea in mare mersul operatiunilor in repozitoarele Git.


Pentru a utiliza Git pe un PC cu Windows noi recomandam Git Bash. Git Bash este o interfata care ne permite sa executam linii de comanda pentru a folosi Git pe Windows si ofera functii de a rula script-uri automate.

Comenzi Git:

Initialize

Pentru a initializa un repositor folosim comanda git init. git init creeaza un repozitor Git gol sau reinitializeaza unul deja existent. Practic creeaza un director .git cu subdirectoare si fisiere de tip sablon. Daca rulam comanda git init intr-un repozitor existent nu va suprascrie lucrurile care sunt deja aici. Tot ce face este sa verifice si sa downloadeze local sabloanele recente.
Acum ca repozitorul este initializat creem niste fisiere numite hosterion.html si gazduire-web.html. Pentru a verifica daca fisierele sunt indexate folosim comanda git status.

Status

Comanda git status listeaza toate fisierele modificate local care sunt pregatite sa fie adaugate in repozitor. In cazul in care am creeat fisierele hosterion.html si gazduire-web.html ar trebui sa ne apara sub Untracked files deoarece nu sunt indexate inca. Asta inseamna ca daca facem commit modificarile nu vor fi uploadate.

Add

Aceasta comanda actualizeaza index-ul folosind fisierele curente din proiect si le prepara in zona de staging pentru urmatorul commit. Chiar daca facem modificari unui fisier modificat deja care a fost adaugat anterior el trebuie adaugat iar. Pentru a adauga fisiere in index folosim:

git add <folder>

sau

git add <fisier>

Pentru a putea explica mai departe, adaugam fisierul creeat anterior, hosterion.html in index folosind comanda git add hosterion.html Acum ca fisierul a fost adaugat putem verifica iar cu comanda git status si observam ca hosterion.html apare la Changes to be committed iar gazduire-web.html apare la Untracked files. Pentru a adauga toate fisierele din folder-ul curent in index folosim comanda git add -A

Acum ca fisierele sunt adaugate in index suntem pregatiti sa facem primul commit.

Commit

Commit se refera la inregistrarea unui snapshot al repozitorului intr-un anumit moment. Snapshot-urile care au fost deja creeate nu se vor schimba niciodata doar daca dorim sa facem exact acest lucru. Un nou commit nu suprascrie ci creeaza un nou snapshot.

Comanda pe care dorim sa o folosim este git commit -m “<mesaj>” unde inlocuim <mesaj> cu un mesaj dorit pentru a identifica mai tarziu modificarea facuta. De cele mai multe ori mesajul este legat de update-ul facut (de exemplu: git commit -m “update preturi hosting”).
Dupa ce am facut commit, daca creem un fisier nou trebuie sa il adaugam cu git add si apoi sa facem iar un commit pentru a include fisierul in urmatorul update. Cand suntem pregatiti sa urcam fisierele in repozitor urmeaza sa facem un pull.

Pull

Comanda git pull verifica toate schimbarile facute in repozitor fata de versiunea pe care o avem local. Daca gaseste fisiere noi in versiunea din repozitor atunci le downloadeaza si le adauga in repozitorul local.

Inainte de a putea folosi aceasta comanda trebuie sa specificam repozitorul central folosind comanda:
git remote add origin <link_repozitor>

Acum ca sursa repozitorului este setata putem extrage fisierele din repozitor folosind pull, pentru asta folosim comanda:
git pull origin master

Aceasta comanda copiaza toate fisierele din branch-ul principal al repozitorului in repozitorul local. In cazul in care nu sunt modificari si git pull nu copiaza nimic primim mesajul “Already up-to-date.”.

Putem extrage si fisierele dintr-un branch separat folosind comanda: git pull origin <nume_branch>

Acum ca repozitorul local este actualizat cu toate schimbarile recente e momentul sa facem schimbari asupra branch-ului folosind comanda git push.

Push

Aceasta comanda transfera commit-urile din repozitorul local catre repozitorul central. Practic fiind opusul comenzii git pull.

Cand suntem pregatiti sa urcam fisierele folosim:

git push origin master

Sau daca dorim sa urcam fisierele intr-un branch anume folosim:

git push origin <nume_branch>

Dupa ce am folosit aceasta comanda putem observa in branch ca am adaugat fisierele creeate si adaugate de noi in commit-ul anterior (hosterion.html si gazduire-web.html).

Branch-uri

Branch-urile sunt pointere specifice unui commit. Pentru a creea un branch nou putem folosi comanda git branch <nume_branch>. In momentul in care creem branch-ul aceasta are ca origine branch-ul master avand toate fisierele originale din acel repozitor.



Putem selecta branch-ul in care suntem folosind comanda git checkout <nume_branch>



Merge

Merge este o modalitate de a combina schimbarile facute pe mai multe branch-uri. Aceasta comanda ne permite sa facem mai multe branch-uri pe care putem modifica lucruri diferite decat pe branch-ul nostru si cand modificarile au fost facute cu succes sa combinam fisierele.

Comanda folosita este git merge <nume_branch> si aceasta adauga fisierele din branch-ul specificat cu fisierele din branch-ul in care lucram curent selectat cu git checkout.

De exemplu, daca dorim sa adaugam in master schimbarile facute in branch-ul hosterion folosim urmatoarele comenzi:
git checkout master
git merge hosterion



GIT este disponibil pe toate pachetele de shared hosting Linux de la Hosterion. Va puteti creea branch-uri direct pe serverele noastre urcand fisierele noi folosind direct GIT.