Perché i repository Git / Mercurial usano meno spazio?

15

Ho letto su diverse discussioni qui e su SO che i repository DVCS usano circa lo stesso spazio o meno delle loro contro-parti centralizzate. Potrei averlo perso, ma non ho trovato una buona spiegazione del perché sia così. Qualcuno sa?

    
posta Alex Florescu 13.05.2012 - 15:17
fonte

1 risposta

18

Dalla mia esperienza personale, le seguenti affermazioni sono tutte vere:

  • Git è molto efficiente nell'archiviazione di file di testo e solo nella memorizzazione di questi file che sono stati modificati. quindi, quando fai un confronto tra SVN e Git per confrontare le dimensioni del repository, potrebbero essere simili, oppure potrebbe esserci un piccolo vantaggio per Git.
  • Questo è completamente sbagliato se si confrontano le dimensioni dei repository in cui una quantità significativa di file sono file di Office (come MS Word, Excel, PowerPoint, ...). Qui Git memorizza anche copie complete, il che significa che 10 piccole modifiche su una pila di diapositive powerpoint risultano in 10 copie complete, dove Subversion memorizza solo un diff binario, che può essere un fattore di 100 minori.

Se confronti la posizione di checkout (che è un repository di per sé con Git), la storia è completamente diversa:

  • Subversion memorizza per ogni file una copia completa, quindi la dimensione della posizione di pagamento è normalmente 2 volte la dimensione dei file stessi.
  • Git memorizza localmente la cronologia completa del repository, quindi a seconda della dimensione della cronologia, questa può essere più piccola o molto più grande di quella della copia di Checkout di Subversion.

Se confronti la quantità di byte che devi scaricare o caricare, è di nuovo diversa.

  • Subversion deve normalmente inviare o ricevere meno byte, perché invia solo differenze. Deve farlo su ogni commit e aggiornamento.
  • Git deve ottenere l'intero repository (inizialmente) e quindi invia file completi (compressi?) che non sono così diversi per i file di testo, ma potrebbero essere diversi per i file binari. E sì, Git lo fa solo quando spingi o estrai qualcosa al repository remoto.

Quindi alla fine confronti le mele con le arance e, a seconda di cosa vuoi fare con Subversion o Git, il risultato potrebbe essere diverso.

@jk ha chiesto informazioni sulle copie complete o sulle differenze binarie e non ho potuto rispondere a questa domanda. Ho chiesto a Matthew McCullough che ha recentemente tenuto un workshop Git al Jax 2012 (che ho visitato). Si è preso il tempo (grazie mille a lui) per spiegare con un dettaglio dettagliato il funzionamento interiore di Git. Quindi sì, c'è una compressione che lavora lì (e farò un esperimento con un file Microsoft Office e lo confronterò con il suo gist), ma no, la compressione è fatta su tutto il file. Citando il suo succo:

Loose objects are written in compressed, but non-delta format at the time of each commit.

    
risposta data 14.05.2012 - 08:22
fonte

Leggi altre domande sui tag