Universidad de San Carlos de Guatemala Facultad de Ingeniería Escuela de Ciencias y Sistemas Análisis y Diseño de Sistemas 2 Ing. Mario Reyes Aux. Víctor Orozco y Jennifer Donis Martinez
Practica # 1
Mario Ramón Castellanos Arana 2005 – 12086
Guatemala, Julio de 2009
Configuración de Subversion e integración con Apache 2 mediante WebDAV (Ubuntu) Instalamos los paquetes necesarios $ sudo apt-get install subversion subversion-tools apache2 libapache2-svn Creamos un grupo en el sistema operativo $ sudo groupadd subversion Y agregamos el usuario de apache “www-data” al grupo que creamos anteriormente $ sudo adduser www-data subversion Ahora creamos un usuario en un archivo que apache utilizara para acceder al sitio, nos pedirá la contraseña del usuario $ sudo htpasswd /etc/apache2/dav_svn.passwd nombreusuario Creamos un directorio para almacenar el repositorio $ sudo mkdir -p /var/svn-repos Ahora creamos un proyecto $ svnadmin create /var/svn-repos/practica1 Le damos los permisos al repositorio $ sudo chown -R www-data:subversion /var/svn-repos/practica1 $ sudo chmod -R 770 /var/svn-repos/practica1 Ahora modificamos el archivo de webDAV para que sea habilitado $ sudo gedit /etc/apache2/mods-available/dav_svn.conf Y nos tiene que quedar mas o menos de esta manera: DAV svn SVNPath /var/svn-repos/practica1 #SVNParentPath /var/svn-repos/practica1 #SVNParentPath se puede usar en vez de SVNPath SVNIndexXSLT "/svnindex.xsl" #para el estilo de la pagina AuthType Basic AuthName "Repositorio para Practica 1" AuthUserFile /etc/apache2/dav_svn.passwd Require valid-user
En Location se indica el url por el cual se ingresara al repositorio. SVNPath es el path completo del proyecto en el repositorio. Ahora copiamos los archivos para el estilo “svnindex.css” y “svnindex.xsl” en la carpeta de apache $ sudo mv '/home/mario/svnindex.css' /var/www $ sudo mv '/home/mario/svnindex.xsl' /var/www Y le cambiamos los permisos a los 2 archivos $ sudo chown www-data:subversion /var/www/index.css $ sudo chown www-data:subversion /var/www/index.xsl Y por ultimo reiniciamos Apache $ sudo /etc/init.d/apache2 restart Y solo nos queda ingresar a nuestro sitio http://localhost/svn/practica1 Creamos la estructura de directorios (Trunk, Tags y Branches) $ sudo svn mkdir file:///var/svn-repos/practica1/trunk -m "Trunk" $ sudo svn mkdir file:///var/svn-repos/practica1/tags -m "Tags" $ sudo svn mkdir file:///var/svn-repos/practica1/branches -m "Branches"
Y actualizamos nuestro sitio, y listo!!!.
Instalación y configuración de Websvn Descargamos el paquete websvn (requiere php5 pero lo instala de una vez) $ sudo apt-get install websvn Luego nos pedirá si queremos configurarlo, le damos que si e ingresamos primero los directorios padres y después los directorios que queramos que aparezcan en la pagina. Y por ultimo ingresamos a la pagina http://localhost/websvn y listo.
Creacion de un Proyecto en Netbeans e importarlo al Repositorio de Subversion Configuración de Netbeans y Subversion Requisitos recomendados: •
Netbeans 6.7 en Español
Abierto el Netbeans seleccionamos Equipo en el menú estándar y seleccionamos Subversion y luego Extraer
El enlace con Subversion sera mediante webDAV. Ingresamos el url del repositorio, el usuario y contraseña creada anteriormente. Seguidamente verificamos que la carpeta de TRUNK este seleccionada para la revisión.
Seguidamente creamos un proyecto cualquiera y le damos click derecho y luego en CONTROL DE VERSIONES y después en IMPORTAR AL RESPOSITORIO DE SUBVESION.
Nos aparecerá la siguiente imagen donde especificaremos el repositorio y el usuario.
Luego ingresamos el repositorio a donde se importara el proyecto y le agregamos un comentario.
Seleccionamos los archivos y carpetas que queremos importar.
Esperamos..... y si no aparece ningún error lo podemos ver en el explorador.
Comandos en Subversion svn: es el programa cliente en lineas de comandos, osea que se puede agregar, importar y actualizar archivos al repositorio central.
svnadmin: herramienta para crear, modificar o reparar un repositorio de Subversion. Comandos para SVN: •
checkout: Este genera una referencia o copia del repositorio central hacia un
repositorio local. svn checkout [URL] [PATH] Si se omite el path, se toma el path base de la URL que se está utilizando como destino. Nos encontramos en el directorio “/home/mario/pruebas” y el repositorio central esta en “/var/svn-repos/practica1/”, entonces el comando seria svn co file:///var/svn-repos/practica1/ svn checkout y nos importa todo lo que tengamos en el directorio. Otros ejemplos: svn checkout file:///tmp/repos/test file:///tmp/repos/quiz svn checkout http://host_name/svn_dir/repository_name/project/trunk proyecto •
copy: Copia un archivo en una copia de trabajo o en el repositorio. svn copy FUENTE DESTINO Ejemplo: svn copy foo.txt bar.txt
•
update: Actualiza los cambios que hay en el repositorio hacia nuestra copia de trabajo actual. svn update [PATH...] Ejemplo: svn update
•
import: Realiza un commit recursivo de lo que hay en path hacia URL. Este
comando sirve para añadir archivos al repositorio. Por lo general cuando se crea un proyecto, la primera vez se hace un import para copiar todo el proyecto al servidor (repositorio local o remoto). svn import path_al_directorio nombre_repositorio Ejemplo: svn import /home/mario/pruebas/proyecto1 /var/svn-repos/practica1 svn import proyecto http://host_name/svn_dir/repository_name/project -m "inicio"
•
add: Añadir archivos, directorios o enlaces simbólicos al repositorio central. svn add PATH Ejemplo: svn add archivo.txt Este se agregara hasta darle un COMMIT.
•
commit: Envía los cambios realizados en nuestra copia de trabajo hacia el
repositorio. svn commit [PATH...] Luego de añadir los archivos o proyectos con ADD se tiene que dar commit para que realice los cambios en el repositorio central. Ejemplo: svn add archivo.txt svn commit Luego aparece una especie de LOG, le agregan un comentario al archivo commit que se crea (LOG) para que los demás usuarios sepa que se hizo con ese commit. Y para salir un CTRL- X. Para crear el log automáticamente se pone el parámetro “m” y luego el mensaje. svn commit -m "mensaje" [PATH..] svn commit -m "haciendo cambios" http://localhost/svn_dir/repository/project_dir •
delete: Igual que el ADD solo que este elimina archivos o directorios. svn delete hellworld.txt svn commit -m "elimino el fichero helloworld"
Comandos Útiles: Bueno, de verdad ya estoy algo cansada, este artículo se hizo medio largo. Así que les dejo algunos comandos útiles para que experimenten con Subversion: Información sobre el repositorio: svn info Información sobre la última revisión: svn status --show-updates --verbose Obtener una revisión en concreto: svn checkout --revision [número de revisión] Actualizar copia local con una revisión en concreto: svn update --revision [número de revisión] Diferencias entre la copia local y el repositorio: svn diff
Comandos para SVNADMIN: •
create: Crea un directorio en la ruta especificada.
svnadmin create /var/svn-repos/practica1 •
recover: Este comando debe de ser ejecutado cuando obtenemos un error de que nuestro repositorio debe de ser recuperado. svnadmin recover REPOS_PATH
Ejemplo:
$ svnadmin recover /usr/local/svn/repos •
load: Lee un “dumpfile” el cual es un stream con formato proveniente de stdin, realiza commit al repositorio del sistema de las nuevas revisiones existentes. Envia el progreso hacia stdout. svnadmin load REPOS_PATH
Ejemplo:
$ svnadmin load –parent-dir new/subdir/for/project /usr/local/svn/restored •
dump: Envía el contenido de un repositorio del sistema hacia un archivo “dumpfile”. svnadmin dump REPOS_PATH [-r LOWER[:UPPER]] [--incremental]
Ejemplo:
$ svnadmin dump /usr/local/svn/repos -r 21 –incremental
Ejemplo de Branch y Tag en Subversion Branch y Tag simplemente son directorios nombrados en una estructura recomendada en Subversion. /trunk /branches /tags
Estos directorios (de branch y tag) son simplemente eso: copias de código, sin ninguna característica particular. Los desarrolladores les dan el uso y sentido correspondiente a estas copias. Como los branches y tags son directorios comunes, el comando svn move puede moverlos o renombrarlos a gusto. Por lo tanto, cambiar de una estructura a otra es tan solo ejecutar los comandos para moverlo a una nueva organización.
Branch: “Es una nueva línea de desarrollo en el repositorio creada a partir de la línea principal de desarrollo o de otra rama Branch” Son ramificiones del proyecto. En pocas palabras es una linea de modificacion sobre la linea base que se controla aparte. Las motivaciones principales del por que realizar Branchs son: • Mantener varias versiones de un mismo proyecto • Ejemplo: una branch para cada release: bugs, testing y trunk • Evitar conflictos con los demás desarrolladores durante cambios complejos
Creando un Branch Supongamos que es el momento de liberar un proyecto estable calc al público, y usted sabe que va a tomar un par de meses para resolver los errores. Por lo tanto no se quiere que la gente añada nuevas características al proyecto y tampoco se le quiere decir a todos los desarrolladores, ya sea para poner fin a la programación. Así que se crea un Branch "estable" para que no ocurra algun cambio: $ svn copy http://svn.example.com/repos/calc/trunk \ $ Svn copy http://svn.example.com/repos/calc/branches/stable-1.0 \ -m "Creación de la rama estable del proyecto CALC." Committed revision 377.
Tag: “Es la versión congelada de un proyecto en un momento dado.” Ejemplo: un tag por cada release final
Al igual que con los branch, crear un tag en Subversion es simplemente realizar una copia de los archivos. Esta copia se ubica en el directorio /tags del proyecto, por ejemplo, /tags/release-1.0.
Creando un Tag Tambien se utiliza svn copy. Ejemplo, se desea crear un tag de /calc/trunk $ svn copy http://svn.example.com/repos/calc/trunk \ http://svn.example.com/repos/calc/tags/release-1.0 \ -m "Tagging the 1.0 release of the 'calc' project." Committed revision 351.
Merge: El merge es cuando queremos aplicar los cambios que realizamos en nuestro directorio local hacia el proyecto que se encuentra en el repositorio central. Cuando se trabaja con branches surgen dos necesidades: • exportar modificaciones puntuales de la línea principal a una branch • actualizar la línea principal de desarrollo con una branch El comando que se utiliza es svn merge • svn merge arbolA arbolB directorio 1. arbolA: un árbol, del repositorio, inicial (parte izquierda de la comparación) 2. arbolB: un árbol, del repositorio, final (parte derecha de la comparación) 3. directorio:Directorio local svn merge realiza un diff entre el árbol inicial y final y tras calcular las diferencias, se aplican en el directorio local.
Realizando un Merge • $ svn merge http://ma.qui.na/repositorio/branch1@150 \ http://ma.qui.na/repositorio/branch2@212 \ mi-directorio • $ svn merge -r 100:200 http://ma.qui.na/repositorio/trunk El siguiente comando obtendría la diferencia entre la revisión número 15 de la rama experimental1 (Branch) en el repositorio y la revisión número 30 -la última- de la rama principal, y posteriormente aplicaría dicha diferencia a la copia local myproject/ (tag): • $ svn merge http://localhost/svn/myproject/branches/experimental1@15 http://localhost/svn/myproject/trunk@30 myproject/
Comparativa de Subversion y Mercurial Mercurial es un sistema de control de versiones distribuido que lo utilizan Mozilla, OpenJDK, Netbeans, entre otras. Algunos criticos comentan que estos sistemas de control de versiones distribuidos manejan bien los Branchs, entre otras cosas, en lo personal como no tengo la experiencia suficiente asumo que asi lo es. Aqui dejo algunos comentarios de usuarios avanzados:
Ventajas Mercurial • • •
• • •
Sencillo que es publicar los proyectos Facil configuracion web. Corre como cgi y con autentificación, que se configura de manera trivial y ningún problema con proxies ni nada. Cuenta con buenas herramientas como hg view que se puede ver el grafo de evolución, por ejemplo:
gran velocidad de funcionamiento y escalabilidad minimizar los efectos de latencia de red amplica documentacion
Desventajas de Mercurial •
Dedicado para grandes proyectos.
Ventajas de Subversion • • •
Hay mas herramientas para implementar Es el mas utilizado por lo tanto tiene mas recursos y herramientas. Gran numero de herramientas especialmente interfaces cliente
Desventajas Subversion •
•
Con subversión es mucho trámite, se tiene que integrar apache con svn a través de WebDAV, y la autentificación por los archivos ht*. Otro problema que tuvimos, son los proxies, que no soportan métodos DAV entonces, si uno esta detrás de un proxy, no se puede trabajar con un repositorio http, hay que usar https. Para la mayoría de sus operaciones, necesita conetarse al repositorio principal.
Screenshots WebDAV
Websvn
Fuentes: http://elverdaderoblogdelaob.wordpress.com/2009/06/14/utilizacion-de-svn-y-svnadmintrac-y-hudson/ http://sherekan.com.ar/2008/03/25/instalacion-configuracion-y-uso-de-subversion-en-linux/ http://chany1989.blogspot.com/ http://mario502gt.blogspot.com/ http://diagonalasterisco.blogspot.com/2009/06/integracion-de-subversion-y-netbeans.html http://www.dosideas.com/wiki/Branch_Tag_Con_Subversion http://en.wikipedia.org/wiki/Comparison_of_revision_control_software http://www.smashingmagazine.com/2008/09/18/the-top-7-open-source-version-controlsystems/