Vai al contenuto principale

Panoramica su Git Large File Storage (LFS)

Inizia a usare Git Large File Storage (LFS) nei tuoi repository per gestire file binari di grandi dimensioni.
· 9 min leggi

Scopri con l'IA

Git è uno strumento ampiamente utilizzato per il controllo di versione che aiuta a gestire progetti di sviluppo software, workflow di data science e persino repository di documentazione. Tuttavia, il Git tradizionale ha dei limiti nella gestione dei file di grandi dimensioni. I file grandi vengono duplicati a ogni commit, causando gonfiore del repository e workflow più lenti perché è necessario copiare più copie dei file grandi quando si eseguono i pull delle modifiche. Per questo motivo, gestire file grandi con Git può risultare inefficiente per i seguenti motivi:

  • Dimensione elevata del repository: Archiviare file grandi direttamente in un repository Git ne aumenta la dimensione complessiva, rendendo lente le operazioni di clonazione e fetch, soprattutto quando si lavora su un repository remoto che può richiedere il caricamento/scaricamento dei file.
  • Archiviazione e versionamento inefficienti: Ogni volta che un file grande viene modificato, Git ne salva una nuova versione nella cronologia, causando un rapido aumento delle dimensioni del repository.
  • Problemi di prestazioni: Con un repository grande, le operazioni Git (ad esempio, clone, pull, push) diventano significativamente più lente e richiedono più spazio di archiviazione.

In questa guida daremo uno sguardo approfondito a Git Large File Storage (Git LFS), un'estensione di Git che aiuta con i file grandi nel tuo repository. Consente di archiviare in modo più efficiente le modifiche ai file di grandi dimensioni senza duplicazioni extra o archiviazione aggiuntiva. Dovresti usarlo ogni volta che prevedi di avere grandi file binari nel tuo repository. Inizierò spiegando più nel dettaglio cos'è, come funziona, quando usarlo e come configurarlo in modo efficace.

Se sei alle prime armi con Git, dai un'occhiata alla nostra guida Come imparare Git e al corso Introduzione a Git. 

Che cos'è Git LFS?

Git Large File Storage (Git LFS) è un'estensione per Git che migliora la gestione dei file di grandi dimensioni.  

Modifica il modo in cui Git gestisce fetch e clone aggiungendo funzionalità per recuperare i dati da un repository remoto in modo lazy e introducendo un'astuta gestione dei file in Git. 

Per il resto, l'esperienza utente è fluida e identica al Git normale.

In cosa Git LFS differisce dal tracciamento standard di Git

Nel Git tradizionale, salviamo l'intera cronologia del repository nella directory .git. Questo include i file di testo effettivi che sono stati modificati nel tempo. Inoltre, interi repository vengono scaricati quando eseguiamo git fetch o git clone così da avere tutti i file subito disponibili. Con Git LFS, alcune cose cambiano. 

Per prima cosa, Git LFS sostituisce i file grandi con puntatori leggeri allo storage remoto, riducendo la necessità di archiviare ogni file. In secondo luogo, i file grandi vengono scaricati solo al checkout del branch, il che significa che scarichiamo i file grandi solo quando siamo pronti a lavorarci. 

Infine, gestisce l'archiviazione del tuo repository locale ripulendo le vecchie versioni dei file per mantenere un ambiente di lavoro ordinato.

Come funziona Git LFS?

Git LFS segue un meccanismo di archiviazione basato su puntatori. Come accennato, quando specifichi un file da tracciare con LFS, Git LFS lo sostituisce con un file puntatore nel repository e colloca anche una copia locale in cache. 

Quando esegui un push dei commit, la cache locale viene aggiornata su uno store remoto (ad esempio, server LFS di GitHub, GitLab, Bitbucket). Se ci sono modifiche e fai checkout, tali modifiche aggiornano la cache locale per fornirti la copia di lavoro più recente. 

Se vuoi approfondire uno dei repository remoti più popolari, GitHub, dai un'occhiata a questo corso Introduzione a GitHub.

I vantaggi dell'uso di Git LFS sono molti. Mantiene le dimensioni del repository contenute e gestibili. Migliora anche le prestazioni per i team che lavorano con file grandi. Inoltre, evitando duplicazioni inutili di file di grandi dimensioni, mantiene la dimensione del repository locale sotto controllo.

Configurare Git LFS

Prima di usare Git LFS ci sono alcuni passaggi di configurazione. È un processo relativamente semplice che comporta l'installazione dell'estensione. Se hai repository esistenti, dovrai migrarli. Se stai creando un nuovo repository, puoi semplicemente inizializzare Git LFS.

Installare Git LFS

Per usare Git LFS, devi installarlo sul tuo sistema. Il modo più semplice è andare sul sito web di git-lfs e installare i file. Una volta fatto, esegui quindi git lfs install una volta nella tua console dei comandi per inizializzare e installare completamente Git LFS.

Utilizzare Git LFS

Una volta installato, dovrai assicurarti che Git LFS sia configurato per ogni repository.  I vari tracker Git remoti (ad es. GitHub vs Bitbucket) avranno passaggi leggermente diversi. È meglio seguire i passaggi consigliati per il tuo specifico tracker Git remoto. In linea generale, se inizializzi un nuovo repository, puoi eseguire git lfs install in quel repository per inizializzare gli hook e poi aggiungere i file da tracciare. Se hai un repository esistente, puoi usare git lfs migrate e poi seguire le procedure di pulizia della directory .git:

git reflog expire --expire-unreachable=now --all
git gc --prune=now

Usare Git LFS in un progetto

Vediamo alcune modalità d'uso di Git LFS in un progetto. Tratteremo i passaggi per tracciare, fare commit, clonare e fare pull di file grandi da un repository Git LFS.

