Git: qual è il limite di dimensione e numero di file? Esiste un limite imposto? In questo articolo parleremo di questo “problema”.
Se usi git assiduamente, ti sarà certamente capitato di chiederti se ha un limite di dimensione per i file oppure un numero massimo degli stessi che si possono “caricare” all’interno di un repository: in questo articolo scopriremo assieme come si comporta git per entrambe le cose, ma prima permettimi di presentarmi.
Ciao mi chiamo Lorenzo Neri e sono un informatico: realizzo contenuti per aiutare le persone a padroneggiare l’arte del nuovo millennio, ovvero l’informatica!
Devi sapere che nel corso della mia vita ho raccolto diverse esperienze lavorative e quale miglior modo per tenere traccia delle proprie soluzioni se non questo blog che stai leggendo?
E non solo: perchè tenerle per me stesso quando anche tu ne puoi beneficiare? 😉
Ciò detto, cerchiamo di capire se git impone dei limiti.
Qual è il limite di dimensione e numero di file in git?
Devo essere completamente onesto con te: è vero che mi è capitato più volte di chiedermi la tua stessa domanda, ma la risposta deriva direttamente da Linus Torvalds: se fossi curioso qui trovi il suo commento integrale, ma concentriamoci sulla “ciccia”.
“… like CVS, ie it really ends up being pretty much oriented to a “one file at a time” model. Which is nice in that you can have a million files, and then only check out a few of them – you’ll never even _see_ the impact of the other 999,995 files. And git obviously doesn’t have that kind of model at all. Git fundamnetally never really looks at less than the whole repo. Even if you limit things a bit (ie check out just a portion, or have the history go back just a bit), git ends up still always caring about the whole thing, and carrying the knowledge around. So git scales really badly if you force it to look at everything as one _huge_ repository. I don’t think that part is really fixable, although we can probably improve on it. And yes, then there’s the “big file” issues. I really don’t know what to do about huge files. We suck at them, I know. There are work-arounds (like not deltaing big objects at all), but they aren’t necessarily that great either.“
Ho voluto evidenziare in particolare l’ultima frase, perché c’è da dirlo: Linus è stato un po’ paraculo nella sua risposta 😛
Non c’è nessun limite per dimensioni e numero per git: davvero?
Se dovessimo dare una risposta, fatta e finita alla domanda “Ci sono dei limiti per le dimensioni e il numero di file all’interno di un repository in git?” la risposta sarebbe un NO secco per entrambe le domande: non è previsto dal sistema in sé di git.

Di per sé però, sarebbe un po’ sbagliato lasciarti con questa risposta. Così come faccio per tutti gli articoli all’interno del mio blog, altrettanto ho fatto per tutti quelli dove ho trattato git nelle sue particolarità, specie per i problemi che ho incontrato io lungo la mia strada.
Per intenderci, se fossi curioso di scoprire altro materiale su git dove cerco di offrire le mie soluzioni, ne puoi trovare tanti a distanza di un click qui, ma cerchiamo di rispettare quanto ho appena detto.
Per essere del tutto onesti, è da evitare come la peste sia di includere file troppo pesanti, sia troppi file a tutti gli effetti in un repository.
Il cruccio è: qual è la “dimensione” di “troppo pesante” e “troppi file”?
Partiamo dalla prima, che è la più facile a cui rispondere: ragiona come se il tuo repository dovesse essere usato da un collega che lavora su un’isola deserta.
Certamente, ormai persino laggiù hanno connessioni che superano i 100mb/s, tuttavia non è mai saggio aggiungere file che superino il centinaio di MB. Questo non è dato solo dal fatto che diventa lento scaricare e caricare file grossi, no: il problema è ben peggiore.
Git, se dai un’occhiata anche ad altri miei articoli, scoprirai che lavora per differenza di righe e ogni volta che avviene un commit, un merge o un cherry-pick beh… Viene effettuato un calcolo sulla differenza di righe tra i file.
Ora, immagina quanto tempo è necessario a fare questa procedura per file molto pesanti.
Veniamo al secondo punto, i più complesso a cui rispondere: qual è il limite da intendere per “troppi” file in un repository?
Si dovrebbe partire dal presupposto che in un repository specie se condiviso, dovrebbero esserci i file essenziali allo sviluppo collaborativo del software in questione.
Il che significa, che tutti quei file che non fa alcuna differenza condividere o no nelle fasi di sviluppo beh… andrebbero ignorati.
Tolto il discorso che una frase prima ti ho linkato un mia soluzione in merito, il punto del “troppi file” si riassume in questo:
Includi solo quei file che ritieni essenziali condividere con i tuoi colleghi per progredire con il vostro progetto, il resto, mettilo nel “.gitignore” o non metterlo proprio nel repository
Tradotto: sfrutta una gestione coerente del repository 🙂