Usare repository di grandi dimensioni
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
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: