Herramientas de usuario

Herramientas del sitio


cliente:subversion:cliente_svn

Subversion: uso desde el cliente

Por Federico Pereira, FMSI Sistemas de Informática

¿Qué es Subversion?

Subversion es un sistema de control de versiones libre y de código fuente abierto. Es decir, Subversion maneja archivos y directorios a través del tiempo. Hay un árbol de archivos en un repositorio central. El repositorio es como un servidor de archivos ordinario, excepto porque recuerda todos los cambios hechos a sus archivos y directorios. Ésto le permite recuperar versiones antiguas de sus datos, o examinar el historial de cambios de los mismos. En este aspecto, mucha gente piensa en los sistemas de versiones como en una especie de “máquina del tiempo ”.

Subversion puede acceder al repositorio a través de redes, lo que le permite ser usado por personas que se encuentran en distintas estaciones de trabajo. A cierto nivel, la capacidad para que varias personas puedan modificar y administrar el mismo conjunto de datos desde sus respectivas ubicaciones fomenta la colaboración. Se puede progresar mas rápidamente sin un único conducto por el cual deban pasar todas las modificaciones. Y puesto que el trabajo se encuentra bajo el control de versiones, no hay razón para temer por que la calidad del mismo vaya a verse afectada por la pérdida de ese conducto único –si se ha hecho un cambio incorrecto a los datos, simplemente deshaga ese cambio.

Algunos sistemas de control de versiones son también sistemas de administración de configuración de software. Estos sistemas son diseñados específicamente para la administración de árboles de código fuente, y tienen muchas características que son específicas del desarrollo de software –tales como el entendimiento nativo de lenguajes de programación, o el suministro de herramientas para la construcción de software. Sin embargo, Subversion no es uno de estos sistemas. Subversion es un sistema general que puede ser usado para administrar cualquier conjunto de archivos. Para usted, esos archivos pueden ser código fuente –para otros, cualquier cosa desde la lista de la compra de comestibles hasta combinaciones de vídeo digital y más allá.

Concepto

El repositorio

Subversion es un sistema centralizado para compartir información. La parte principal de Subversion es el repositorio, el cual es un almacén central de datos. El repositorio guarda información en forma de árbol de archivos—una típica jerarquía de archivos y directorios. Cualquier número de clientes puede conectarse al repositorio y luego leer o escribir en esos archivos. Al escribir datos, un cliente pone a disposición de otros la información; al leer datos, el cliente recibe información de otros. La figura Figura 2.1, “Un sistema cliente/servidor típico” ilustra ésto.

Figura 1.0. Un sistema cliente/servidor típico.

Entonces, ¿qué tiene ésto de interesante?. Hasta ahora, suena como la definición del típico servidor de archivos. Y, de hecho, el repositorio es una especie de servidor de archivos, pero no del tipo habitual. Lo que hace especial al repositorio de Subversion es que recuerda todos los cambios hechos sobre él: cada cambio a cada archivo, e inclusive cambios al propio árbol de directorios, tales como la adición, borrado y reubicación de archivos y directorios.

Cuando un cliente lee datos del repositorio, normalmente sólo ve la ultima versión del árbol de archivos. Sin embargo, el cliente también tiene la posibilidad de ver estados previos del sistema de archivos. Por ejemplo, un cliente puede hacer consultas históricas como, “¿Qué contenía este directorio el miércoles pasado?” Esta es la clase de preguntas que resulta esencial en cualquier sistema de control de versiones: sistemas que están diseñados para registrar y seguir los cambios en los datos a través del tiempo.

Método de Acceso

A los repositorios de Subversion se puede acceder a través de diferentes métodos—en el disco local, o a través de varios protocolos de red. Sin embargo, la ubicación de un repositorio es siempre un URL. El método de acceso que vamos a usar en forma local es:

svn://<servidor>/<repositorio>/<proyecto>  

Nota: svn accede vía protocolo personalizado a un servidor svnserve.

Cliente TortoiseSVN

