Acceso SVN a Sourceforge

Anuncio
Acceso SVN a Sourceforge
Proyecto EQAlign
Francisco José Calvo Fernández
fran@isoplut.com
Revisión 1.0, Agosto 2006
(c) Equipo de desarrollo de EQAlign
1
SUBVERSION
1.
1.1.
1
Subversion
Necesidad
Normalmente en un proyecto software se ven involucradas varias personas, raro es
el software que es desarrollado por una sola persona; por tanto surge una necesidad
de forma inmediata: la coordinación del trabajo. Los desarrolladores tendrán acceso al
árbol de archivos fuentes, pero ¿cómo ponerse de acuerdo en qué líneas de qué archivos
han sido modificadas, cómo fusionar los cambios de forma rápida, etc...?
Subversion nos ofrece soluciones a estos problemas, siendo ideal para desarrollar
de forma distribuida, cuando algún desarrollador desea realizar cambios a un archivo,
Subversion en lugar de reemplazar el archivo original, guarda sólo los cambios que
se le han realizado, por cada cambio realizado, se incrementa el número de versión del
archivo, siendo posible volver a versiones anteriores, y, por tanto, deshacer los cambios
si no los creemos adecuados, por ejemplo, podemos obtener una copia del proyecto tal
y como se encontraba hace un mes, hace un año, o en el momento en el que vio la luz
una versión concreta.
Con Subversion también es posible desarrollar varias versiones de un mismo software, siendo, éstas independientes. Por su naturaleza, Subversion es utilizado en masa
en el mundo del software libre, éste software es desarrollado por personas que quizás ni
se conozcan personalmente, pero que colaboran en el desarrollo de un producto, siendo
Subversion el punto de encuentro.
Antes de comenzar ver más detalles sobre Subversion necesitamos aclarar varios
términos que aparecen con mucha frecuencia cuando se utiliza este software:
Repositorio
Será el lugar dónde se almacene el proyecto, pudiendo ser local o remoto; cada
proyecto de software que deseemos que sea gestionado por Subversion ha de
poseer un único repositorio.
Módulo
Los módulos son los encargados de dividir un repositorio en distintas categorías,
según su función, por ejemplo, podemos dentro de un repositorio crear un módulo que utilicemos para gestionar la documentación del proyecto y otro para
gestionar el código fuente.
Rama
Las ramas permiten dividir el repositorio en categorías basadas en la versión
del software, permitiendo el desarrollo paralelo de ambas; por ejemplo, imagínese que tenemos un software que se encuentra en su versión 1.0, y queremos
comenzar el desarrollo de la versión 2.0, que tendrá importantes cambios, pero
no deseamos abandonar el desarrollo de la 1.0, ya que necesitará corregir fallos,
pues podemos crear dos ramas dentro del repositorio, una para la versión 1 y otra
para la 2.
Copia de trabajo
1
SUBVERSION
2
Como el propio nombre indica, se corresponde con una copia especial del repositorio Subversion. si deseamos enviar cambios al repositorio Subversion, lo primero
que hemos de hacer es obtener una copia de trabajo, que contendrá los archivos
fuentes tal y como se encontraban en el momento que nosotros indiquemos, ya
que no es posible enviar a un repositorio Subversion cambios si previamente no
hemos obtenido la copia de trabajo.
Conflicto
En caso de que varias personas en un momento determinado hayan realizado
modificaciones a un mismo bloque de código, Subversion informará de que se
ha producido un conflicto, en este caso hemos de determinar qué cambio es el
que deseamos. Será vital, por tanto, una correcta coordinación y asignación de
trabajos para evitar los conflictos.
1.2.
Introducción
Subversion o SVN es, al igual que CVS un sistema de control de versiones. Subversión puede reemplazar a los sistemas CVS, ya que posee todas sus características, pero
intenta solventar sus principales problemas. La primera versión estable de SVN vio la
luz en febrero de 2004, aunque ya desde el 2001 se ha venido utilizando en múltiples
sistemas en producción.
SVN aporta una serie de mejoras respecto a CVS, entre las que podemos destacar
las siguientes:
Posibilidad de renombrar los ficheros y directorios de un repositorio, hacer ésto
en CVS simplemente es imposible, únicamente podremos copiar el actual fichero
o directorio y eliminar el anterior, con la consiguiente pérdida del historial.
Subversion nos ofrece comandos que nos van a permitir copiar y mover archivos
o directorios incluso sin tener una copia de trabajo del repositorio, usando para
ello dos URLs como origen y destino.
Los números de revisión se establecen por cada commit y no por cada fichero,
asimismo los registros se asocian a cada revisión y no de forma redundante, como
ocurre en CVS
Subversion detecta automáticamente el tipo de archivo, y lo trata adecuadamente,
por lo que se hace innecesario la opción -kb de CVS para los ficheros binarios,
como las imágenes. En caso de duda sobre el tipo de fichero se trata como binario, para evitar pérdidas de información.
Integra un módulo para Apache2 de forma que es posible acceder al repositorio
a través de un navegador web, en CVS para realizar lo mismo hay que acudir a
sofware de terceros.
Soporta autenticaciones a través de HTTP o al igual que CVS, a través de su
propio demonio o SSH.
1
SUBVERSION
3
Las salidas que genera Subversion son más legibles y menos caóticas, por lo que
pueden ser más fácilmente interpretables.
Crear ramas es más elegante, y es que la forma de trabajar con Subversion es
algo diferente respecto a CVS. El repositorio contiene un árbol de directorios,
con sus correspondientes archivos y subdirectorios, en lugar de módulos. Si ese
repositorio tan sólo almacena un proyecto, lo habitual es que en ese árbol, haya
un directorio trunk (tronco), y un directorio branches (ramas).
SVN se ha diseñado desde el principio para poseer una arquitectura cliente/servidor,
para evitar algunos de los problemas del CVS.
En general y a modo de resumen podemos llegar a la conclusión de que SVN es un CVS
mejorado ya que es mucho más moderno y se ha aprendido de los errores que por su
antiguo diseño arrastra CVS.
1.3.
Instalación de un cliente de SVN
EQAlign utiliza el repositorio de Sourceforge, con lo que no hemos de instalar
ningún servicio adicional, simplemente en la interfaz de gestión del proyecto se ha de
activar el soporte de SVN (y desactivar el de CVS), junto con la gestión de privilegios
(acceso anónimo de lectura o como desarrollador).
Por tanto, necesitamos un cliente de svn, Sourceforge recomienda para sistemas
Windows el software TortoiseSVN, descargable libremente desde http://tortoisesvn.sourceforge.net,
es muy simple y se integra en el explorador de Windows; para Unix es recomendable
el cliente oficial disponible en http://subversion.tigris.org.
1.4.
Primeros pasos en SVN
Partiremos de una estructura de archivos que queremos sea manejada por SVN, será
el código fuente de la última versión de EQAlign.
Crear el repositorio (sólo el administrador)
Para comenzar a trabajar, lo primero que necesitamos es crear el repositorio. Para
crear un repositorio en SVN hemos de utilizar TortoiseSVN o la herramienta oficial
svnadmin. El proceso de creación, al igual que con CVS, consiste en generar una estructura de ficheros y directorios que van a contener la versión inicial de nuestro código
basándonos en el contenido antes mostrado. Para ello, siga los pasos descritos a continuación:
Si usamos TortoiseSVN :
1. Hemos de conocer la ruta al repositorio que nos ofrece Sourceforge, para EQAlign
es:
https://svn.sourceforge.net/svnroot/eqalign
1
SUBVERSION
4
a) Desde el explorador de archivos localizamos el directorio del código fuente
y sobre el directorio, con el botón derecho del ratón vamos al menú TortoiseSVN ->Export
Figura 1: Acceso a la configuración del repositorio.
b) Posteriormente, completamos el campo URL of repository, con la URL
antes comentada, el campo Export directory ha de fijarse al directorio del
código fuente.
Figura 2: Valores del entorno SVN.
2. Vamos a importar los archivos de nuestro proyecto software al repositorio SVN
realizando, por tanto la importación inicial al repositorio, para ello, de nuevo,
1
SUBVERSION
5
desde el explorador de archivos localizamos el directorio del código fuente y sobre dicho directorio, con el botón derecho del ratón vamos al menú TortoiseSVN
->Import, fijamos la URL anterior, que nos saldrá en la lista.
Figura 3: Valores del entorno SVN.
Si utilizamos la versión en línea de comandos de SVN:
1. Creamos el repositorio que almacenará el código de nuestro proyecto, la herramienta svnadmin se encarga de ello:
svnadmin create https://svn.sourceforge.net/svnroot/eqalign
2. El repositorio creado no contiene ningún fichero y el numero de revisión es 0;
vamos a importar los archivos de nuestro proyecto software al repositorio SVN
realizando, por tanto la importación inicial al repositorio.
Para ello nos situamos en el directorio en el que hasta ahora almacenábamos el
código de nuestro proyecto o bien indicamos su ruta completa:
svn import /ruta/al/directorio/del/proyecto https://svn.sourceforge.net/svnroot/eqalign
-m ”Importación inicial al repositorio”
Veamos cada opción detenidamente:
a) El comando import se utiliza para realizar una importación de código al
repositorio, al igual que ocurría con CVS, seguido del directorio o archivo
a importar y el repositorio donde deseamos importar (nótese la notación en
forma de URL).
b) La opción -m especifica que vamos a crear un módulo; el texto que va entre
comillas realmente no es importante, sólo indica el nombre de la transacción que vamos a realizar.
1
SUBVERSION
6
Hemos de resaltar que la opción import sólo hemos de utilizarla para crear nuevos
módulos dentro del repositorio, nunca para actualizar los contenidos.
Tras seguir estos pasos ya tenemos sentadas las bases para que Subversion pueda
gestionar nuestro proyecto, pero aún necesitamos realizar algunas acciones para poder
comenzar a trabajar de forma adecuada.
Obtener una copia de trabajo
Si queremos que Subversion se encargue de gestionar nuestro proyecto, de nuevo,
hemos de dejar de trabajar directamente con los archivos de dicho proyecto, no
hemos de preocuparnos, en su lugar hemos de obtener una copia de trabajo, que contendrá todos los contenidos que existían en el directorio del proyecto y metainformación de control para SVN. El código antiguo, lo guardamos en una copia de seguridad
por si fuera necesario en el futuro.
Para ello, seguimos los pasos siguientes:
1. Nos situamos en el directorio donde deseemos almacenar la copia de trabajo (lo
ideal es crear un directorio previamente), y que a partir de ahora será también el
directorio de nuestro proyecto, puede seleccionar el directorio que quiera; sobre
dicho directorio, con el botón derecho del ratón vamos al menú SVN Checkout, fijamos la URL del módulo que deseamos obtener o bien https://svn.sourceforge.net/svnroot/eqalign
(en este caso obtendremos una copia de todo el repositorio, con todos sus módulos), y el directorio donde se almacenará la copia de trabajo.
Figura 4: Obtención de una copia completa de trabajo.
2. Si optamos por la versión en línea de comandos, simplemente le pasamos el comando checkout seguido del nombre del módulo que deseamos obtener, donde
nombreDirectorio puede ser lo que queramos, ya que se corresponde con el directorio donde almacenaremos los archivos que representarán nuestra copia de
trabajo:
svn checkout https://svn.sourceforge.net/svnroot/eqalign nombreDirectorio
1
SUBVERSION
7
Podremos notar que en nuestro directorio se ha creado otro directorio
con el nombre del módulo , que contiene una copia de los contenidos del repositorio, perfectamente editables y que contienen
un directorio (oculto) llamado .svn, con la metainformación necesaria para que SVN pueda gestionar nuestros cambios. Ahora éste
será el directorio de nuestro proyecto, con éstos archivos trabajaremos.
Pasaremos a ver, a continuación el trabajo diario a realizar con Subversion.
Obtener los cambios que otros hayan realizado
Antes de comenzar a realizar nuestro trabajo diario con el proyecto software lo
más recomendable será pedir a SVN que nos envíe las modificaciones que nuestros
compañeros hayan podido realizar, y así tener una copia actualizada.
Para obtener una copia actualizada mediante Tortoise SVN basta con hacer click
con el botón derecho del ratón sobre el directorio que almacena nuestra copia de trabajo
e ir a SVN Update.
Figura 5: Actualización de una copia de trabajo.
Si deseamos utilizar la versión en línea de comandos, basta con invocar el comando
update de SVN, desde el directorio de la copia de trabajo:
cd /directorio/copia/trabajo
svn update
En ambos casos, veremos una salida similar a:
svn update
U main.cpp
Updated to revision 3.
Si interpretamos la salida, quiere decir que alguien ha modificado el fichero main.cpp,
y lo hemos actualizado, de ahí la U (Update) que aparece en la línea resaltada. Si no
1
SUBVERSION
8
obtenemos ningún mensaje de este tipo, querrá decir que no existe ninguna diferencia
entre lo almacenado en el repositorio y nuestra copia local.
En caso de desear información detallada sobre los cambios existentes entre su copia
local y el repositorio, podemos enviar el comando diff a Subversion o mediante Tortoise
SVN ->Check for modifications.
cvs diff 1
Lo que puede producir la siguiente salida:
svn diff
svn diff
Index: main.cpp
============================
— main.cpp (revision 3)
+++ main.cpp (working copy)
@@ -1,5 +1,5 @@
/*
-* Ejemplo básico de uso de las QT (2):
+* Ejemplo básico de uso de las QT, editor de textos:
* Ejecute: qmake -project
qmake
make
@@ -47,7 +47,7 @@
WidgetPrincipal::WidgetPrincipal( QWidget *parent, const
char *name )
: QWidget( parent, name )
{
- setMinimumSize( 200, 120 );
+ //setMinimumSize( 200, 120 );
//setMaximumSize( 400, 240 );
/*
Si lo que deseamos es ver el log o registro de modificaciones puede ejecutar cvs log2 o
Tortoise SVN ->Show log, y obtendrá una salida parecida a:
svn log main.cpp
1 Las
líneas que comienzan por - han sido cambiadas por las que comienzan por +
2 La mayoría de comandos que enviamos al repositorio aceptan como argumento un fichero, que será sobre
el que se realice la acción, por ejemplo, si sólo nos interesa el historial de cambios realizados a main.cpp,
ejecutamos svn log main.cpp
1
SUBVERSION
9
————————————————————————
r3 | boreal | 2004-08-07 18:08:48 +0200 (Sat, 07 Aug 2004)
| 1 line
He añadido comentarios al código
————————————————————————
r2 | boreal | 2004-08-07 18:03:52 +0200 (Sat, 07 Aug 2004)
| 1 line
He cambiado el nombre del ejecutable
————————————————————————
r1 | boreal | 2004-08-07 17:31:34 +0200 (Sat, 07 Aug 2004)
| 1 line
Importación inicial al repositorio SVN
————————————————————————
Enviar mis propios cambios
Cuando concluyamos nuestro trabajo diario, es el momento de enviar nuestros cambios al repositorio, para ello, simplemente hemos de invocar al comando commit de
SVN o SVN Commit sobre el directorio de la copia de trabajo. Dichos comandos nos
preguntarán por el log que queremos añadir a nuestros cambios, es muy recomendable
que se indiquen los cambios, para que el resto de desarrolladores no tengan que jugar
a ser adivinos.
cd /home/boreal/Proyectos/miProyecto
svn commit –message "Desactivación del tamaño mínimo de la ventana"
Tras lo cual obtendremos una salida similar a:
svn commit –message "Desactivación del tamaño mínimo de la ventana"
Sending main.cpp
Transmitting file data .
Committed revision 4.
Gestionar ficheros y directorios
Puede que en algún momento necesite añadir o eliminar ficheros o directorios a su
proyecto, realizar ésto es muy sencillo si usamos Tortoise SVN, al realizar el commit se
nos desplegará una ventana informando de ello, simplemente activamos o desactivamos
la casilla correspondiente para añadir o eliminar ficheros/directorios.
1
SUBVERSION
10
Figura 6: Nuevo fichero detectado al realizar un commit
Si optamos por la herramienta en línea de comandos:
Para añadir un directorio (hemos de crearlo antes en nuestra copia de trabajo):
svn add directorio
Para añadir un fichero (también ha de existir en la copia de trabajo):
svn add fichero
Tras ejecutar alguna de las acciones anteriores, realizamos el commit:
svn commit
Para crear un nuevo directorio bajo control de versiones en la copia de trabajo:
svn mkdir
Si deseamos borrar un fichero, basta con ejecutar:
rm fichero
svn delete fichero (si es un directorio, SVN no lo borra inmediatamente, sino que espera hasta que hagamos el commit para borrarlo
tanto de la copia local como del repositorio)
svn commit
2
2.
MÓDULOS EN EL REPOSITORIO
11
Módulos en el repositorio
Tenemos los siguientes módulos disponibles en el repositorio de Sourceforge:
eqalign-win, módulo EQAlign para Windows sobre MS.NET.
installer, submódulo contenedor de los scripts del instalador.
trunk, rama de desarrollo principal (inestable).
branches, distintas ramas/releases, normalmente estables.
eqalign-win-1_0, rama 1.0 de eqalign, estable.
installer-win-1_0, rama 1.0 del instalador, estable.
eqalign-mono, EQAlign para Linux/Windows sobre Mono.
trunk, rama de desarrollo principal, inestable.
doc, módulo contenedor de la documentación sobre EQAlign.
Es posible obtenerlos todos al mismo tiempo realizando un checkout del repositorio
https://svn.sourceforge.net/svnroot/eqalign o bien obtenerlos individualmente, por
ejemplo, para obtener una copia de trabajo de la rama estable 1.0, habría que realizar
un checkout de:
https://svn.sourceforge.net/svnroot/eqalign/eqalign-win/branches/eqalign-win-1_0.
Si lo deseas puedes navegar por estos módulos en la url https://svn.sourceforge.net/svnroot/eqalign/
Descargar