Questa è una domanda interessante. Prima dell'analisi, dirò che il risparmio di larghezza di banda non dovrebbe essere il motivo per cui si passa a un DVCS. Tuttavia, un punto correlato è il carico sul server e questo naturalmente andrà giù con un DVCS: le persone semplicemente non usano il server come spesso. Quando lo usano, lo usano per cose "semplici" come push / pull. Operazioni pesanti come annotate e grep vengono eseguite sul client.
Possiamo esaminare l'utilizzo della larghezza di banda guardando un esempio in cui un DVCS funziona in modo particolarmente scadente: un esempio con un file immagine. Il setup è così:
-
aggiungi un'immagine da 10 MB al tuo progetto. Poiché si tratta di un formato di file compresso, non è possibile comprimerlo ulteriormente e la versione iniziale occupa 10 MB nel repository.
-
Apporta 9 modifiche all'immagine. La compressione delta è spesso inutile per i formati compressi, quindi ogni nuova revisione occupa altri 10 MB nel repository.
-
La dimensione del repository è ora di 100 MB.
Ora possiamo confrontare la larghezza di banda utilizzata con un sistema centralizzato e un sistema decentralizzato. Sono uno sviluppatore Mercurial quindi userò Mercurial come esempio di DVCS (ma Git funziona allo stesso modo). Userò Subversion come sistema di controllo della versione centralizzato (CVCS):
-
Invio di una nuova revisione al server: hg commit; hg push
rispetto a svn commit
.
La larghezza di banda è la stessa poiché è necessario inviare un delta da 10 MB al server in entrambi i casi.
-
Nuova versione dal server: hg pull --update
rispetto a svn update
.
Un CVCS ti consente di scaricare i 10 MB necessari mentre un DVCS ti chiederà di scaricare le revisioni intermedie che ti mancano. Quindi il fabbisogno di larghezza di banda dipende dalla frequenza di aggiornamento:
-
Se si esegue una collaborazione stretta e quindi si aggiornano spesso, si finisce con il requisito stessa larghezza di banda .
-
Se aggiorni meno spesso, un DVCS utilizzerà più larghezza di banda .
-
Pagamento fresco : hg clone
rispetto a svn checkout
.t
Simile al caso precedente, ma con aggiornamenti molto rari. Quindi un DVCS scarica più dati di un sistema centralizzato.
-
Aggiornamento alla versione precedente: hg update
vs svn update
Un DVCS richiede nessuna larghezza di banda qui, ma uno strumento centralizzato scaricherà 10 MB . A seconda del tuo flusso di lavoro, potresti farlo parecchio durante la ricerca di bug e quindi puoi avere notevoli risparmi qui.
Penso che i requisiti possano essere riassunti come segue: paghi un costo iniziale più ampio con un DVCS poiché scarichi tutto. Quando viene pagato quel costo, gli aggiornamenti alle vecchie revisioni sono gratuiti . Gli aggiornamenti alle nuove revisioni costano all'incirca come con uno strumento centralizzato, supponendo che si aggiorni frequentemente in entrambi i casi. L'invio di commit al server è uguale nei due sistemi.
Questo esempio mostra che esiste un sovraccarico associato a un DVCS. Tuttavia, in pratica il overhead è gestibile . Per il codice sorgente, la compressione delta si attiva e fa miracoli a mantenere basse le dimensioni del tuo repository.
Un esempio di Mercurial:
-
Il nostro file sorgente più grande ( mercurial/commands.py
) è un file Python da 200 KB. Dal momento che è un testo semplice, la versione iniziale può essere compressa a circa 50 KB all'interno del repository.
-
Abbiamo modificato il file circa 2200 volte nei prossimi cinque anni. La compressione delta indica che ogni modifica occupa circa 630 byte nel repository.
-
La dimensione totale nel repository è 1,4 MB.
Poiché per quel file (probabilmente il nostro file più usato) ha senso semplicemente scaricare tutte le revisioni 2200 in anticipo - è solo un altro 1,4 MB da scaricare! Quindi il sovraccarico è estremamente basso per i file di testo e questo è fondamentalmente il motivo per cui DVCS può anche essere considerato in primo luogo.
Ho anche guardato a OpenOffice. La copia di lavoro per un checkout di tip è 2.0 GB. Hanno 276.000 changeset nel loro repository e l'intera storia occupa 2.3 GB. Questo è un overhead 15% grazie all'eccellente compressione delta. L'overhead per un checkout iniziale sarà maggiore poiché un CVCS potrebbe comprimere i 2.0 GB fino a circa 500 MB. Ma risparmiano la larghezza di banda ogni volta che qualcuno deve eseguire il checkout di una vecchia revisione per correggere un bug - con un DVCS hai già i dati esattamente dove ne hai bisogno.
Infine, vorrei menzionare che Mercurial ha una estensione largefiles per la gestione di file che occupano troppo spazio nel repository . Funziona esternalizzandoli in modo che vengano scaricati solo quando necessario. Ciò trasforma efficacemente Mercurial in un CVCS rispetto a quei file.