TortoiseSVN es un cliente grafico para Windows gratuito de código abierto multi-idioma para el sistema de control de versiones Subversion. Esto es, TortoiseSVN maneja archivos y directorios a lo largo del tiempo. Los archivos se almacenan en un repositorio central. El repositorio es prácticamente lo mismo que un servidor de archivos ordinario, salvo que recuerda todos los cambios que se hayan hecho a sus archivos y directorios. Esto permite que pueda recuperar versiones antiguas de sus archivos y examinar la historia de cuándo y cómo cambiaron sus datos, y quién hizo el cambio. Esta es la razón por la que mucha gente piensa que Subversion, y los sistemas de control de versiones en general, son una especie de “máquinas del tiempo”.

Algunos sistemas de control de versiones también son sistemas de manejo de configuración del software (SCM). Estos sistemas están diseñados específicamente para manejar árboles de código fuente, y tienen muchas características que son específicas para el desarrollo de software - tales como el entendimiento nativo de los lenguajes de programación, o proporcionan herramientas para compilar software. Subversion, sin embargo, no es uno de estos sistemas; es un sistema general que puede ser utilizado para manejar cualquier colección de archivos, incluyendo código fuente.

Para descargar TortoiseSVN la pagina oficial es http://tortoisesvn.net/downloads/

Subversion en acción

Es hora de movernos de lo abstracto a lo concreto. En esta sección mostraremos ejemplos reales de Subversion en la práctica. Copias de trabajo

Una copia de trabajo de Subversion es un árbol de directorios corriente de su sistema de archivos local, conteniendo una colección de archivos. Usted puede editar estos archivos del modo que prefiera y si se trata de archivos de código fuente, podrá compilar su programa a partir de ellos de la manera habitual. Su copia de trabajo es su área de trabajo privada: Subversion nunca incorporará los cambios de otra gente o pondrá a disposición de otros sus cambios hasta que usted le indique explícitamente que lo haga.

Tras hacer algunos cambios a los archivos en su copia de trabajo y verificar que funcionan correctamente, Subversion le proporciona comandos para “publicar” sus cambios al resto de personas que trabajan con usted en su proyecto (escribiendo en el repositorio). Si las demás personas publican sus propios cambios, Subversion le proporciona comandos para mezclar estos cambios en su directorio de trabajo (leyendo del repositorio).

Una copia de trabajo también contiene algunos archivos extra, creados y mantenidos por Subversion para ayudarle a ejecutar estos comandos. En particular, cada directorio de su copia de trabajo contiene un subdirectorio llamado .svn, también conocido como el directorio administrativo de la copia de trabajo. Los archivos en cada directorio administrativo ayudan a Subversion a reconocer qué archivos contienen cambios no publicados y qué archivos están desactualizados con respecto al trabajo hecho por los demás.

Un repositorio típico de Subversion contiene a menudo los archivos (o el código fuente) de varios proyectos; normalmente, cada proyecto es un subdirectorio en el árbol del sistema de archivos del repositorio. En esta disposición, la copia de trabajo de un usuario se corresponde habitualmente con un subárbol particular del repositorio.

Exportando una copia de trabajo de Subversion

Al exportar por primera vez el proyecto al servidor, se creará una copia del mismo en el servidor asignándole una revisión automáticamente para luego poder ser accedido desde las terminales que tengan los permisos correspondientes.

Una de las tantas forma de hacer una exportación es por ejemplo seleccione el directorio /calc con el explorador de Windows. Haga click con el botón derecho para mostrar el Menú contextual y seleccione el comando TortoiseSVNExportar….

Ejemplo:

Figura 2.1. Exportando proyecto calc al repositorio.

Figura 2.2.

Figura 2.3.

Figura 2.4.

Obteniendo una copia de trabajo (check out)

Por ejemplo, suponga que usted tiene un repositorio que contiene dos proyectos de software, paint y calc. Cada proyecto reside en su propio subdirectorio dentro del directorio raíz, tal como se muestra:

Figura 2.5. El sistema de archivos del repositorio.

Para conseguir una copia de trabajo, debe ejecutar primero un check out (Obtener) de algún subárbol del repositorio. (El término inglés “check out” puede sonar como si tuviera algo que ver con bloquear o reservar recursos, pero no es así; tan sólo crea una copia privada del proyecto para usted). Por ejemplo, si usted hace un check out de /calc, obtendrá una copia de trabajo, de esta manera:

