2012-05-28 6 views
6

La mia domanda è più generale di quanto dichiarato nel titolo.In che modo il sistema di controllo di revisione ripristina la revisione?

So che il controllo della versione sorgente memorizza solo le informazioni sulle differenze. Come ho capito, anche Wikipedia, e così fa github.

Ma tutti hanno la capacità di mostrare l'intero file con una revisione particolare. Lo ripristinano in modo incrementale dalla prima revisione a quella specifica?

E un'altra domanda. Se memorizzano solo le differenze, come le mostrano in ui con il contesto (un po 'di testo prima e dopo le modifiche).

EDIT: negozi GitHub intere istantanee invece di delta

risposta

6

so che i negozi di controllo di versione fonte di informazione solo sulle differenze.

Dato che la questione Git design decision on storing content rather than differences illustra, questo non è esattamente quello Git fa.
Ha però un formato "compresso", per memorizzare oggetti in forma deltaificata, utilizzando delta binario dalla libreria LibXDiff. Ma questo è principalmente usato per il trasferimento di rete.
Vedere "Is the git binary diff algorithm (delta storage) standardized?".
Ecco perché git è "resolving delta" quando si preleva.

4

Per una lettura molto interessante dei pro e contro dei diversi modi di memorizzare i dati di controllo della versione, consiglio vivamente di leggere l'articolo di Eric Sink Time and Space Tradeoffs in Version Control Storage.

Lo storage è una delle sfide più difficili per un sistema di controllo versione . Per ogni file, dobbiamo memorizzare ogni versione che sia mai esistita . Le dimensioni logiche di un repository di controllo versione non restringono mai . Continua a crescere e crescere, e ogni vecchia versione deve rimanere disponibile.

Quindi, qual è il modo migliore per memorizzare ogni versione di tutto?

3

Wikipedia, purtroppo ... mantiene ogni singola revisione nel database in qualche forma di XML (?) Come testo.

Dai uno sguardo allo wikipedia database schema. Modifiche e testi specificamente recenti.

Quindi hanno una meravigliosa O (1) ricerca della prima copia della pagina "biologia". Questo ha lo sfortunato effetto collaterale di causare wikipedia technology cost a mongolfiera da $ 8mil USD nel 2010-2011 a $ 12mil USD nel 2011-2012. Questo nonostante gli HDD (e tutto il resto) diventano più economici, non più costosi.

Questo per il controllo della revisione di mantenere ogni file. Git ha un approccio carino. Vedi Is the git storage model wasteful?.

Memorizza ogni file, simile al metodo precedente. Una volta che lo spazio occupato dal repository supera un certo limite, esegue un repack di forza bruta (esiste un'opzione per impostare quanto sia difficile provare - --window = [N], --depth = [N]) che potrebbe richiedere ore.Utilizza una combinazione di compressione delta e lossless per il repack specificato (delta ricorsivo, quindi si applica senza perdita su qualsiasi bit che si ha).

Altri come SVN utilizzano la compressione delta semplice. (dalla memoria, di cui non dovresti fidarti).

Nota a piè di pagina: La compressione delta memorizza le modifiche incrementali. compressione senza perdita è praticamente come zip, rar, ecc.

Problemi correlati