Tracciare file grandi (git lfs track)

Per iniziare a tracciare specifici tipi di file, possiamo usare il comando git lfs track <file type>. Per esempio, se volessi tracciare i file CSV, scriverei il comando così: git lfs track "*.csv". Questo aggiunge anche informazioni al nostro file .gitattributes per assicurarsi che stiamo usando Git LFS per quel particolare file. Ora dobbiamo fare prima il push del nostro file .gitattributes per garantire che stiamo tracciando correttamente i file LFS.

git add .gitattributes
git commit -m "Adding LFS .gitattributes"
git push origin main

Aggiungere e fare commit di file grandi

Dopo aver aggiunto il tracciamento, puoi aggiungere e fare commit come al solito:

git add largefile.csv
git commit -m "Adding large file with Git LFS"
git push origin main

Dietro le quinte, Git LFS archivia il file separatamente e lo sostituisce con un puntatore nel repository. Dovrebbe essere un'esperienza abbastanza trasparente.

Clonare repository con Git LFS (git lfs clone)

Se hai una versione più recente di Git (>= 2.3.0) allora il comando git clone dovrebbe funzionare automaticamente sia per i file LFS sia per quelli non LFS. Se stai usando una versione più vecchia di Git, dovrai invece usare lo specifico comando git lfs clone. Questo funziona in modo diverso rispetto al clone abituale perché fa riferimento alle informazioni dei puntatori per i file grandi e clona solo la copia di lavoro di ciascun file grande. Per ulteriori informazioni sul clone in Git, consulta il seguente tutorial su Git Clone Branch.

Fare pull di file grandi (git lfs pull)

Se vuoi fare fetch e checkout dei tuoi file LFS grandi dal repository, puoi usare la funzione git lfs pull. Questo è separato da un semplice git pull, che effettuerà il pull solo dei file gestiti da git. 

Ecco un esempio di workflow:

git checkout main # check out your main branch 
git pull # pull latest git files from the remote, for this branch 
git lfs pull # pull latest git lfs files from the remote, for this branch

Best practice per usare Git LFS

Sebbene Git LFS sia un'ottima soluzione, può comunque presentare una serie di problemi e non è pensato per essere una soluzione universale. Assicurati di seguire le seguenti best practice quando usi Git LFS per trarne il massimo:

  • Usa Git LFS solo per file binari grandi, non per codice o piccoli file di testo.
  • Elimina regolarmente i file non necessari usando: git lfs prune
  • Evita di tracciare intere directory, cosa che può causare problemi di prestazioni e gonfiore
  • Assicurati che tutti i collaboratori abbiano installato Git LFS per evitare file mancanti.

Se segui queste linee guida generali, Git LFS sarà un ottimo strumento per te!

Problemi comuni e come risolverli

Essendo un'estensione di Git, Git LFS porta con sé una serie di problemi. Questo è particolarmente vero poiché si basa su repository remoti che hanno a loro volta problematiche proprie. Ecco alcuni problemi comuni che potresti incontrare usando Git LFS e come risolverli.

Problemi di autenticazione con Git LFS

Ci sono numerosi modi in cui potresti incorrere in problemi di autenticazione con Git LFS. Per assicurarti di avere le credenziali corrette dalla tua parte, verifica quanto segue:

  • Usa la configurazione SSH corretta con git config lfs.url ssh://<git-url>
  • Controlla di avere accesso in lettura/scrittura al branch padre, poiché Git LFS spesso effettua il tracciamento sul padre
  • Prova a eseguire un fetch/clone pulito direttamente dal repository remoto

Se continui a riscontrare problemi e non sei l'amministratore, verifica con il proprietario del progetto se può aiutarti con i permessi.

Limiti e quote di Large File Storage

I servizi possono avere quote per lo storage di Git LFS. Ad esempio, GitHub ha un limite di 2 GB per gli utenti Free e Pro con un limite di 5 GB per file per gli utenti Enterprise cloud. Assicurati di non caricare file più grandi del limite del tuo servizio per evitare errori.

Migrare repository esistenti per usare Git LFS

Se un repository contiene già file di grandi dimensioni, migrali usando:

git lfs migrate import --include="*.filetype"

Questo sostituisce retroattivamente i file grandi con puntatori LFS. 

Conclusione

Git LFS è uno strumento essenziale per gestire in modo efficiente file di grandi dimensioni mantenendo i repository leggeri e performanti. Sfruttando Git LFS, gli sviluppatori possono gestire correttamente i file più grandi del repository. Finché segui le best practice per ridurre al minimo il gonfiore, LFS sarà di grande aiuto per il tracciamento dei file. Se ti interessa approfondire Git, prova le seguenti risorse:

Domande frequenti su Git LFS

Cosa succede se clono un repository con file Git LFS?

L'esecuzione di git clone nelle versioni più recenti di Git recupera automaticamente il repository e i puntatori LFS. Se usi una versione più vecchia di Git, devi eseguire git lfs pull per scaricare effettivamente i file grandi. In alternativa, usare git lfs clone gestisce questo automaticamente.

Come posso verificare quali file sono tracciati da Git LFS?

Esegui git lfs track per vedere i pattern dei file tracciati e git lfs ls-files per elencare i file effettivamente archiviati usando LFS.

Cosa succede se esaurisco lo spazio Git LFS su GitHub o un altro servizio di hosting?

Servizi come GitHub impongono limiti di archiviazione. Puoi gestire lo spazio con git lfs prune, acquistare più spazio oppure usare una soluzione di storage esterna alternativa.

Posso smettere di usare Git LFS dopo averlo abilitato?

Sì, ma devi migrare i tuoi file di nuovo al Git standard usando git lfs migrate export --include="*.filetype" per rimuovere il tracciamento LFS.

Argomenti

Correlato