Pregunta

He leído el libro subversión y es claro que la subversión no almacena archivos individuales, pero sólo los deltas con el fin de minimizar el espacio de disco. Subversion también hace lo mismo con los archivos binarios así (esto solía ser una enorme debilidad de CVS).

Sin embargo no entiendo el mecanismo exacto. Cuando cometo un archivo de lo que sucede?

  1. Subversion almacena sólo el diff (y ya tiene la versión antigua)
  2. Subversion elimina la versión anterior, almacena el nuevo archivo intacto y crea un diff inversa con el fin de "re-crear" la versión anterior si es necesario.
  3. Otra cosa que no he pensado.

El primer caso podría parecer la más lógica. Sin embargo, esto plantea otra cuestión. Si tengo en una subversión repositorio de un archivo con 1000 confirmaciones y un nuevo desarrollador obtiene una copia limpia, a continuación, la subversión tendría que buscar a la versión original (importación inicial) y aplicar las diferenciaciones en este 1000 antes de devolver el resultado. ¿Es esto correcto? ¿Hay algún tipo de almacenamiento en caché de archivos, donde la última versión se mantiene así?

Básicamente, donde puedo encontrar información sobre el funcionamiento interno del repositorio SVN?

Actualización: Al parecer, el back-end de la subversión juega un papel importante en esto. En el momento o escribiendo FSFS utiliza la opción 1, mientras BDB utiliza la opción 2. Gracias msemack!

¿Fue útil?

Solución

Debido formato de repositorio de Subversion es totalmente interno, que son libres de cambiar la representación de una revisión a la siguiente. Creo que la actual revisión general, las tiendas de los deltas (su opción 2) revertir, pero también almacena instantáneas completas periódicamente por lo que no tiene que resolver diferenciaciones 1000 antes de devolver un resultado.

Las notas de la versión Subversion 1.6 tiene una sección sobre Sistema de Archivos mejoras de almacenamiento que tiene algunas notas sobre esto, y enlaces a otras fuentes. Baste decir que los detalles de almacenamiento de datos de Subversion son complejas y están sujetas a cambio.

También hay un documento de diseño en el árbol de fuentes de Subversion que describe el uso de salto deltas en Subversion . En general, el / notas / directorio contiene varios documentos útiles con respecto a elementos internos de Subversion .

Otros consejos

Desde el Subversion Diseño documento ( que está bastante anticuado, sin embargo) se puede conseguir esto:

  

Al igual que muchos otros sistemas de control de revisión, Subversion almacena cambia a medida que las diferencias. No tiene copias completas de los nodos; en su lugar, almacena la última revisión como un texto completo y revisiones anteriores como una sucesión de diffs inversa (la palabra "diff" se utiliza libremente aquí - para archivos, significa vdeltas, para los directorios, significa un formato que expresa los cambios en directorios).

No creo que se ha cambiado desde entonces.

También, ver Bubble-Up Método .

FSFS podría ayudarle .

O si utiliza Berkeley DB, aquí está la especificación para eso.

FSFS utiliza deltas inversa para guardar los cambios y SKIP- deltas para acelerar algunas acciones, si he entendido todo correctamente.

  

Cada vez que confirma un cambio, el   repositorio almacena una nueva revisión de   ese árbol repositorio global, y   indica las nuevas árbol con un nuevo   número de revisión. Por supuesto, la mayoría de   el árbol es la misma que la revisión   antes, a excepción de las piezas que   cambiado.

     

El nuevo número de revisión es una   etiqueta secuencial que se aplica a la   todo nuevo árbol, no sólo a los archivos   y directorios que tocaron en ese   revisión. Sin embargo, coloquialmente, una   número de revisión se utiliza para referirse a   el cambio cometido en esa revisión;   por ejemplo, "el cambio en r588"   ( "R588" es la abreviatura de "revisión   588" ) significa en realidad "la diferencia   entre los árboles del repositorio 587 y 588" ,   o dicho de otra manera, "el cambio hizo   al árbol 587 para producir el árbol 588" .

Para consultar: Subversion FAQ

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top