Seleccione el directorio /calc con el explorador de Windows. Haga click con el botón derecho para mostrar el menú contextual y seleccione el comando TortoiseSVNObtener…, que mostrará el siguiente cuadro de diálogo:

Figura 2.6. El diálogo Obtener

Si introduce un nombre de carpeta que no aún no exista, se creará un directorio con ese nombre.

Importante
Sólo debería obtener un directorio vacío. Si quiere obtener su árbol de código en el mismo directorio desde el que realizó la importación, Subversion le dará un mensaje de error porque no puede sobreescribir los ficheros no versionados que ya existen con los ficheros versionados. Deberá obtener un directorio diferente o borrar antes la carpeta con el árbol de código existente.

Si desea obtener sólo la carpeta superior y omitir todas las subcarpetas, utilice la casilla “Sólo obtener la carpeta superior”.

Si el proyecto contiene referencias a proyectos externos que no desea que se obtengan al mismo tiempo, utilice la casilla “Omitir externos”.

Importante
Si marca cualquiera de estas opciones, tendrá que realizar actualizaciones en su copia de trabaja utilizando TortoiseSVN → Actualizar a la Revisión… en vez de TortoiseSVN → Actualizar. La actualización estándar incluirá todas las subcarpetas y todos los vínculos externos.

Le recomendamos que obtenga únicamente la parte trunk del árbol de directorios. Si especifica la ruta padre del árbol de directorios en la URL, al final acabará con un disco duro lleno ¡porque obtendrá una copia del árbol completo del repositorio, incluyendo cada rama y etiqueta de su proyecto!

Exportando
Si marca cualquiera de estas opciones, tendrá que realizar actualizaciones en su copia de trabaja utilizando TortoiseSVN → Actualizar a la Revisión… en vez de TortoiseSVN → Actualizar. La actualización estándar incluirá todas las subcarpetas y todos los vínculos externos.

Enviando sus cambios al repositorio

Una operación svn commit puede publicar los cambios sobre cualquier número de ficheros y directorios como una única transacción atómica. En su copia privada, usted puede cambiar el contenido de los ficheros, crear, borrar, renombrar y copiar ficheros y directorios, y luego enviar el conjunto entero de cambios como si se tratara de una unidad.

En el repositorio, cada cambio es tratado como una transacción atómica: o bien se realizan todos los cambios, o no se realiza ninguno. Subversion trata de conservar esta atomicidad para hacer frente a posibles fallos del programa, fallos del sistema, problemas con la red, y otras acciones del usuario.

Cada vez que el repositorio acepta un envío, éste da lugar a un nuevo estado del árbol de ficheros llamado revisión. A cada revisión se le asigna un número natural único, una unidad mayor que el número de la revisión anterior. La revisión inicial de un repositorio recién creado se numera con el cero, y consiste únicamente en un directorio raíz vacío.

La Figura 2.7, “El repositorio” ilustra una manera interesante de ver el repositorio. Imagine un array de números de revisión, comenzando por el 0, que se extiende de izquierda a derecha. Cada número de revisión tiene un árbol de ficheros colgando debajo de él, y cada árbol es una “instantánea” del aspecto del repositorio tras cada envío.

Figura 2.7. El repositorio

Importante - Números de revisión global
A diferencia de muchos otros sistemas de control de versiones, los números de revisión de Subversion se aplican a árboles enteros, no a ficheros individuales. Cada número de revisión selecciona un árbol completo, un estado particular del repositorio tras algún cambio publicado. Otra manera de ver ésto es que la revisión N representa el estado del sistema de ficheros del repositorio tras el envío de cambios N-ésimo. Cuando un usuario de Subversion habla de la “revisión 5 de foo.c”, lo que realmente quiere decir es “foo.c tal como aparece en la revisión 5.” Observe que en general, ¡las revisiones N y M de un fichero no tienen por qué ser diferentes necesariamente! Dado que CVS utiliza números de revisión para cada fichero, los usuarios de CVS pueden querer echar un vistazo a Apéndice A, Subversion para usuarios de CVS para más detalles.

