Git

Git este o modalitate de version control, creată pentru a gestiona proiecte întregi, pentru a urmări evoluția sa în timp, pentru a facilita munca în echipă și pentru a avea oricând un backup al proiectului.

Version control

Version control se referă la urmărirea și gestionarea modificărilor făcute asupra proiectelor. Acestea îi ajută pe programatori să lucreze mai rapid și mai inteligent. Deoarece sunt stocate într-o bază de date din cloud, orice modificare sau greșeala făcută poate fi inversată. Un exemplu concret poate fi apariția unui bug la nivelul celei mai noi surse a proiectului. Mulțumită version controlului, aceasta poate fi comparată linie cu linie cu orice altă versiune mai veche pentru gasirea mai rapidă a problemei.

Git repositories

Un git repository este un folder .git aflat în fișierul rădăcină al proiectului. Aici sunt stocate infomațiile cu privire la proiect, precum istoricul modificărilor. Acesta are o versiune separată, stocată în cloud, într-o bază de date a unui third party precum GitLab sau GitHub. Cele două se pot sincroniza cu ajutorul comenzilor de git, despre care vom vorbi puțin mai târziu. Un git repository poate fi inițializat direct într-un proiect sau poate fi clonat pentru a fi folosit de alți programatori.

Setup

În acest curs vom folosi un IDE numit CLion. De asemenea vom folosi compilatorul de la Visual Studio.

  1. Instalați Visual Studio Community Edition și CLion.

Odată instalat VS, acesta trebuie configurat din Visual Studio Installer.

12

10

Accesând opțiunea de Modify, putem selecta pachetele pe care le dorim. Avem nevoie numai de Desktop Development with C++, restul pot fi debifate.

11

  1. Instalați Git.

Odată instalat Git, acesta trebuie configurat cu un username si un email, care vor apărea în commiturile efectuate ulterior.

git config --global user.name "John Doe"
git config --global user.email [email protected]

Pentru a vedea setările curente, puteți apela

git config --list

De asemenea, ne trebuie o cheie ssh, pentru a putea clona mai departe proiectele. Pentru a o genera trebuie apletă comanda ssh-keygen, pentru care vom lăsa valorile cerute ca default, apăsând enter când consola va cere un input. După aceea vom apela cat ~/.ssh/id_rsa.pub pentru a o afișa.

ssh-keygen
cat ~/.ssh/id_rsa.pub

Copiați cheia, deoarece aceasta trebuie inserată în GitLab. Pentru a o adăuga, accesați Profile/ Edit profile/ SSH Keys, de unde puteți adăuga o cheie nouă.

14

13

Inițializare

Inițializarea se face local, apelând comanda git init în root folder. Aceasta va crea un nou folder .git, unde vor fi salvate toate informațiile cu privire la repository. Cu toate acestea, o metodă mai simplă este clonarea.

Clonare

O metodă foarte simplă și cunoscută de creare locală a unui proiect de git este clonarea. Aceasta se bazează pe existența unui proiect remote, pe care îl copiază local. Pașii care trebuie urmați utilizând platforma GitLab (aceștia sunt similari și pentru alte platforme, precum GitHub):

  • Crearea unui nou repo pe GitLab, unde se vor completa numele proiectului, adresa URL a acestuia (unde se poate specifica userul pentru care este făcut proiectul sau grupul) și vizibilitatea 2

  • Obținerea adresei SSH (recomandat) sau URL a proiectului 3

  • Clonarea sa locală

git clone [email protected]:username/projectname.git

Acum că proiectul se află local, îi putem face modificări.

Întreținerea unui repo

În folderul nou apărut putem crea ce fișiere dorim, pe care apoi să le sincronizăm cu repo-ul din cloud, apelând căteva funcții din consolă. Pentru a adăugă schimbările se folosește comanda git add, urmată de sursă. Dacă dorim să verifiDacă vrem să dăm push la întreg proiectul vom folosi git add .. Dacă dorim să verificăm schimbările detectate, putem apela comanda git status. Fișierele scrise cu verde sunt modificate și adăugate la commit, iar cele cu roșu nu fac parte din acesta. Apoi, trebuie sa creăm un commit, folosind comanda git commit -sm, urmat de numele comitului. Acesta ar trebui să fie cât mau sugestiv cu putință. Pasul final este sa apelăm comanda git push, care va da submit la commit, iar acesta va fi actualizat în cloud. În acest mod, repo-ul local este sincronizat cu cel remote.

cd projectname
git add . 
git status
git commit -sm "Commit Name"
git push

Fișiere speciale

Git recunoaște mai multe tipuri de fișiere ca fiind speciale. Printre acestea se numără .gitignore, care specifică fișierele sau folderele care sunt ignorate de git și nu sunt incluse în commit. Acesta are scopul de a nu ocupa spațiul limitat de pe GitLab cu fișiere mari, precum imagini sau librării, care nu au legătură cu funcționalitatea proiectului sau există deja în mediul online și sunt ușor de obținut. Un exemplu de astfel de fișier, special pentru CLion se află aici.

Un alt fișier special este README.md, care are ca scop scrierea unei documentații cu privire la proiect, din care să reiasă scopul proiectului, modul de utilizare și poate chiar cel de funcționare. Acesta este scris în markdown. Proiectul poate fi creat de la început cu un README din pagina de creare de pe GitLab.

8

De asemenea, mai există fișiere precum .gitattributes, .gitmodules sau .mailmap, ale căror funcționalități se pot găsi aici.

4

Branches

Un branch este o alta versiune a proiectului inclusă în repo. Un repo poate găzdui mai multe branchuri. Acestea te ajută să lucrezi la un feature specific al proiectului sau la a avea mai multe versiuni ale proiectului. De exemplu, un proiect poate avea un master branch, care sa fie versiunea oficială a sa, și un develop branch, în care programatorii să lucreze. Atunci cand o nouă versiune este gata, cele doua branchuri pot fi merge-uite, astfel actualizând varianta oficială a proiectului.

Orice proiect de git are default un branch master. Pentru a crea un branch nou se poate apela git checkout -b branchname. Pentru a schimba branchul activ, se poate apela git checkout branchname.

Merge Request

Atunci când vrem să unim branchurile, de exemplu cand am creat un branch separat pentru a rezolva un bug, iar acum vrem să propagăm schimbările în master branch, putem să facem merge între branchuri. Dacă ne situam în brancul master master(prin apelarea git checkout master), putem apela git merge branchname pentru a adăuga schimbările facute în branchul branchname la master branch.

9

Exerciții

Acum vom crea un repo pentru un proiect:

  1. Creați un repo nou pe GitLab și inițializați-l cu un fișier README.md.
  2. Faceți o clonă locală a repo-ului.
  3. Creați un folder src în root și adăugați fișierele create în Cursul 4.
  4. Da-ți commit la root.