Riutilizzare gli asset binari usando Git

1

Abbiamo diversi progetti che utilizzano risorse binarie comuni (ad esempio immagini, suoni, modelli 3D, ecc.) memorizzati in una cartella su un server. Al momento, ogni progetto aggiunge queste risorse al proprio repository git. Il risultato è che abbiamo più copie della stessa risorsa in diversi repository e, se la risorsa cambia, ciascuno dei team deve aggiornarli manualmente dalla cartella sul server.

Vorremmo organizzare meglio questo pool di risorse, in modo che ogni repository memorizzi un riferimento a una risorsa specifica, in modo tale che possano essere aggiornati più facilmente, e quindi prevenire la duplicazione delle risorse.

Come fare questo usando git? Abbiamo pensato ai sottomoduli, ma ciò significherebbe creare un sottomodulo per ogni risorsa, che non ha una buona scalabilità (abbiamo migliaia di risorse e ogni progetto ne usa 10-100). Esiste un modo per creare un singolo repository con tutte le risorse, quindi clonarne selettivamente alcune in ciascun repository di progetto, ma mantenendo i riferimenti all'archivio risorse in modo che vengano aggiornati quando l'asset originale cambia?

    
posta John S 12.10.2018 - 10:36
fonte

1 risposta

0

Invece di conficcare le tue risorse in repository git, considera se puoi mantenere un server di tutte le risorse, dove ogni versione di asset ha un URL stabile (ad esempio, l'hash della risorsa, nome della risorsa + data di pubblicazione o nome + versione numero). Gli script di compilazione con versione contengono quindi gli URL delle risorse e scaricano le risorse in fase di compilazione (eventualmente memorizzate nella cache). Per aggiornare le risorse, aggiorna gli URL nei tuoi script (potresti scrivere uno strumento che lo faccia automaticamente!).

Se si desidera aggiornare implicitamente le risorse in tutti i repository quando viene caricata una nuova versione di asset, utilizzare un URL che punti sempre alla versione di asset più recente. Verranno scaricati dagli script di compilazione per la prossima build pulita. Tuttavia, ciò significherebbe che non è possibile creare vecchie versioni con le risorse utilizzate al momento. Ciò in parte vanifica il punto di controllo della versione, quindi sarebbe preferibile utilizzare URL stabili.

Tali approcci di gestione patrimoniale sono simili alla gestione delle dipendenze: quando il mio codice ha una dipendenza da un'altra libreria non aggiungo quella libreria come sottomodulo, né copio i binari della libreria nel mio repository, ma utilizzo un gestore di pacchetti per l'installazione la Biblioteca. Potresti letteralmente utilizzare un gestore di pacchetti esistente che si connette a un server privato per gestire le tue risorse. Un gestore di pacchetti può anche aiutarti con gli aggiornamenti delle risorse.

Esistono estensioni Git che forniscono funzionalità correlate, ad es. Git LFS. LFS memorizza i file specificati al di fuori della cronologia Git ma li preleva da un server LFS su richiesta. Tuttavia, l'intenzione non è quella di gestire le risorse condivise, ma di mantenere le dimensioni del repository piccole, quindi potrebbe non essere adatto al tuo caso d'uso.

Uscire da Git significa che il mio repository non è più autonomo: ho bisogno di una connessione di rete per fare una build pulita. Ma devi tracciare la linea da qualche parte. Per esempio. la maggior parte dei progetti non esegue il controllo della versione dei propri compilatori o sistemi operativi come parte del repository (anche se le tecnologie e i contenitori di virtualizzazione lo rendono possibile).

    
risposta data 12.10.2018 - 18:27
fonte

Leggi altre domande sui tag