git sparse-checkout în Git

Descărcarea și afișarea exclusivă a anumitor directoare dintr-un monorepo gigant, economisind gigabytes de spațiu pe disc.

Sintaxă comandă
git sparse-checkout set <directoare>

În marile companii de tehnologie, întregul cod este stocat frecvent într-un Monorepo gigant de zeci sau sute de gigabytes ce cuprinde zeci de servicii de backend, aplicații mobile și frontend-uri. Dacă un programator lucrează doar la frontend-ul web, descărcarea tuturor serviciilor de backend pe laptop este complet inutilă și încetinește enorm IDE-ul.

Funcționalitatea de git sparse-checkout permite clonarea depozitului fără a aduce pe disc întregul arbore de fișiere. Îi transmiți lui Git ce directoare te interesează (de exemplu: doar folderul `apps/web` și `packages/ui`).

Git populează pe disc exclusiv directoarele solicitate, păstrând în fundal integritatea istoricului Git complet. Comenzile de commit, push și pull funcționează normal, dar viteza de indexare în editor și consumul de disc sunt optimizate masiv.

Sintaxă, opțiuni și concepte cheie

Opțiune / Concept Descriere practică
init --cone Inițializează modul con (cone mode) optimizat pentru selectarea de ierarhii de directoare.
set Definește lista explicită a directoarelor care trebuie să apară fizic pe disc.
add Adaugă un director suplimentar la lista existentă de directoare vizibile.
disable Dezactivează modul sparse și aduce pe disc întregul depozit complet.

Exemple practice și cod

Exemplul 1: Clonarea unui monorepo gigant descărcând doar modulul de frontend

Cum se combină clonarea superficială fără checkout cu `sparse-checkout`.

# 1. Clonăm metadatele fără a face checkout pe fișiere (economie imediată):
$ git clone --no-checkout https://github.com/org/corp-monorepo.git
$ cd corp-monorepo

# 2. Activăm sparse-checkout:
$ git sparse-checkout init --cone

# 3. Solicităm exclusiv folderul de frontend și componente:
$ git sparse-checkout set client/web packages/components

# 4. Facem checkout pe ramura dorită:
$ git checkout main

# În director apar doar cele două foldere selectate, chiar dacă repo-ul are 50GB!

Rezultat & Impact

Spațiu economisit de la 50 GB la 300 MB cu timp de clonare redus de la 20 de minute la 15 secunde.

Greșeli frecvente și bune practici

  • Utilizarea modului tradițional non-cone cu expresii regulate complexe pe repositorii masive, ceea ce degradează viteza algoritmului de potrivire.
  • Uitarea că fișierele ascunse continuă să existe logic în repo; dacă ștergi o referință dintr-un fișier vizibil care depinde de un folder ascuns, testele de CI pot eșua.

Ghiduri și noțiuni înrudite