Git clona alla memoria

5

Sto creando un'app necessaria per clonare i repository git con un link e analizzare la base di codice.

Tirare sul disco usando il comando git clone non si ridimensiona bene. C'è un modo per clonare in memoria, o almeno per ottenere un flusso di contenuti di file, invece di I / O su disco intermedio.

    
posta Krzysztof Wende 15.06.2015 - 19:15
fonte

2 risposte

4

È specifico del sistema operativo.

Se la tua applicazione funziona su Linux (quindi forse anche su Android), puoi usare un file system basato sulla memoria come tmpfs . Quindi git pull (o git clone , ecc ...) lo metterebbe in quella FS che si trova nella memoria virtuale, e funzionerà abbastanza velocemente. Tuttavia, il collo di bottiglia è probabilmente la rete (a meno che l'applicazione non sia in esecuzione in alcuni datacenter e può utilizzare una grande quantità di larghezza di banda).

BTW, su Linux, la cache della pagina è abbastanza efficace. Quindi, anche con il file system ordinario (basato su disco), le prestazioni possono essere abbastanza buone in pratica.

Quindi la tua applicazione accederà a questi file attraverso le solite syscalls o funzioni di libreria relative ai file (ad esempio <stdio.h> in C), e userebbe solo memoria (senza IO di disco reale) e dovrebbe scalare abbastanza bene.

Ovviamente, avrai bisogno di avere abbastanza RAM per far sì che funzioni bene.

    
risposta data 15.06.2015 - 19:40
fonte
3

C'è un conflitto fondamentale tra il modello git e quello che stai cercando di fare qui. git clone esegue una copia completa del repository sul computer locale. L'idea di git è di mantenere una copia completa del repository localmente. Non c'è quasi nessuna comunicazione con il server con la maggior parte dei comandi. L'unica volta che c'è comunicazione è quando si git fetch (trascina tutte le modifiche alle diramazioni dal server) o git push (spinge tutte le modifiche alle diramazioni locali al repository remoto) o, naturalmente, quando si effettua una copia completa con git clone .

Quindi davvero, penso che tu sia bloccato. Quello che raccolgo è che vuoi tirare giù molti progetti diversi, eseguire analisi su ciascuno, quindi eliminare i risultati. Questo non è qualcosa per cui Git è stato progettato in quanto fondamentalmente riguarda la conservazione e la modifica di una copia locale di un repository per un lungo periodo di tempo.

Io metto in dubbio la tua ipotesi che tirando alla memoria farebbe addirittura la differenza. Le operazioni di rete sono un paio di ordini di grandezza più lenti delle operazioni su disco. Un disco non SSD decente ti darà circa 150 MB / s. E SSD sta per triplicare questo. A meno che tu non abbia una connessione molto migliore di me, tirare la memoria non accelera affatto perché il tuo sistema operativo impiega tutto il suo tempo ad attendere le richieste di rete al server git.

Se stai lavorando con github, potresti stare meglio con il metodo "Download ZIP" su ogni pagina del progetto. Questo scaricherà un ramo senza tutte le informazioni sul ramo estraneo / cronologico. Dovrebbe essere più veloce di un git pull per i casi in cui è necessaria solo l'ultima versione di un ramo.

    
risposta data 15.06.2015 - 19:48
fonte

Leggi altre domande sui tag