Sistema centralizado para compartir información. Gestiona archivos y directorios, y sus cambios a través del tiempo. Puedo recrear un proyecto desde cualquier momento en su historia
centralizado donde se almacena y mantiene información digital, habitualmente bases de datos o archivos informáticos. Subversion es un repositorio en forma de árbol con una jerarquía de directorios y archivos.
cambio que se haya realizado en el repositorio. Recuerda cambios realizado a cada archivo así como cambios en el árbol de directorios: Archivos y directorios nuevos Archivos y directorios borrados Archivos y directorios modificados o cambiados de lugar.
lee la versión más reciente del árbol de directorios y archivos. Subversion provee la habilidad de leer estados anteriores del sistema de archivos. Se pueden conocer los cambios realizados, cuándo se realizaron, y quién realizó dichos cambios.
de versiones es el de permitir editar de forma colaborativa y compartir información. Existen diferentes estrategias. Un problema a resolver: Editar la misma información sin pisar el trabajo de otro.
Juan Juan Juan Repositorio Repositorio Repositorio Repositorio Francisco Francisco Francisco Francisco Juan y Francisco leen un archivo en su versión más reciente desde el repositorio. Juan edita el archivo con sus cambios. Francisco edita el archivo con sus cambios. Juan manda sus cambios al repositorio. Francisco manda sus cambios al repositorio y sobreescribe los cambios de Juan. El repositorio recuerda los cambios que hizo Juan, pero la versión de Francisco no los incluye. La última versión del archivo en el repositorio tiene los cambios hechos por Francisco, pero no los cambios hechos por Juan. A A A Aj Af Aj Af Aj Af A Aj Af
Repositorio Repositorio Repositorio Repositorio Francisco Francisco Francisco Francisco A A Aj Aj Aj Aj A Aj Aj Bloquea ¡Está bloqueado! Desbloquea Bloquea • Una sola persona puede trabajar en cada archivo a la vez. • Es una solución con limitaciones: • Problemas administrativos: Mientras Juan edita el archivo, si Francisco lo necesita, tiene que esperar a que Juan termine. Pierde tiempo. • Francisco podría querer editar el final de un archivo de texto y Juan el principio del mismo. Podrían trabajar simultáneamente sin necesidad de esperar que el otro termine. Falso sentido de seguridad. Francisco podría editar un archivo B y Juan un archivo A, que dependan uno del otro. El bloqueo simula seguridad, cuando los cambios podrían comprometer la integridad del código.
de los archivos y directorios) a partir del repositorio. Los clientes modifican independiente y simultáneamente su copia local. Las copias se fusionan en una nueva versión final en el repositorio (merge).
Pablo Pablo Repositorio Repositorio Repositorio Repositorio Carlos Carlos Carlos Carlos A A A Ap Ac Ap Ac Ap Ac A Ac Ac Pablo y Carlos copian el mismo archivo. Editan sus archivos. Carlos publica su versión antes. Pablo obtiene un error de ”desactualizado” D esactualizado
suya. Se crea una nueva versión A¶ ”mergeada” (fusionada). Se publica la versión ”mergeada”. Ahora los dos usuarios tienen los cambios de cada uno. Lee Edita Escribe Pablo Pablo Pablo Pablo Repositorio Repositorio Repositorio Repositorio Carlos Carlos Carlos Carlos Ac ApAc Ac A¶ Ac Ap Ac Ap A¶ Ac A¶ A¶ Lee
caso de haber solapamiento en los cambios, el sistema informa de un conflicto. El archivo es marcado por el sistema, y el usuario puede ver los cambios en conflicto y elegir el cambio manualmente. Solución: CopiarModificarMerge Nota: El software no es capaz de resolver conflictos automáticamente (todavía), solo los programadores pueden tomar las decisiones ”inteligentes” en estos casos (por ahora). Esta afirmación puede ser rebatida por usuarios de GeneXus...
el tiempo perdido esperando por bloqueos. Factor crítico: Comunicación entre los usuarios. En la práctica, los cambios solapados son muy poco frecuentes. Subversion provee esta solución, y la opción de bloquear archivos (conveniente por ejemplo para archivos binarios). Solución: CopiarModificarMerge
de comando. svnversion Programa para reportar el estado (en términos de revisiones de los ítems presentes) de una copia en funcionamiento. svnlook Herramienta para inspeccionar un repositorio Subversion.
reparar un repositorio. mod_dav_svn Módulo plugin para el servidor Apache, para usar el repositorio a través de la red. svnserve Otro programa para usar el repositorio a través de la red.
de diferentes protocolos en un disco duro, a través de la red, etc. En última instancia, la dirección de un repositorio Subversion es siempre un URL. Tipo de URL – Forma de acceso file:/// Acceso directo en disco local. http:// Acceso via protocolo WebDAV a servidor Apache conciente de Subversion. https:// Igual que http://, pero con cifrado SSL. svn:// Acceder a través de protocolo propio a servidor svnserve. svn+ssh:// Igual que svn:// pero por túnel SSH.
directorios y archivos común y corriente en mi computadora, obtenido desde el repositorio. Puedo editar, compilar si son fuentes, borrar, etc. La copia local es privada: no se aplican mis cambios en el servidor ni los cambios de otros en mi copia a menos que yo lo pida. Puedo tener muchas copias del mismo repositorio.
los cambios en el repositorio. Si otro publicó cambios, podemos fusionarlos en nuestra copia (merge). En nuestra copia se van a guardar los archivos de configuración bajo el directorio .svn
hay que hacer un checkout: svn checkout svn://192.168.1.42/home/svn/ejemplo Para publicar nuestros cambios, hacemos un commit: svn commit Clase.java m ”Arreglé un bug del setter” Para actualizar nuestro repositorio respecto a la versión del servidor, usamos update: svn update
y directorios como una transacción atómica ("commitea" todo o nada). Al aceptar un commit, se crea un nuevo estado del árbol del sistema de archivos, llamado una revisión. Cada revision tiene asignado un número único, natural, mayor en uno al número de la revisión anterior.
a árboles enteros, no a archivos individuales (no así en otros sistemas de control de versiones). Cada número de revisión es un estado particular del repositorio tras haber sido commiteado un cambio. “La revisión 42 de HolaMundo.java” significa “HolaMundo.java como aparece tras el cuatrigésimo segundo commit del repositorio.”
sola revisión en el repositorio, pueden tener archivos de varias revisiones distintas. Para cada copia local, Subversion guarda esta información en el directorio .svn: En qué revisión está basada la copia local (llamado working revision) Una fecha de cuándo se actualizó la copia local por el repositorio
el estado de nuestra copia local. Las copias locales contienen archivos de varias revisiones. Los updates y commits son cosas separadas. Cada vez que ”commiteamos”, nuestra copia local termina con una mezcla de revisiones