Categories
- deporte (1)
- entretenimiento (11)
- física (23)
- google SoC (19)
- informática (58)
- desarrollo web (4)
- java (2)
- motos (4)
- opinión (4)
- trabajo (9)
- ull (4)
- ulpgc (38)
- uncategorized (4)
Latest News
- Sistemas de control de versiones: Subversion
- Movistar y timofónica. Odisea 2008: Liberar el móvil.
- Poblaciones del Carbono bajo campo de radiación
- Tasas de absorción y emisión estimulada
- Intel Fortran Compiler
- Espectro del carbono. El de verdad
- Retrasos becas FPU
- Espectro del carbono
- Frameworks PHP. Por fin una alternativa.
- Primer triatlón. Experiencias.
Monthly archives
- November 2008
- June 2008
- May 2008
- April 2008
- February 2008
- November 2007
- October 2007
- September 2007
- March 2007
- February 2007
- November 2006
- October 2006
- August 2006
- July 2006
- June 2006
- May 2006
- April 2006
- March 2006
- February 2006
- January 2006
Links
Blogroll
Universidad
Search
Subversion
¿Qué es Subversion?
Introducción
Subversion es un sistema software de licencia libre Apache/BSD [1] que permite realizar un control de versiones sobre un determinado proyecto. Normalmente se utiliza sobre el código fuente de un proyecto, aunque es útil utilizarlo también sobre documentación o manuales; incluso el desarrollo de un libro puede llevarse mediante el control de versiones.
Cada proyecto se almacena en un repositorio Subversion, que no es más que un directorio especial del disco duro donde se almacenan los ficheros del proyecto.
Según [2] las tareas básicas que un sistema de control de versiones cumple son:
- Gestionar el almacenamiento de cada uno de los elementos del proyecto.
- Llevar un historial de los cambios en cada elemento del proyecto y anotar el autor de los cambios. Cada uno de los cambios se denomina revisión.
- Posibilidad de añadir, borrar, mover o editar los elementos.
Otras tareas que generalmente cumple el sistema de control de versiones son:
- Capacidad de gestionar ramas de desarrollo paralelas a la principal.
- Gestión de conflictos, en el caso de que más de un usuario cambie un elemento del proyecto.
- Realización de informes de estado, donde se muestren las diferencias entre distintas revisiones.
Ventajas
Subversion ha reemplazado [3] en muchos ámbitos al CVS [4, 5], el sistema de control de versiones de licencia libre que fue por mucho tiempo el sistema más utilizado. Subversion permite realizar algunas tareas que con CVS no era posible realizar:
- Cambios de nombre de archivos, manipulación completa de directorios..
- Mayor eficiencia en la transferencia de archivos y creación de ramas de desarrollo (se hace por diferencias, no por archivos completos)..
- Operaciones atómicas..
- Permite bloquear archivos y maneja ficheros binarios de forma coherente..
- Integración con Apache y el protocolo WebDAV, lo que estandariza las operaciones sobre el repositorio.
Funcionamiento general
Los ficheros de un determinado proyecto están asociados a un repositorio. El repositorio es el almacén de los ficheros de ese proyecto y el encargado de llevar el historial de cambios entre versiones.
La primera vez que se utiliza el repositorio, deben introducirse en él los ficheros iniciales del proyecto, esto se llama el import inicial. Una vez hecho esto, cualquier usuario con permiso para acceder al repositorio puede descargar los ficheros en su ordenador y modificarlos localmente; esta operación es el checkout.
Cuando los cambios que ha realizado son satisfactorios, puede actualizar los ficheros del repositorio con su copia local. Esto se denomina commit. Si hubiera algún conflicto entre los ficheros locales y los del repositorio (porque otro usuario cambió los ficheros del repositorio previamente) se deberá realizar la operación de resolución de conflictos o merging.
Repositorios
Estructura de directorios
Dentro de un repositorio svn se pueden encontrar varios proyectos, cada uno de ellos con su propio árbol de desarrollo.
Dentro del directorio de cada proyecto encontramos tres subdirectorios: trunk, branches y tags. El primero contiene el código fuente de la rama principal de desarrollo; el directorio branches contiene bifurcaciones de la rama de desarrollo paralelas a ésta cuyos trabajo puede en el futuro unificarse con la rama principal; el directorio tags almacena copias de la versión de desarrollo en determinadas fechas y normalmente es de sólo lectura.
- svn/
- proyecto1/
- trunk/
- branches/
- tags/
- proyecto2/
- trunk/
- branches/
- tags/
Crear un repositorio
Creamos un repositorio llamado svn con la siguiente orden
$ svnadmin create proyecto1
Esto crea un directorio llamado proyecto1 en el directorio actual que contendrá toda la información necesaria por Subversion para gestionar el control de versiones de un determinado proyecto de nombre proyecto1.
Supongamos que estamos trabajando en el proyecto almacenado en nuestro directorio personal /home/david/misproyectos/atomo y que deseamos que el proyecto sea gestionado por Subversion.
Realizamos un import inicial del proyecto, lo que copia el trabajo que ya tenemos hecho en nuestro directorio personal al directorio gestionado por subversión.
$ svn import file:///home/david/atomo /home/david/proyecto1 -m ‘Import inicial'
Ahora en el directorio /home/david/proyecto1 se encuentra la información de nuestro proyecto que teníamos previamente en el directorio local. Es interesante que el contenido de nuestra copia inicial de trabajo tenga ya la estructura de directorios mencionada más arriba.
Repositorios remotos
Se puede acceder a un repositorio remoto especificando su dirección de acceso, que normalmente es una dirección http: http://servidor/svn/proyecto1. Para crear un repositorio remoto se debe tener acceso al directorio de repositorios del servidor web y utilizar la orden de crear repositorio.
Operaciones
Import
Operación para introducir en el repositorio la primera revisión de un proyecto. La operación puede realizarse situándose el usuario en el directorio local que contiene la primera revisión y utilizando la orden:
$ svn import . http://localhost/svn/proyecto1/trunk
En este caso se está realizando el import inicial en un repositorio remoto situado en http://localhost/svn/proyecto1.
Es una buena idea que el import inicial contenga únicamente la estructura de directorios que se utilizará posteriormente (los directorios trunk, branches y tags)
Checkout
Operación que permite traernos el código fuente de un repositorio para trabajar con el localmente.
$svn checkout http://localhost/svn/proyecto1
La orden crea un directorio local proyecto1 con el contenido del repositorio y que puede modificarse sin alterar el contenido del repositorio.
Commit
Operación utilizada para subir los cambios locales al repositorio.
$ svn commit http://localhost/svn/proyecto1 -m “Mensaje”
Con esta orden actualizamos al repositorio los cambios hechos a la copia de trabajo local (debemos encontrarnos en un directorio previamente obtenido mediante checkout), con la adición de un mensaje.
Merging
Acción de combinar un fichero fuente del repositorio que fue modificado por otro usuario y los cambios realizados localmente.
Cuando se intenta realizar un commit de uno o más ficheros modificados localmente, y los cambios alterarían ficheros modificados previamente por otro usuario, Subversion avisa al usuario de que existen conflictos y de que es necesario resolverlos antes de seguir adelante.
Para realizar el merging, el usuario, debe realizar un update. El comando update crea nuevos ficheros con extensiones .rXX y .rYY, donde XX e YY son los números de revisión de los ficheros. Uno de ellos es el fichero que el otro usuario subió previamente al repositorio y otro es el fichero que el presente usuario desea subir al repositorio. El fichero en cuestión sin extensiones es marcado con una serie de etiquetas que indican los puntos conflictivos.
Una vez esos puntos conflictivos se solucionen, el usuario puede utilizar la orden resolved para indicar a Subversion que los cambios han sido correctamente unificados.
$ svn resolved
A continuación ya puede realizarse el commit normalmente.
Manipulación
El número de ficheros del repositorio puede variar con el tiempo, siendo necesario añadir nuevos ficheros fuente, borrar ficheros antiguos o cambiarles el nombre para que este se ajuste mejor a su contenido. Las tres operaciones siguientes cumplen estas funciones. Los tres comandos actúan sobre la copia local y no es hasta la realización del commit que los cambios son actualizados al repostitorio.
Add
Este comando sirve para añadir un fichero creado en la copia local al repositorio.
$ svn add <nombre del fichero>
Delete
Este comando permite eliminar del repositorio un fichero.
$ svn delete <nombre del fichero>
Move
Mediante este comando puede cambiarse el nombre de un fichero o su localización dentro del árbol de directorios del proyecto.
$ svn move <nombre del fichero> <nuevo nombre del fichero>
Otras fuentes
Este texto es una pequeña introducción a Subversion y que sirve como guía para un curso corto introductorio. Un manual completo mucho más detallado puede encontrarse en [6].
Bibliografía
- Subversion. [cited 2007 09/10/2007]; Available from: http://subversion.tigris.org/.
- Control de versiones. Wikipedia [cited 2007 09/10/2007]; Available from: http://es.wikipedia.org/wiki/Control_de_versiones.
- Subversion. Wikipedia [cited 2007 09/10/2007]; Available from: http://es.wikipedia.org/wiki/Subversion.
- Concurrent Versions System. Wikipedia [cited 2007 09/10/2007]; Available from: http://es.wikipedia.org/wiki/CVS.
- Concurrent Versions System. [cited 2007 09/10/2007]; Available from: http://www.cvshome.org/.
- Collins-Sussman, B., B.W. Fitzpatrick, and C.M. Pilato, Version Control with Subversion. First ed, ed. O’Reilly. 2004. 319.
Posted by dsuarez
Posted in: informática
No Comments »
October 2007