2009-09-27 15 views
11

Estoy usando la aplicación de Versiones en una Mac para manejar un repositorio SVN para mis archivos. Mi copia de trabajo es alrededor de 6   MB, sin embargo, mi repositorio es solo 1.4   MB, ¡y tengo cinco revisiones en el repositorio!¿El repositorio de Subversion tiene un tamaño de archivo pequeño en comparación con la copia de trabajo?

¿Cómo puede ser esto?

+0

La compresión podría explicarlo, pero sinceramente no lo sé. La compresión del 75% no es desconocida para el texto puro. –

+0

(Tenga en cuenta que en realidad es alrededor del 75% porque SVN solo contiene cambios, no copias completas de cada revisión)) –

Respuesta

18

SVN comprime una versión de su código de las diferencias entre cada versión. Es por eso que no ocupa mucho espacio.

Para mantener el repositorio pequeña, Subversion usa deltificación (o almacenamiento deltified) dentro del repositorio sí mismo. La deltificación implica la codificación de la representación de un fragmento de datos como una colección de diferencias con algún otro fragmento de datos. Si las dos piezas de datos son muy similares, esto deltificación produce un ahorro de almacenamiento para el deltified trozo-en lugar de ocupar espacio igual al tamaño de los datos originales, que ocupa sólo lo suficiente espacio para decir, “miro al igual que esta otra pieza de datos a través de aquí, excepto para el siguiente par de cambios.” el resultado es que la mayoría de los datos repositorio que tiende a ser voluminosos, a saber, el contenido de archivos versionados -está almacenado en un tamaño mucho más pequeño que el que representa el texto original de esos datos. Y para los repositorios creados con Subversion 1.4 o posterior, los ahorros de espacio son incluso mejores; ahora esas representaciones de texto completo del archivo contenidos están ellas mismas comprimidas.

Más detalles se pueden encontrar here

5

su copia de trabajo normalmente contiene una gran cantidad de archivos temporales adicionales, tales como código objeto y encabezados precompilados que no son necesarios para ser controlado revisión. Supongo que si limpias la copia de trabajo o haces un nuevo pago, será mucho más pequeña.

+2

Esto es cierto, pero por las razones explicadas por Nawaman y wcoenen, incluso una copia de trabajo limpia recién limpiada sin generar Los archivos (como los encabezados precompilados y el código objeto) pueden ser significativamente más grandes que el repositorio: la copia de trabajo tiene dos copias de cada archivo descomprimido (funcionando y prístino), mientras que el repositorio tiene 1 copia comprimida de cada archivo + cambios deltafied (que puede ser muy pequeño si los cambios fueron localizados). –

2

He aquí algunas razones por las que puedo pensar en - svn almacena sus revisiones como conjuntos de cambios y archivos no versionados. - svn almacena datos en su backend (FSFS/BDB) que tiene algunas técnicas de compresión que reducen el tamaño. Si el repositorio tiene más archivos basados ​​en texto, cuanto más la compresión es por lo tanto puede esperar una disminución drástica en el tamaño. - Para admitir algunos comandos (como svn info, diff, etc.) sin conexión de red (también para tener resultados más rápidos) svn mantiene cierta información adicional en los directorios .svn. La información adicional incluye una copia de la copia de trabajo completa.

8

La respuesta de Nawaman ya explica que los datos en el repositorio se compactan de manera bastante eficiente.

La otra mitad de la historia es que la subversión mantiene un pristine copy de cada archivo dentro de las carpetas .svn de su copia de trabajo. Esto permite a subversion manejar los comandos svn status o svn diff sin necesidad de contactar al servidor del repositorio, pero duplica el tamaño de su copia de trabajo.

Cuestiones relacionadas