2012-05-28 19 views
6

Mi pregunta es más general que declarada en el título.¿Cómo el sistema de control de revisión restaura la revisión?

Sé que el control de versión de código fuente almacena información solamente sobre las diferencias. Como lo entiendo, también lo hace Wikipedia, y también lo hace github.

Pero todas tienen la capacidad de mostrar todo el archivo con una revisión particular. ¿Lo restauran incrementalmente de la primera revisión a una específica?

Y otra pregunta. Si solo almacenan diferencias, cómo las muestran en ui con contexto (texto poco antes y después de los cambios).

EDIT: almacena instantáneas de GitHub enteros en lugar de los deltas

Respuesta

6

sé que las tiendas de control de versiones fuente de información única acerca de las diferencias.

Como ilustra la cuestión Git design decision on storing content rather than differences, esto no es exactamente lo que hace Git.
Sin embargo, tiene el formato "empacado", para almacenar objetos en forma delificada, usando delta binario de la biblioteca LibXDiff. Pero eso se usa principalmente para la transferencia de red.
Ver "Is the git binary diff algorithm (delta storage) standardized?".
Es por eso que git es "resolving delta" cuando recuperas.

4

Para una lectura muy interesante sobre los pros y contras de las diferentes formas de almacenar datos de control de versiones, recomiendo leer el artículo de Eric Sink Time and Space Tradeoffs in Version Control Storage.

El almacenamiento es uno de los desafíos más difíciles para un sistema de control de versiones . Para cada archivo, debemos almacenar cada versión que haya existido . El tamaño lógico de un repositorio de control de versiones nunca se reduce. Simplemente sigue creciendo y creciendo, y todas las versiones anteriores deben permanecer disponibles.

Entonces, ¿cuál es la mejor manera de almacenar cada versión de todo?

3

Wikipedia, por desgracia ... mantiene cada revisión en la base de datos en alguna forma de XML (?) Como texto.

Eche un vistazo a wikipedia database schema. Cambios y texto específicamente recientes.

Por lo tanto, tienen maravillosas búsquedas O (1) en la primera copia de la página "biología". Esto tiene el desafortunado efecto secundario de hacer que la wikipedia technology cost se eleve desde $ 8mil USD en 2010-2011 a $ 12mil USD en 2011-2012. Esto a pesar de que los discos duros (y todo lo demás) se vuelven más baratos, no más caros.

Tanto para el control de revisión de mantener cada archivo. Git toma un enfoque lindo. Ver Is the git storage model wasteful?.

Almacena todos los archivos, de forma similar al método anterior. Una vez que el espacio tomado por el repositorio supera un cierto límite, realiza un reempaquetado de la fuerza bruta (hay una opción para establecer cuánto se esfuerza --window = [N], --depth = [N]), lo que puede llevar horas.Utiliza una combinación de delta y compresión sin pérdida para dicho empaquetamiento (recursivamente delta, luego aplica lossless en cualquier bit que tengas).

Otros como SVN usan compresión delta simple. (de memoria, en la que no debes confiar).

Nota al pie: compresión delta almacena cambios incrementales. compresión sin pérdida es más o menos como zip, rar, etc.

Cuestiones relacionadas