svn - tortoise - ¿Cómo exactamente subversion almacena archivos en el repositorio?
svn tutorial español (5)
Cada vez que realiza un cambio, el repositorio almacena una nueva revisión de ese árbol de repositorio general y etiqueta el nuevo árbol con un nuevo número de revisión. Por supuesto, la mayoría del árbol es igual a la revisión anterior, excepto por las partes que ha cambiado.
El nuevo número de revisión es una etiqueta secuencial que se aplica a todo el nuevo árbol, no solo a los archivos y directorios que tocó en esa revisión. Sin embargo, coloquialmente, se utiliza un número de revisión para referirse al cambio cometido en esa revisión; por ejemplo, "el cambio en r588" ("r588" es la abreviatura de "revisión 588") realmente significa "la diferencia entre los árboles de repositorio 587 y 588", o dicho de otra manera, "el cambio realizado en el árbol 587 para producir el árbol 588 ".
Echa un vistazo a: Preguntas frecuentes sobre Subversion
Leí el libro de subversión y para mí está claro que subversión no almacena archivos individuales sino solo deltas para minimizar el espacio en el disco. Subversion también hace lo mismo con los archivos binarios (esto solía ser una gran debilidad del CVS).
Sin embargo, no entiendo el mecanismo exacto. Cuando confirmo un archivo, ¿qué sucede?
- Subversion almacena solo el diff (y ya tiene la versión anterior)
- Subversion elimina la versión anterior, almacena el nuevo archivo intacto y crea un diff inverso para "volver a crear" la versión anterior si es necesario.
- Algo más en lo que no he pensado
El primer caso podría parecer el más lógico. Sin embargo, esto plantea otra pregunta. Si tengo en un repositorio de subversión un archivo con 1000 commits y un nuevo desarrollador revisa una copia limpia, entonces subversion debería buscar la versión original (importación inicial) y aplicar 1000 diffs antes de devolver el resultado. ¿Es esto correcto? ¿Hay algún tipo de almacenamiento en caché para los archivos donde también se guarda la última versión?
Básicamente, ¿dónde puedo encontrar información sobre el repositorio svn interno?
Actualización: Aparentemente, el back-end de la subversión juega un papel importante en esto. En el momento o por escrito FSFS usa la opción 1, mientras que BDB usa la opción 2. Gracias msemack!
Creo que el siguiente enlace sería de ayuda para entender la arquitectura fsfs
http://svn.apache.org/repos/asf/subversion/trunk/subversion/libsvn_fs_fs/structure
Debido a que el formato del repositorio de Subversion es completamente interno, son libres de cambiar la representación de una revisión a la siguiente. Creo que la revisión actual generalmente almacena deltas inversas (su opción 2), pero también almacena instantáneas completas periódicamente para que no tenga que resolver 1000 diffs antes de devolver un resultado.
Las notas de la versión de Subversion 1.6 tienen una sección sobre las mejoras de almacenamiento del sistema de archivos que contiene algunas notas al respecto y enlaces a otras fuentes. Basta con decir que los detalles del almacenamiento de datos de Subversion son complejos y están sujetos a cambios.
También hay un documento de diseño en el árbol de fuentes de Subversion que describe el uso de skip deltas en Subversion . En general, el directorio /notes/ contiene varios documentos útiles sobre las funciones internas de Subversion.
Sin embargo, desde el documento de Subversion Design (que está bastante anticuado) puedes obtener esto:
Al igual que muchos otros sistemas de control de revisiones, Subversion almacena los cambios como diferencias. No hace copias completas de los nodos; en su lugar, almacena la última revisión como texto completo, y las revisiones anteriores como una sucesión de diffs inversas (la palabra "diff" se usa libremente aquí - para archivos, significa vdeltas, para directorios, significa un formato que expresa cambios en directorios).
No creo que eso haya cambiado desde entonces.
Además, vea el método Bubble-Up .
la especificación http://svn.apache.org/repos/asf/subversion/trunk/subversion/libsvn_fs_fs/structure regular podría ayudarlo.
O si usa Berkeley DB, here''s la especificación para eso.
FSFS usa deltas inversas para almacenar los cambios y omitir deltas para acelerar algunas acciones, si entendí todo correctamente.