Depozitul Git — este stocarea codului sursă al proiectului, în care Git urmărește fiecare modificare a fișierelor pe parcursul întregii dezvoltări. Depozitul conține istoricul complet al commiturilor, ramurilor și tagurilor, permițând dezvoltatorilor să lucreze împreună asupra codului. Conform datelor Git, 2024, depozitul este baza oricărui sistem de control al versiunilor și este utilizat în milioane de proiecte din întreaga lume.
Principalele puncte
Depozitul Git — este o structură de date în care sistemul de control al versiunilor stochează metadate și obiecte ce descriu istoricul modificărilor fișierelor proiectului. Când un dezvoltator inițializează un depozit cu comanda git init, Git creează un dosar ascuns .git în rădăcina proiectului.
În interiorul acestui dosar se află toate obiectele, referințele și fișierele de configurare necesare pentru funcționarea sistemului. Depozitul nu este legat de o locație concretă — dezvoltatorul îl poate crea local, apoi îl poate conecta la un server remote.
Git folosește modelul de depozit distribuit: fiecare participant la proiect are o copie completă a istoricului pe propriul computer. Aceasta înseamnă că majoritatea operațiilor — commit, vizualizarea istoricului, crearea ramurilor — se execută local fără a apela la server.
Conform documentației Git, arhitectura distribuită face sistemul rezistent la defecțiuni: dacă serverul cade, orice depozit local poate deveni sursa pentru restaurarea istoricului complet al proiectului.
Depozitul local — este copia proiectului pe computerul dezvoltatorului. Conține întreg istoricul commiturilor, ramurilor și tagurilor și permite executarea operațiilor commit, branch, merge și rebase fără conexiune la rețea.
Depozitul remote este găzduit pe un server și servește ca punct de sincronizare pentru toți membrii echipei. Dezvoltatorii trimit modificările lor cu comanda git push și preiau modificările altora cu comanda git pull.
Conexiunea dintre depozitul local și cel remote se configurează prin remote origin — URL-ul serverului stocat în configurația Git. Un depozit local poate fi conectat la mai multe depozite remote, ceea ce este util la lucrul cu forkuri.
Principalul avantaj al acestui model — dezvoltatorul poate lucra asupra codului în mod offline, sincronizând modificările doar atunci când este gata să trimită rezultatul.
| Caracteristică | Local | Remote |
|---|---|---|
| Locație | Pe computerul dezvoltatorului | Pe server (GitHub, GitLab) |
| Acces fără rețea | Acces complet la toate operațiile | Indisponibil fără conexiune |
| Sincronizare | Push/Pull cu remote | Primește push de la locale |
| Backup | Neprotejat împotriva pierderii datelor | Stocat pe server cu backupuri |
Modelul de stocare al Git diferă fundamental de alte sisteme de control al versiunilor. În loc să stocheze o listă de modificări (delta) între versiuni, Git stochează instantanee complete ale tuturor fișierelor proiectului la momentul fiecărui commit.
Fiecare obiect din depozit este identificat printr-un hash SHA-1 unic de 40 de caractere. Dacă conținutul unui fișier nu s-a schimbat între commituri, Git nu creează un nou obiect, ci reutilizează unul existent — astfel se economisește spațiu.
Git folosește patru tipuri de obiecte: blob (conținutul fișierului), tree (structura directorului), commit (instantaneu cu metadate) și tag (referință numită către un commit). Toate obiectele sunt stocate în dosarul .git/objects.
Conform Git Internals, modelul obiectelor Git asigură integritatea datelor: orice modificare a conținutului unui fișier duce la un hash nou, ceea ce face imposibilă modificarea ascunsă a istoricului.
Dosarul .git — este inima depozitului. Fără el, Git nu poate urmări modificările, iar un director obișnuit rămâne doar o colecție de fișiere. Înțelegerea structurii acestui dosar ajută la diagnosticarea problemelor cu depozitul.
Fișierul HEAD merită o atenție deosebită. În stare normală conține o referință simbolică către o ramură, de exemplu ref: refs/heads/main. În starea detached HEAD indică direct către un commit — aceasta înseamnă că noile commituri nu vor fi atașate niciunei ramuri.
Lucrul cu depozitul Git include un set de operații de bază pe care dezvoltatorul le execută zilnic. Fiecare operație modifică starea depozitului, adăugând obiecte noi sau mutând referințe.
Operațiile push și pull — sunt singurele care necesită conexiune la serverul remote. Toate celelalte operații se execută complet local, ceea ce asigură o viteză mare de lucru chiar și cu un istoric voluminos.
Fiecare fișier din depozit trece prin patru stări: untracked (neurmărit), modified (modificat), staged (pregătit) și committed (comis). Git urmărește doar fișierele care au fost adăugate explicit prin git add sau se află deja în istoricul commiturilor.
Înțelegerea acestui model — cheia pentru o lucrare eficientă cu Git. Dezvoltatorul poate pregăti selectiv pentru commit doar o parte din fișierele modificate, creând commituri logic complete cu descrieri clare.
Depozitele remote sunt de obicei găzduite pe platforme specializate care oferă interfață web, sistem de gestionare a accesului și instrumente suplimentare pentru dezvoltarea colaborativă.
Alegerea platformei depinde de dimensiunea echipei, cerințele de confidențialitate și integrările necesare. Pentru dezvoltarea mobilă se alege adesea GitHub datorită suportului larg al comunității și integrării cu instrumentele CI/CD pentru iOS și Android.
Să analizăm un scenariu practic: un dezvoltator clonează un depozit existent, creează o ramură nouă, face modificări și le trimite pe server. Fiecare comandă demonstrează lucrul cu diferite componente ale depozitului.
# Clonarea depozitului remote
git clone https://github.com/user/mobile-app.git
# Navigarea în directorul proiectului
cd mobile-app
# Crearea unei noi ramuri feature și comutarea pe ea
git checkout -b feature/auth
# Verificarea stării fișierelor modificate
git status
# Adăugarea tuturor modificărilor în staging area
git add .
# Crearea unui commit cu descriere
git commit -m "Add authentication module"
# Trimiterea modificărilor în depozitul remote
git push origin feature/auth
Comanda git status — una dintre cele mai utile în munca de zi cu zi. Afișează ce fișiere au fost modificate, care sunt pregătite pentru commit și care nu sunt deloc urmărite de Git.
Pentru analiza istoricului depozitului se folosește comanda git log cu diverse flaguri de formatare. Aceasta afișează cronologia commiturilor, autorii, datele și identificatorii SHA-1.
# Vizualizarea istoricului cu graficul ramurilor
git log --oneline --graph --all
# Vizualizarea modificărilor într-un commit specific
git show a1b2c3d
# Compararea stării curente cu ultimul commit
git diff HEAD
# Vizualizarea istoricului unui fișier specific
git log --follow src/MainActivity.kt
Flagul --graph afișează un grafic ASCII al ramificărilor, ceea ce este deosebit de util în depozitele cu activitate intensă pe mai multe ramuri. Pentru proiectele mobile cu lansări frecvente, graficul vizual ajută la evaluarea rapidă a structurii dezvoltării.
Întrebări frecvente
Depozitul — este o stocare tehnică a codului cu istoricul modificărilor. Proiectul — este un concept mai larg, care include depozitul, sistemul de gestionare a sarcinilor, documentația și procesele de dezvoltare. Un proiect poate conține mai multe depozite.
Creați un depozit nou prin interfața web GitHub, apăsând butonul New. Specificați numele, descrierea și nivelul de acces. Apoi clonați depozitul pe mașina locală sau conectați un depozit local existent prin git remote add origin.
Dacă depozitul remote a fost șters de pe server, dar cel puțin un dezvoltator are o copie locală, depozitul poate fi restaurat. Este suficient să creați un nou depozit remote și să executați git push --force din copia locală cu întreg istoricul.
Forkul — este o copie a depozitului altcuiva pe contul dumneavoastră. Primiți o copie completă a istoricului și puteți face orice modificări fără a afecta originalul. Forkurile sunt folosite pentru participarea la proiecte open-source prin Pull Request.
Utilizați git gc pentru comprimarea obiectelor și eliminarea datelor inaccesibile. Ștergeți fișierele mari din istoric prin git filter-branch sau git filter-repo. Pentru proiectele cu fișiere binare, luați în considerare Git LFS (Large File Storage).
Concluzii
Vom dezvolta o aplicație mobilă la cheie
IT Sectr creează aplicații iOS și Android pentru startup-uri și afaceri din 2017. Vă vom consilia și vă vom propune cea mai bună soluție.
Citiți și