Usare repository di grandi dimensioni

Completato

Git è un ottimo sistema di controllo delle versioni ampiamente adottato e consigliato, ma è necessario prestare attenzione ad alcuni aspetti quando si usano repository di grandi dimensioni.

Anche se avere una copia locale dei repository in un sistema distribuito di controllo della versione è utile, può costituire un notevole problema se i repository sono di grandi dimensioni.

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

Perché le dimensioni dei repository aumentano

Sono due le cause principali per i repository di grandi dimensioni:

  • Cronologia relativa a un lungo periodo
  • 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 infatti di risparmiare lo spazio nei sistemi di sviluppo locali e il tempo necessario per la sincronizzazione.

È possibile specificare la profondità del clone che si vuole 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 è utile per i repository di grandi dimensioni. Richiede un client LFS Git.

I comandi Git tipici non sono interessati, ma LFS Git è compatibile con il file system standard e consente di scaricare i file necessari dal server in background.

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

Per altre informazioni sui repository di grandi dimensioni, vedere Working with large files e Virtual File System for Git: Enable Git at Enterprise Scale.

Scalare

Screenshot dell'icona di Scalar.

Scalar è un'applicazione .NET Core disponibile per Windows e macOS. Include 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.

A questo scopo, vengono abilitate alcune funzionalità Git avanzate, ad esempio:

  • Partial clone: consente di ridurre il tempo necessario per ottenere un repository funzionante non scaricando immediatamente tutti gli oggetti Git.
  • Background prefetch: consente di scaricare i dati dell'oggetto Git da tutti i repository remoti ogni ora, riducendo il tempo per le chiamate git fetch in primo piano.
  • Sparse-checkout: consente di limitare le dimensioni della directory di lavoro.
  • File system monitor: consente di tenere traccia dei file modificati di recente ed elimina la necessità che Git analizzi l'intero albero di lavoro.
  • Commit-graph: consente di accelerare i percorsi di commit e i calcoli di raggiungibilità, velocizzando comandi come git log.
  • Multi-pack-index: consente di eseguire ricerche rapide di oggetti tra molti file di pacchetto.
  • Incremental repack: consente di creare un nuovo pacchetto dai dati Git compressi in un numero inferiore di file di pacchetto senza interrompere i comandi simultanei con multi-pack-index.

Nota

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

Per altre informazioni, vedi: