Lavorare con repository di grandi dimensioni

Completato

Git è un ottimo sistema di controllo della versione ampiamente adottato e consigliato, ma alcune preoccupazioni devono essere prese in considerazione quando si adottano repository di grandi dimensioni.

Anche se la presenza di una copia locale dei repository in un sistema di controllo della versione distribuita è funzionale, può essere un problema significativo quando sono presenti repository di grandi dimensioni.

Ad esempio, Microsoft ha rilevato questo problema durante la migrazione di un repository con più di 300 GB di dati da un sistema interno a Git.

Perché i repository diventano di grandi dimensioni

Esistono due cause principali per i repository di grandi dimensioni:

  • Lunga storia
  • File binari di grandi dimensioni

Clone superficiale

Se gli sviluppatori non necessitano di tutta la cronologia disponibile nei repository locali, è consigliabile implementare un clone superficiale.

Consente di risparmiare spazio sia nei sistemi di sviluppo locale che nel tempo necessario per la sincronizzazione.

È possibile specificare la profondità del clone da eseguire:

git clone --depth [depth] [clone-url]

È anche possibile ridurre i cloni filtrando rami o clonando solo un singolo ramo.

VFS per Git

VFS per Git consente di usare repository di grandi dimensioni. Richiede un client Git LFS.

I comandi Git tipici non sono interessati, ma Git LFS funziona con il file system standard per scaricare i file necessari in secondo piano quando è necessario scaricare file dal server.

Il client Git LFS è stato rilasciato come open source. Il protocollo è uno semplice con quattro endpoint simili agli endpoint REST.

Per altre informazioni sui repository di grandi dimensioni, vedere: Uso di file di grandi dimensioni e file system virtuale per Git: Abilitare Git su scala aziendale.

Scalare

Screenshot dell'icona Scalar.

Scalare è un'applicazione .NET Core disponibile per Windows e macOS. Con strumenti ed estensioni per Git per consentire a repository di grandi dimensioni di ottimizzare le prestazioni dei comandi Git. Microsoft lo usa per i repository di Windows e Office.

Se Azure Repos ospita il repository, è possibile clonare un repository usando il protocollo GVFS .

Si ottiene abilitando alcune funzionalità Git avanzate, ad esempio:

  • Clone parziale: riduce il tempo necessario per ottenere un repository funzionante, poiché gli oggetti Git non vengono scaricati tutti immediatamente.
  • prelettura in background: scarica i dati degli oggetti Git da tutti i repository remoti ogni ora, riducendo il tempo per i comandi git fetch in primo piano.
  • Sparse-checkout: limita le dimensioni della directory di lavoro.
  • monitoraggio del file system: tiene traccia dei file modificati di recente ed elimina la necessità di Git di analizzare l'intero albero di lavoro.
  • Commit-graph: accelera i processi di attraversamento dei commit e i calcoli di raggiungibilità, velocizzando comandi come git log.
  • multi-pack-index: consente ricerche rapide di oggetti in molti file pack.
  • repack incrementale: ricomprime i dati Git compressi in un minor numero di file pack senza interrompere i comandi simultanei usando l'indice multi-pack.

Nota

L'elenco delle funzionalità configurate automaticamente da Scalar viene aggiornato quando viene rilasciata una nuova versione di Git.

Per altre informazioni, vedere: