Instalación y uso de Subversion para principiantes
Subversion no es solo para codificadores o programadores. Puede ser utilizado para muchas cosas como restaurar la configuración de Nagios, documentos, y casi cualquier cosa basada en texto. Muchas personas se han preguntado por qué no comenzaron a utilizarlo antes. Para ellos, aquí mostramos cómo dar los primeros pasos en Subversion.
Este artículo explica rápidamente como instalar, configurar y usar Subversion localmente. Así como en una red a través de Apache. Para instalaciones y configuraciones más complejas, consulte la documentación que suministramos más abajo. Existe gran cantidad de documentos bien escritos y detallados sobre el tema. Este es solo un comienzo rápido para los que desean aprender algo nuevo.
Sistema
- CentOS 4.3 Server CD /RHEL 4
- Subversion 1.1.4
Paquetes y dependencias
- Subversion: RPM subversion-1.1.4-2.ent
- Módulo de apache: RPM mod_dav_svn-1.1.4-2.ent
Referencias
Subversion: http://subversion.tigris.org/
Control de Versiones con Subversion: http://svnbook.red-bean.com/
Contents
1. Instalación
Para nuestro ejemplo vamos a utilizar una instalación mínima del CD Servidor de CentOS 4.3 en una máquina con el VMware Server. Lo primero que necesitamos hacer es instalar los paquetes que mencionamos arriba.
[root@lucifer ~]# yum install mod_dav_svn subversion Dependencies Resolved ============================================================================= Package Arch Version Repository Size ============================================================================= Installing: mod_dav_svn i386 1.1.4-2.ent base 50 k subversion i386 1.1.4-2.ent base 1.6 M Installing for dependencies: apr i386 0.9.4-24.5.c4.1 base 88 k apr-util i386 0.9.4-21 base 51 k guile i386 5:1.6.4-14 base 746 k httpd i386 2.0.52-22.ent.centos4 base 887 k httpd-suexec i386 2.0.52-22.ent.centos4 base 28 k neon i386 0.24.7-4 base 86 k perl-URI noarch 1.30-4 base 79 k swig i386 1.3.21-6 base 1.0 M umb-scheme i386 3.2-35 base 967 k Transaction Summary ============================================================================= Install 11 Package(s) Update 0 Package(s) Remove 0 Package(s) Total download size: 5.5 M Is this ok [y/N]:
Diga si (y) y continúe hacia delante. Probablemente, sus opciones sean diferentes a las mostradas. Esa es la instalación.
2. Configuración
2.1. Apache
Antes de continuar profundizando, necesitamos asegurarnos de que Apache esté correctamente configurado. En nuestro caso asumimos que esto es una instalación virgen de CentOS, de lo contrario si ya tiene Apache trabajando, sea cuidadoso con lo que cambie. También explicaremos cómo configurar la protección básica por contraseña. En los casos que desee permitir el acceso público a los repositorios, puede descartar esto.
Lo primero es editar el fichero de configuración de Apache (/etc/httpd/conf/httpd.conf) y realizar los cambios que sean necesarios. Si necesita más ayuda o una configuración más complejas. Por favor consulte la documentación de Apache.
[root@lucifer ~] vim /etc/httpd/conf/httpd.conf -- Edit what you need and save the file [root@lucifer ~] service httpd start [root@lucifer ~] chkconfig httpd on
Busque su computadora en la red y compruebe que pueda ver la página de prueba. Para ello ponga la dirección de su computadora en un navegador web. Ej http://yourserver. Funcionó ? Bien, vamos ahora con algo más divertido.
2.2. Configuración de Apache para Subversion
El próximo paso es configurar algunos detalles en Apache para que Subversion y Apache funcionen juntos cómodamente. Edite el fichero de configuración que Subversion instaló para usted:
[root@lucifer ~] cd /etc/httpd/conf.d/ [root@lucifer ~] vim subversion.conf # Make sure you uncomment the following if they are commented out LoadModule dav_svn_module modules/mod_dav_svn.so LoadModule authz_svn_module modules/mod_authz_svn.so # Add the following to allow a basic authentication and point Apache to where # the actual # repository resides. <Location /repos> DAV svn SVNPath /var/www/svn/repos AuthType Basic AuthName "Subversion repos" AuthUserFile /etc/svn-auth-conf Require valid-user </Location>
La ubicación (Location) es lo que Apache pasará en la barra de la URL. Por ejemplo: http://yourserver/repos apunta a el SVNPath que usted ha especificado. Nuestro ejemplo es simplemente eso, así que puede tomarse la liberta de poner las cosas donde desee. Asegúrese de salvar el fichero cuando haya terminado de editarlo.
A continuación tenemos que crear el fichero de contraseña que usted especificó en el paso anterior. Inicialmente utilizará el argumento -cm. Esto creará un fichero y encriptará la contraseña con MD5. Si usted necesita adicionar más usuarios, después de la creación inicial, asegúrese de haber utilizado solo la bandera -m y no -c.
[root@lucifer ~] htpasswd -cm /etc/svn-auth-conf yourusername New password: Re-type new password: Adding password for user yourusername [root@lucifer ~] htpasswd -m /etc/svn-auth-conf anotherusername New password: Re-type new password: Adding password for user anotherusername [root@lucifer ~] service httpd restart
2.3. Configurando su repositorio
Lo siguiente que necesitamos hacer es crear el repositorio actual en el cual comprobaremos las entradas y salidas a sus ficheros. Esto es simple de hacer con algunas de las herramientas incluidas en svn.
[root@lucifer ~] cd /var/www/ -- Or wherever you placed your path above [root@lucifer ~] mkdir svn [root@lucifer ~] cd svn [root@lucifer ~] svnadmin create repos [root@lucifer ~] chown -R apache.apache repos [root@lucifer ~] service httpd restart
Luego comprobamos si se pude o no acceder al repositorio creado desde el navegador web: http://yourserver/repos. Usted debe recibir un pop-up preguntándole su nombre de usuario y contraseña. De ser así, escriba sus credenciales y debe recibir como respuesta una página con el texto Revision 0:/. De ser así, esa es la configuración del repositorio.
Si desea múltiples repositorios, lea la documentación que suministramos en los enlaces de arriba. En nuestro ejemplo solo configuramos un repositorio para mostrarle como comenzar a usarlo. Hablando de ello, a continuación vamos a ver como hacer exactamente eso.
3. Usando Subversion
3.1. Preparando su repositorio
Si todo lo que hicimos arriba le resultó bien, ahora estamos listos para comenzar a utilizar el repositorio que acabamos de crear. La herramienta svn de Subversion es un cliente de línea de comando que usaremos para hablarle a la base de datos. Para ver el uso de la herramienta svn, utilice la opción --help:
[root@lucifer ~] svn --help
Los argumentos más comunes que seguramente utilizará son: svn import, `svn checkout (co), svn commit (ci)`. Con estos usted importará inicialmente los ficheros hacia el interior de su repositorio, comprobará los trabajos realizados en ellos y aplicará los cambios de regreso a la base de datos. Es bastante sencillo una vez que los utilice varias veces.
Antes de continuar, vamos a explicar sobre la preparación de la estructura de directorios. Casi todas las documentaciones hablan sobre crear una cierta organización para sus directorios. Especialmente se menciona la existencia de branches, tags y trunk bajo la estructura del directorio raíz, donde trunk contiene todos los ficheros. Por ejemplo:
. |-- project1 | |-- branches | |-- tags | `-- trunk `-- project2 |-- branches |-- tags `-- trunk
En el libro se explica el por qué con un poco más de detalles. Para nuestro ejemplo no nos resulta incomodo utilizar este tipo de disposición porque no estamos codificando o manteniendo proyectos de software. Nuestro objetivo principal es almacenar ficheros de configuración y elementos de texto que no son complejos. Usted puede ajustar esto a sus necesidades.
Para continuar con nuestro ejemplo, vamos a crear algunos directorios y ponerles algunos ficheros adentro. Esto lo hacemos localmente en el servidor svn actual.
[root@lucifer ~] cd /tmp [root@lucifer ~] mkdir mytestproj [root@lucifer ~] cd mytestproj [root@lucifer ~] mkdir configurations options main [root@lucifer ~] vim configurations/testconf1.cfg -- Add whatever you want to these files. [root@lucifer ~] vim options/testopts1.cfg [root@lucifer ~] vim main/mainfile1.cfg
Recuerde que usted puede crear la disposición de directorios que estime conveniente. Una vez que tenga la disposición inicial de lo que usted desea, es hora de importarla a Subversion.
3.2. Importando
[root@lucifer ~] svn import /tmp/mytestproj/ file:///var/www/svn/repos/mytestproj -m "Initial repository layout for mytestproj" Adding /tmp/mytestproj/main Adding /tmp/mytestproj/main/mainfile1.cfg Adding /tmp/mytestproj/configurations Adding /tmp/mytestproj/configurations/testconf1.cfg Adding /tmp/mytestproj/options Adding /tmp/mytestproj/options/testopts1.cfg
3.3. Comprobando
Ahora comprobamos el resultado a través del navegador web. Ej. http://yourserver/repos. Lea con cuidado el resultado que se muestra, debe coincidir con lo que usted importó. Una vez que suba la disposición original al servidor svn esta quedará disponible para ser usada remotamente desde otra computadora, por tanto tiempo como esté conectado a el servidor de Subversion mediante alguna de las cuentas de usuario que creo anteriormente. Veamos un ejemplo:
[me@mylappy ~] cd /tmp [me@mylappy ~] svn co http://yoursvnserver/repos/mytestproj Authentication realm: <http://yoursvnserver:80> Subversion repos Password for 'youruser': A mytestproj/main A mytestproj/main/mainfile1.cfg A mytestproj/configurations A mytestproj/configurations/testconf1.cfg A mytestproj/options A mytestproj/options/testopts1.cfg Checked out revision 1.
3.4. Editar y aplicar
Como acabamos de ver, se ha comprobado la revisión 1 desde el servidor Subversion. Ahora podemos editar algunas cosas y aplicar los cambios de regreso al servidor Subversion.
[me@mylappy ~] cd mytestproj [me@mylappy ~] vim configurations/testconf1.cfg -- Add or delete something and save. [me@mylappy ~] svn commit -m "Added a line to testconf1.cfg." Sending configurations/testconf1.cfg Transmitting file data . Committed revision 2.
Lo agradable de esto es que podemos eliminar todo el directorio que acabamos de confirmar. De hecho, la única razón por la que confirmamos fue para editar el contenido y luego ponerlo de regreso en línea. Explore su servidor web para comprobar la diferencia de los ficheros.
3.5. Adicionando y borrando elementos
Hasta ahora todo bien, pero cómo adicionamos más ficheros a directorios existentes en el repositorio ? Fácil, con el argumento add. Siga adelante y compruebe la última versión de su repositorio, copie un fichero a el directorio con add. Luego confirme los cambios con commit.
[me@mylappy ~] svn co http://yoursvnserver/repos/mytestproj A mytestproj/main A mytestproj/main/mainfile1.cfg A mytestproj/configurations A mytestproj/configurations/testconf1.cfg A mytestproj/options A mytestproj/options/testopts1.cfg Checked out revision 2. [me@mylappy ~] cd mytestproj [me@mylappy ~] cp /etc/yum.repos.d/CentOS-Base.repo configurations/ [me@mylappy ~] svn add configurations/CentOS-Base.repo A configurations/CentOS-Base.repo [me@mylappy ~] svn commit -m "Added the CentOS Yum repo file." Adding configurations/CentOS-Base.repo Transmitting file data . Committed revision 3.
Para eliminar elementos simplemente use delete en lugar de add. Aplique los cambios de regreso y estarán listos para continuar. Es tan simple como eso. Regrese nuevamente a su navegador web y notará que el número de revisión ahora debe ser 3. Usted podrá hacer clic en los ficheros y seleccionar los directorios de la misma forma.
3.6. Revertiendo
Ok, todo esto está muy bien pero cómo revertimos los cambios a una versión anterior ... a caso no es esto el punto de Subversion ?
Sí, así es.
Si está inseguro de la versión en la que se encuentra ... pruebe el comando log. Esta es la razón por la cual usted puso un mensaje dentro de cada confirmación, corto y preciso, pero suficiente información para hacerle recordar.
[me@mylappy ~] svn log http://yoursvnserver/repo -- For the entire repository [me@mylappy ~] svn log http://yoursvnserver/repo/mytestproj -- For the specific project
Esto devolverá una lista completa con números de revisiones y comentarios. Como mencionamos más arriba, esto nos permite seleccionar la revisión a la que deseamos regresar.
[me@mylappy ~] svn co -r 1 http://yoursvnserver/repo/mytestproj
Este comando lo llevará a la revisión número 1.
4. Listas de control de acceso
Usualmente, no es necesario que todos los usuarios tengan acceso a todos los repositorio. Usando las ACLs, podemos restringir el acceso a los repositorios por usuario. Las ACLs pueden ser habilitadas en el fichero especificado en la opción AuthzSVNAccessFile la cual toma el nombre de un fichero como su parámetro. Por ejemplo:
AuthzSVNAccessFile /etc/svn-acl-conf
Usted puede adicionar lo siguiente a la sección Location del fichero /etc/httpd/conf.d/subversion.conf:
<Location /repos> DAV svn SVNParentPath /var/www/svn/repos AuthzSVNAccessFile /etc/svn-acl-conf AuthType Basic AuthName "Subversion repos" AuthUserFile /etc/svn-auth-conf Require valid-user </Location>
Cree el fichero /etc/svn-acl-conf. Este fichero está formado por secciones de la forma siguiente:
[reponame:repopath] user = access
Donde access puede ser r (lectura), rw (lectura y escritura), o dejarlo vacío para ningún acceso. La ACL por defecto niega el acceso de los usuarios al repositorio. Suponga que existe un repositorio nombrado framework al cual le gustaría dar permisos de lectura al usuario jhon y a joe de lectura y escritura. Para esto puede adicionar las secciones siguientes:
[framework:/] john = r joe = rw
Además, es posible crear grupos en una sección llamada groups. Los grupos son prefijados con el símbolo arroba (@) en la lista de control de acceso. Por ejemplo:
[groups] staff = joe, george [framework:/] john = r @staff = rw
Si prefiere hacer accesibles todos los repositorios por todos los usuarios, puede adicionar una sección para el directorio raíz de cada repositorio.
[/] * = r
5. Conclusión
Este artículo ha sido solo una pequeña muestra del poder que puede ofrecernos Subversion. Esta guía rápida nos pone en camino y muestra cómo usarlo, un poco para entender como funciona. Usted puede hacer cualquier cosa con las herramientas de Subversion, así que asegúrese de leer los documentos para comprender las diferentes opciones que puedan ayudarlo en sus tareas.
Recuerde que aunque la instalación de Apache puede estar capacitada para sus necesidades, puede utilizar todas las herramientas de Subversion localmente en una computadora si especifica el camino al repositorio de la forma file:///path/to/repo, en vez de la forma (http://yoursvnserver/repos/whatever) que utilizamos en nuestros ejemplos con Apache.
Subversion parece ser una alternativa que muchas personas utilizan en sus computadoras locales para mantener proyectos y ficheros de configuración.
Buena Suerte!!!