Enviar los cambios que ha hecho al repositorio se conoce como confirmar los cambios. Pero antes de confirmar tiene que estar seguro de que su copia de trabajo está actualizada. Puede o bien ejecutar TortoiseSVNActualizar directamente, o bien ejecutar TortoiseSVNComprobar Modificaciones primero, para ver qué se ha cambiado localmente o en el servidor.

Si su copia de trabajo está actualizada y no hay conflictos, ya está preparado para confirmar sus cambios. Seleccione los ficheros y/o carpetas que desee confirmar y seleccione TortoiseSVNConfirmar….

Figura 2.7. El diálogo de Confirmación

El diálogo de confirmación le mostrará todos los ficheros cambiados, incluso los ficheros añadidos, borrados o no versionados. Si no desea que un fichero cambiado se confirme, símplemente desmarque ese fichero. Si desea incluir un fichero no versionado, márquelo para añadirlo a la confirmación.

Los ítems que han sido cambiados a una ruta de repositorio diferente también se indican utilizando un marcador (s). Puede haber cambiado algo mientras trabaja en una rama y habérsele olvidado volver a cambiarlo al tronco. ¡Este es su signo de advertencia!

¿Confirmar ficheros o carpetas?
Cuando confirma ficheros, el diálogo de confirmación sólo le enseña los ficheros que ha seleccionado. Cuando confirma una carpeta el diálogo de confirmación seleccionará los ficheros que han cambiado de forma automática. Si se olvidó un fichero nuevo que haya creado, al confirmar la carpeta lo encontrará. Confirmar una carpeta no significa que todos los ficheros se marquen como cambiados; sólo le hace la vida más fácil haciendo más trabajo por usted.

Si ha modificado ficheros que han sido incluidos desde un repositorio diferente utilizando svn:externals, esos cambios no pueden ser incluídos en la misma confirmación atómica. Aparecerá un símbolo de advertencia bajo la lista de ficheros que le indicará si esto ha ocurrido, y el texto de ayuda le explicará que esos ficheros externos deben confirmarse de forma separada.

Muchos ficheros sin versionar en el diálogo de confirmar
Si cree que el diálogo de confirmación de TSVN le muestra demasiados ficheros no versionados (por ejemplo, ficheros generados por el compilador o copias de seguridad hechas por su editor), hay varias formas de manejar esta situación. Puede: 1) añadir el fichero (o una extensión con máscara) a la lista de ficheros a ignorar en la página de configuración. Esto afectará a todas las copias de trabajo que tenga; 2) añadir el fichero a la lista de svn:ignore utilizando TortoiseSVNAñadir a la lista de ignorados. Esto únicamente afectará al directorio en el que establezca la propiedad svn:ignore. Puede cambiar la propiedad svn:ignore de un directorio utilizando el Diálogo de Propiedades SVN. Para más información, lea la “Ignorando ficheros y directorios”.

Haciendo doble click en cualquier fichero modificado en el diálogo de confirmaciones, se lanzará la herramienta externa de diferenciar para mostrarle sus cambios. El menú contextual le proporciona más opciones, como se ve en la captura de pantalla. También puede arrastrar ficheros desde aquí a otra aplicación, como un editor de textos o un IDE.

Las columnas que se muestran en el panel inferior son personalizables. Si hace click con el botón derecho en cualquier cabecera de columna verá un menú contextual que le permite seleccionar qué columnas se muestran. También puede cambiar el ancho de la columna utilizando el manejador de arrastre que aparece cuando mueve el cursor sobre el límite de una columna. Estas personalizaciones se mantienen, por lo que verá los mismos encabezados la siguiente vez. Tenga en cuenta que por un detalle de implementación, puede ver dos diferentes iconos de arrastre, dependiendo de dónde exáctamente ha puesto el ratón sobre el borde. Uno tiene una barra vertical sólida y el otro tiene dos líneas verticales finas. Sólo funcionará el puntero con la barra sólida.

