Come archiviare file di grandi dimensioni in Git

0
371

Git, così come servizi come Github, sono costruiti e ottimizzati per file di codice basati su testo ed è raro vedere repository più grandi di pochi GB. Tuttavia, è spesso utile tenere traccia di file di grandi dimensioni e, per semplificare, Git fornisce l'estensione Large File Storage (LFS).

Come funziona Git Large File Storage (LFS)

Git tecnicamente non ha una dimensione massima del file, ma inizia a rompersi quando inizi a raggiungere una certa dimensione di file. Github definisce questo massimo a 100 MB per repository.

Questo limite soft si riduce al modo in cui Git memorizza i dati internamente. Nonostante mostri gli elenchi degli utenti delle modifiche, chiamati diff, Git utilizza in realtà un approccio basato su snapshot per archiviare i dati internamente e lo usa per ricostruire le differenze, piuttosto che viceversa.

Questo va bene per piccole quantità di dati, ma significa che ogni volta che un file viene modificato, è necessario creare un'istantanea e quindi se il file è molto grande, può occupare rapidamente molto spazio. Git lo gestisce un po' internamente con “packfiles,” che può fare un po' di garbage collection, ma rimane il problema di lavorare con file di grandi dimensioni.

Quindi, è stata creata una soluzione chiamata Git Large File Storage (LFS). Fondamentalmente, invece di archiviare il file effettivo nel repository, Git LFS memorizza semplicemente un puntatore a dove si trova effettivamente quel file. Quando il tuo client Git vuole clonare un repository o eseguire il checkout del file, lo scarica invece da Git LFS.

Pubblicità

Ciò significa che non dovrai più scaricare tutti gli oggetti con versione solo per clonare il repo. LFS rende molto più veloce l'avvio e l'esecuzione del repository perché Git si preoccupa solo del puntatore, che è piccolo, e recupera solo i dati di cui ha bisogno.

Lo svantaggio principale è che ora non puoi utilizzare i packfile, il che significa che avrai bisogno di spazio di archiviazione aggiuntivo per ogni singola copia di un file. Ma, con LFS che ti consente di avere un enorme repository con tempi di clonazione ottimali, ciò non influisce sull'esperienza dello sviluppatore.

Dove puoi usarlo Git LFS?

Per usarlo, avrai bisogno di un server configurato per usare Git LFS. È solo un'estensione di Git, quindi non è necessario installare alcun software aggiuntivo o configurare server per gestire l'archiviazione dei dati.

Github supporta Git LFS, ma consente solo 10 GB per repository. Questo vale sia per i repo normali che per i repo LFS. Tuttavia, è abbastanza facile acquistare più dati da Impostazioni > Fatturazione e 50 GB sono solo $ 4,20 in più al mese:

< p>Dovrai pagare anche per la larghezza di banda, poiché l'aggiornamento di file di grandi dimensioni crea una copia del file e deve inviare l'intero file.

Se desideri ospitare repository particolarmente grandi e vuoi farlo sul tuo hardware, ti consigliamo di utilizzare Gitlab self-hosted. Puoi leggere la nostra guida sulla configurazione di un'istanza Gitlab personale per saperne di più.

RELAZIONATO: Come configurare un server Gitlab personale

Installazione e utilizzo di Git LFS

Devi scaricare e installare Git LFS dal loro sito web.

Pubblicità

Quindi, apri Git o Git Bash su Windows ed esegui il comando install per verificare che funzioni:

git lfs install

Git LFS funziona un po' separatamente da Git stesso. Non tiene traccia automaticamente dei file al di sopra di una certa dimensione; dovrai aggiungere manualmente i file a Git LFS per iniziare a usarlo. Puoi utilizzare la sintassi dei caratteri jolly per questo:

git lfs track “*.dat”

Puoi usare ls-files e status per visualizzare lo stato del sottosistema Git LFS stesso:

git lfs ls- files git lfs status

Migrazione a Git LFS

Se provieni da un repository Git esistente o hai commesso accidentalmente qualcosa senza prima tracciare it in Git LFS, dovrai utilizzare lo strumento di migrazione per spostare i dati in LFS.

Ad esempio, importando tutti i file esistenti che corrispondono a un carattere jolly:

git lfs migrate import — include=”*.mp4″

O semplicemente inviare tutto a LFS:

git lfs migrate import –everything

Potrebbe essere necessario eseguire git push –force per sovrascrivere la cronologia del ramo.