¿Cómo el sistema de control de revisión restaura la revisión?

Mi pregunta es más general que declarada en el título.

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

Pero todos tienen la capacidad de mostrar todo el file 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 context (text poco antes y después de los cambios).

EDITAR: github almacena instantáneas completas en lugar de deltas

Sé que el control de la versión de origen almacena información solo sobre las diferencias.

Como la pregunta sobre la decisión de layout de Git sobre el almacenamiento de contenido en lugar de las diferencias ilustra, esto no es exactamente lo que hace Git.
Sin embargo, tiene un formatting "empaquetado" para almacenar objects en forma delificada, utilizando delta binary de la biblioteca LibXDiff. Pero eso se usa principalmente para la transferencia de networking.
Consulte " ¿Está estandarizado el algorithm de diferencias bit git (almacenamiento delta)? ".
Es por eso que git está " resolviendo delta " cuando recuperas.

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

El almacenamiento es uno de los desafíos más difíciles para un sistema de control de versiones. Para cada file, debemos almacenar cada versión que haya existido alguna vez. El tamaño lógico de un repository de control de versiones nunca se networkinguce. Simplemente sigue creciendo y creciendo, y cada versión anterior debe seguir estando disponible.

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

Wikipedia, lamentablemente … mantiene cada revisión en la database en alguna forma de XML (?) Como text.

Echa un vistazo al esquema de la database de wikipedia . Cambios y text específicamente recientes.

Por lo tanto, tienen maravillosas búsquedas O (1) en la primera copy de la página "biología". Esto tiene el desafortunado efecto secundario de hacer que el costo de la tecnología de wikipedia aumente 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 la revisión de mantener cada file. Git toma un enfoque lindo. Ver ¿Es el model de almacenamiento git un desperdicio? .

Almacena todos los files, de forma similar al método anterior. Una vez que el espacio tomado por el repository excede un cierto límite, realiza un reempaquetado de 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 compression sin pérdida para dicho empaquetamiento (recursivamente delta, luego aplica lossless en cualquier bit que tengas).

Otros como SVN usan compression delta simple. (de memory, en la que no debes confiar).

Nota al pie: la compression delta almacena cambios incrementales. la compression sin pérdida es más o less como zip, rar, etc.