Arrastrar y soltar
Puede arrastrar ficheros hasta el diálogo de confirmación desde cualquier otro lugar, siempre y cuando las copias de trabajo sean del mismo repositorio. Por ejemplo, puede tener una copia de trabajo enorme con diferentes ventanas del explorador abiertas en carpetas distantes de la jerarquía. Si quiere evitar confirmar desde la carpeta más alta (lo que implica una lenta operación de búsqueda de cambios) puede abrir el diálogo de confirmar para una carpeta y arrastrar desde las otras ventanas para incluir ficheros dentro de la misma confirmación atómica.

Asegúrese de introducir un mensaje de registro que describa los cambios que está confirmando. Esto le ayudará a saber qué ocurrió y cuando según navegue por los mensajes de registro del proyecto en el futuro. El mensaje puede ser tan extenso o escueto como desee; muchos proyectos tienen directrices sobre qué debe incluirse en ellos, el idioma que debe utilizarse, y a veces incluso un formato estricto.

Puede aplicar formatos sencillos en sus mensajes de registro utilizando una convención similar a la usada en los emails. Para aplicar un estilo a un texto, utilice *texto* para la negrita, _texto_ para el subrayado, y ^texto^ para la cursiva.

Figura 2.8. El corrector ortográfico del diálogo de Confirmación

TortoiseSVN incluye un corrector ortográfico para ayudarle a escribir sus mensajes de registro correctamente. Este corrector señalará cualquier palabra mal escrita. Utilice el menú contextual para acceder a las correcciones sugeridas. Por supuesto, el corrector no conoce todos los términos técnicos que utiliza, así que a veces palabras bien escritas aparecerán como errores. Pero no se preocupe. Puede simplemente añadirlas a su diccionario personal utilizando el menú contextual.

La ventana de mensajes de registro también incluye una facilidad de autocompletar nombres de ficheros y funciones. Esto utiliza expresiones regulares para extraer clases y nombres de funciones de los ficheros (de texto) que está confirmando, y también los propios nombres de ficheros. Si una palabra que está tecleando concuerda con algo en la lista (después de haber tecleado al menos 3 caracteres), aparecerá un desplegable que le permitirá seleccionar el nombre completo. Las expresiones regulares suministradas con TortoiseSVN se mantienen en la carpeta bin de la instalación de TortoiseSVN. También puede definir sus propias expresiones regulares y almacenarlas en %APPDATA%\TortoiseSVN\autolist.txt. Por supuesto su lista privada no se sobreescribirá cuando actualice su instalación de TortoiseSVN. Si no está familiarizado con las expresiones regulares, eche un vistazo a la documentación y al tutorial en línea en http://www.regular-expressions.info/.

Tras pulsar Aceptar aparece un diálogo mostrando el progreso de la confirmación.

Figura 2.9. El diálogo Progreso mostrando el progreso de una confirmación

El diálogo de progreso utiliza una codificación de colores para resaltar las diferentes acciones de confirmación:

  • Azul - Confirmando una modificación.
  • Púrpura - Confirmando un ítem añadido.
  • Rojo oscuro - Confirmando un borrado o un reemplazo.
  • Negro - Todos los demás ítems.

Este es el esquema de colores por defecto, pero puede personalizar dichos colores utilizando el diálogo de configuración. Para más información, lea “Configuración de colores de TortoiseSVN”.

Propiedades especiales de carpetas
Hay diversas propiedades especiales de carpeta que pueden usarse para darle mayor control sobre el formato de los mensajes de registro de las confirmaciones y el idioma que utiliza el módulo del corrector ortográfico. Para más información, lea “Configuración del proyecto”.
Integración con herramientas de control de errores
Si ha activado el sistema de control de errores, puede poner una o más Incidencias en el cuatro de texto Bug-ID / Issue-Nr:. Debería separar las múltiples incidencias por comas. Alternativamente, si está utilizando el soporte de control de errores basado en expresiones regulares, simplemente añada las referencias de las incidencias como parte del mensaje de registro. Si desea saber más, vea “Integración con sistemas de control de errores / seguimiento de incidencias”.

Bibliografía

cliente/subversion/cliente_svn.txt · Última modificación: 2008/10/03 16:58 por fmolinuevo