Tutorial de subvesion
Upcoming SlideShare
Loading in...5
×

Like this? Share it with your network

Share

Tutorial de subvesion

  • 4,267 views
Uploaded on

Descripcion completa sobre como usar subversion

Descripcion completa sobre como usar subversion

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
4,267
On Slideshare
4,135
From Embeds
132
Number of Embeds
3

Actions

Shares
Downloads
87
Comments
0
Likes
0

Embeds 132

http://blog.pablo-morales.com 99
http://zendhispano.blogspot.com 25
http://www.slideshare.net 8

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. Introducci´n a Subversion o ´ Alejandro Alvarez Ayll´n o 21 de febrero de 2008 Este ap´ndice es una gu´ introductoria al sistema de control de versiones e ıa Subversion. Si necesita una documentaci´n completa puede consultar Version o Control with Subversion[4] 1. Introducci´n o 1.1. Qu´ es e Subversion es un sistema libre de control de versiones, es decir, controla los archivos y directorios y sus cambios a lo largo del tiempo. Un ´rbol de archivos se almacena en un repositorio central, que es como un a sistema de archivos normal, con la diferencia de que almacena todos los cambios realizados. Permite acceder a trav´s de la red, por lo que puede ser usado desde distintos e ordenadores, incentivando la colaboraci´n, ya que se trabaja sobre el mismo o conjunto de datos. Dado que los cambios no se centralizan, se progresa m´s r´pidamente, sin a a perder adem´s calidad en el proceso, ya que si se realiza un cambio erroneo a puede deshacerse. Adem´s, puede controlar desde c´digo fuente en cualquier lenguaje hasta a o ediciones de v´ ıdeo. 1.2. Vocabulario A continuaci´n se describen algunos t´rminos de uso habitual en este ´mbito. o e a L´ ınea base (“Baseline”) Una revisi´n aprobada a partir de la que se pueden o realizar cambios. Rama (“branch”) Conjunto de ficheros con dos o m´s copias mantenidas de a forma independiente. “Check-out” (“checkout”, “co”) Crear una copia para trabajar localmen- te. 1
  • 2. “Commit” (“check-in”, “ci”, “install”, “submit”) Escribir los cambios locales sobre el repositorio. Conflicto Ocurre cuando se realizan cambios por diferentes partes al mismo documento, y el sistema es incapaz de reconciliar los mismos. Cambio (“change”, “diff”, “delta”) Representa una modificaci´n de un do- o cumento. Lista de cambios (“changelist”, “change set”, “patch”) Conjunto de cam- bios realizados en un unico commit. ´ Exportaci´n (“export”) Una exportaci´n es similar a un check-out, salvo o o porque crea un ´rbol de directorios limpio sin los metadatos de control de a versiones presentes en la copia de trabajo. Importaci´n (“import”) Es la acci´n de copia un ´rbol de directorios local o o a en el repositorio por primera vez. Integraci´n (“merge”) Una integraci´n une dos conjuntos de cambios sobre o o un fichero o un conjunto de ficheros en una revisi´n unificada de dicho o fichero. Puede suceder cuando un usuario actualiza su copia local con los cambios realizados por otros usuarios. An´logamente, este mismo proceso puede a ocurrir en el repositorio cuando un usuario intenta subir sus cambios. O despu´s de que se haya creado una rama y sea necesario aplicar en ella e un cambio realizado en otra (solucionar un error anterior a la divisi´n, por o ejemplo) O cuando se quieran fundir dos ramas diferentes de desarrollo. Repositorio El repositorio es el lugar en el que se almacenan los datos actua- lizados e hist´ricos o Integraci´n inversa El proceso de fundir ramas de diferentes equipos en la o rama principal del sistema de versiones. Revisi´n (“versi´n”) Una revisi´n es una versi´n dentro de una cadena de o o o o cambios. Etiqueta (“tag”, “release”) Se puede etiquetar un conjunto de ficheros con un nombre f´cil de identificar, o con un n´mero de revisi´n. a u o Resolver Intervenci´n del usuario para atender un conflicto entre diferentes o cambios al mismo documento. Actualizaci´n (“sync”) Integraci´n de los cambios que han sido hechos en o o el repositorio sobre la copia de trabajo local. Copia de trabajo Copia local de los ficheros de un repositorio. Todo el trabajo realizado sobre los ficheros en un repositorio se realiza inicialmente sobre una copia de trabajo. 2
  • 3. 1.2.1. Caracter´ ısticas Control de directorios Subversion implementa un sistema de ficheros “vir- tual” que controla los cambios a todo el ´rbol de directorios. a Control “verdadero” Subversion permite el a˜adido, borrado, copia y re- n nombrado de archivos y directorios, teniendo cada nuevo archivo un his- torial propio aunque el nombre coincida con un archivo antiguo que fuera borrado. Env´ at´micos Un conjunto de cambios se aplican al repositorio completa- ıos o mente o no se aplica ninguno, evitando inconsistencias. Metadatos versionados A cada archivo o directorio se le puede aplicar cual- quier propiedad que se quiera, manteniendo un historial de los cambios. Elecci´n de las capas de red Subversion abstrae el acceso al repositorio, por o lo que se puede implementar distintas maneras de hacerlo a trav´s de la e red: como m´dulo de Apache HTTP Server, por ejemplo. Tambi´n existe o e un peque˜o y ligero servidor que puede usarse f´cilmente a trav´s de SSH. n a e Manejo consistente de los datos La diferencia entre archivos se almacena usando un algoritmo diferencial binario, por lo que se puede aplicar a archivos de texto o binarios. 2. Instalaci´n o Subversion est´ construido sobre una capa de portabilidad llamada APR a (Apache Portable Runtime library), lo que significa que es capaz de funcionar en cualquier sistema operativo en el que el servidor Apache httpd se ejecute: Windows, Linux, todos los BSD, Mac OS X, Netware, etc. La manera m´s sencilla de instalarlo es descargar el paquete construido para a su sistema operativo desde el sitio web de Subversion (http://subversion.tigris.org). Normalmente pueden encontrarse instaladores gr´ficos para los usuarios de sis- a temas operativos de Microsoft. Si usa un sistema Unix-like, puede usar el sistema nativo de paquetes (RPMs, DEBs, etc.) para obtener Subversion. Como alternativa, puede compilar Subversion directamente a partir de la ultima versi´n del c´digo fuente. Antes de descomprimirlo siga las instruccio- ´ o o nes del archivo INSTALL. Tenga en cuenta que un paquete contiene todo lo necesario para compilar un cliente capaz de conectarse a repositorios remotos, pero opciones adicionales pueden tener otras dependencias (como Berkeley DB o Apache httpd). Si quiere compilar una versi´n completa debe asegurarse de o que tiene todos los paquetes listados en el archivo INSTALL. Si quiere trabajar en el c´digo, puede usar su cliente para obtener el c´digo o o m´s reciente. a 3
  • 4. 3. Gu´ b´sica r´pida ıa a a Lo primero que debe tener en cuenta es el comando que le resultar´ m´s util a a ´ para empezar a usar Subversion: svn help. Puede usarlo de la forma svn help COMANDO para obtener ayuda sobre el comando pasado como par´metro. a 3.1. Checkout inicial Lo primero que debe hacer es obtener una copia de trabajo local a partir del repositorio central: $ svn checkout svn://osl.uca.es/proyecto Esto crear´ un nuevo directorio llamado “proyecto”, dentro del que se des- a cargar´n todos los archivos del mismo. Una vez hecho esto ya puede empezar a a trabajar como lo har´ normalmente. ıa NOTA: Aunque puede usarlo como si fuera un directorio normal, para copiar o mover archivos deber´ usar los comandos svn copy y a svn move en lugar de los habituales. Dentro de cada directorio del proyecto se crear´ otro directorio llamado a “.svn”. No borre ni modifique su contenido bajo ning´n concepto. u Si quiere descargar el proyecto en un directorio con un nombre diferente, puede hacerlo: $ svn checkout svn://osl.uca.es/proyecto MiProyecto De esta forma en lugar de crear un directorio llamado “proyecto” se crear´ uno a llamado “MiProyecto”. 3.2. Ciclo de trabajo b´sico a Pese a la gran variedad de comandos que tiene Subversion, la mayor´ de las ıa veces bastan unos pocos de ellos. El ciclo normal es: 3.2.1. Actualizar la copia de trabajo Cuando quiere actualizar su copia de trabajo con el repositorio central debe ejecutar svn update. $ svn update U INSTALL U README Cuando se ejecuta esta orden se muestra una lista de los archivos actualizados junto con una letra que indica el tipo de cambio: 4
  • 5. U El archivo se ha actualizado. A El archivo se ha a˜adido. n D El archivo ha sido borrado. R Se ha sustituido el archivo por otro con el mismo nombre. Subversion los considera diferentes. G El archivo actualizado hab´ sido modificado localmente, pero los cambios ıa no se pisan, as´ que se han “fundido” ambas versiones. ı C Los cambios locales y los realizados en el repositorio se solapan. Es necesario solucionar manualmente el conflicto. 3.2.2. Realizar cambios Hay dos tipos de cambios: Cambios en un archivo. Editarlo normalmente con el programa adecuado: editor de texto, de gr´ficos, etc. Subversion detecta autom´ticamente los a a cambios. Cambios en el ´rbol de directorio. Pueden a˜adirse archivos o directo- a n rios, borrarlos, moverlos, copiarlos, etc. Para estos cambios debe usar los comandos de Subversion. Se realizan localmente en el acto, y en el reposi- torio cuando se env´ los cambios. ıen Los comandos son: svn add A A˜ade el archivo (o directorio) A (y todo su contenido). n svn delete A Elimina el archivo (o directorio) A (y todo su contenido). svn copy A B Duplica el archivo (o directorio) A con el nombre B y lo a˜ade n al repositorio. svn move A B Equivalente a svn copy A B; svn delete A svn mkdir A Crea un nuevo directorio A. 3.3. Revisar los cambios Los siguientes comandos pueden emplearse sin necesidad de una conexi´n al o repositorio central. svn status Informa sobre todos los cambios realizados a archivos o al ´rbol de a directorios. Delante de cada nombre de archivo aparecen tres columnas. La primera se refiere al estado del archivo, la segunda al de sus propiedades y la tercera muestra una L cuando est´ bloqueado (locked ), posiblemente por a un commit en curso. Los valores que pueden aparecer en las dos primeras columnas son: 5
  • 6. A Ha sido a˜adido. n C En conflicto. D Marcado para borrar. M Modificado. R Marcado para ser reemplazado. X No est´ versionado pero est´ relacionado con definiciones externas (pa- a a ra m´s informaci´n consultar el manual de Subversion). a o ? No est´ bajo control. a ! Est´ bajo control pero no se encuentra o tiene alg´n error. Puede usar a u svn revert para recuperarlo. ˜ Est´ bajo control como un tipo diferente al que hay en la copia de a trabajo (por ejemplo, controlado como archivo y actualmente es un directorio). I No est´ bajo control y est´ marcado para que subversion lo ignore cuan- a a do se usen los comandos svn add, svn status y svn import. svn diff Muestra los cambios realizados sobre un archivo en concreto si se es- pecifica o sobre todos en general. Indica las l´ ıneas a˜adidas y eliminadas n usando el formato del diff unificado[2]. svn revert Deshace los cambios realizados sobre el fichero o directorio pasado como par´metro, volviendo a la revisi´n anterior. a o 3.4. Solucionar conflictos Si Subversion encuentra un conflicto al actualizar un fichero crear´ tres ar- a chivos que no est´n bajo control del repositorio: a filename.mine El archivo de la copia de trabajo. filename.rOLDREV La revisi´n anterior (sin cambios). o filename.rNEWVER La nueva revisi´n obtenida del repositorio central al o actualizar. Subversion no le permitir´ subir cambios hasta que estos tres archivos hayan a sido borrados. Puede solucionarlo de tres maneras: Manualmente Editando el archivo de la copia de trabajo y ejecutando svn resolved FILENAME. Sobreescribiendo el archivo Puede sobreescribir el archivo local1 con uno de los anteriores y ejecutando tambi´n svn resolved FILENAME. e 1 mv filename.rNEWVER filename 6
  • 7. Usando svn revert Deshace los cambios que ha realizado para que pueda volver a editar el archivo. No es necesario ejecutar svn resolved FILENAME. 3.5. Enviar los cambios Una vez haya realizado todos los cambios pertinentes, puede subirlos usando svn commit. Es necesario suministrar un mensaje para el historial. Puede hacerlo como par´metro: a $ svn commit --message quot;Nuevas modificacionesquot; O tomando el mensage del contenido de un archivo: $ svn commit --file logmsg Y, en el caso de que no se especifique, se ejecutar´ el editor configurado por a defecto2 para que pueda escribir el mensaje. Puede ignorarlo y no guardar el archivo (en cuyo caso se le preguntar´ si desea continuar) o dejarlo vac´ a ıo. 4. Examinar el historial Los comandos para recuperar informaci´n sobre el historial del repositorio o o de un archivo en concreto son: svn log Muestra el historial de qui´n realiz´ los cambios, cu´ndo y el mensaje e o a enviado. Par´metros: a svn log –revision 5:19 Muestra el historial entre las revisiones 5 y 19 en or- den cronol´gico. o svn log -r 19:5 Muestra el historial entre las revisiones 5 y 19 en orden inverso. svn log -r 8 Muestra el historial del cambio 8. El par´metro -v indica que muestre tambi´n los archivos modificados, elimi- a e nados o a˜adidos. n Tambi´n se le puede pasar un archivo como par´metro para mostrar s´lo su e a o historial: svn log README svn diff Como ya se ha dicho, muestra las diferencias entre dos revisiones de uno o varios archivos. Sin par´metros lo muestra entre la copia de trabajo y la a ultima revisi´n, aunque puede compararse con una anterior: ´ o $ svn diff --revision 3 README O dos revisiones entre ellas: $ svn diff --revision 2:3 README 2 A trav´s de la variable del sistema EDITOR o a trav´s del fichero de configuraci´n de e e o Subversion (.subversion/config) 7
  • 8. svn cat Permite mostrar el contenido de un archivo en una revisi´n en con- o creto: $ svn cat --revision 3 README svn list Muestra el contenido de un directorio del repositorio. Recuperar una revisi´n anterior Pueden emplearse los comandos svn up- o date y svn checkout para obtener una revisi´n antigua: o $ svn checkout --revision 50 5. Otros comandos svn cleanup Si por alg´n error un commit falla, este comando env´ el men- u ıa saje de historial si no se lleg´ a hacer y/o desbloquea los archivos y directorios o bloqueados. svn import Copia un ´rbol de directorios sin control a un repositorio. El a directorio original queda como est´, as´ que para poder trabajar sobre una copia a ı versionada es necesario hacer un checkout. $ svn import directorio svn://osl.uca.es/proyecto Resulta util para enviar a un repositorio reci´n creado todos los archivos de ´ e un proyecto que ya exista para poder mantenerlo versionado. 6. Ramas 6.1. ¿Qu´ es una rama? e Supongamos que tenemos un documento del que nos piden una copia con algunas diferencias del original. Obviamente lo que se hace es crear una copia sobre la que realizar los cambios, conservando el original. Se trabaja sobre ambos archivos, modificando a veces uno, a veces otro. Ahora imaginemos que hay un error en el archivo que es anterior a esta divisi´n, por lo que posiblemente est´ en ambas copias, que son pr´cticamente o a a iguales, por lo que hay que realizar el mismo cambio en las dos. Esta es la idea de una rama: archivos mantenidos de forma independiente pero que comparten un pasado com´n. Una rama siempre empieza como una u copia de algo, pero teniendo su propio historial desde entonces. 6.2. Trabajando con las ramas En este apartado se describe de una manera muy superficial el trabajo con ramas en un repositorio. 8
  • 9. 6.2.1. Crear una nueva rama Es tan f´cil como crear una copia. a $ svn copy trunk branches/mi_rama Los datos no se duplican en el repositorio, as´ que no hace falta preocuparse por ı un incremento de tama˜o. n Nota: Por convenci´n suelen crearse bajo el directorio “branches”, pero puede o usarse cualquier otro: “ramas”, “estable”, etc´tera. e 6.2.2. Trabajar con la rama Puede hacerlo de forma normal, como un directorio m´s del proyecto, aunque a es posible (como con todos los subdirectorios de un proyecto) de obtenerlo por separado: $ svn checkout svn://osl.uca.es/proyecto/branches/mi_rama 6.2.3. Copiar cambios entre ramas Mientras que se trabaje con copias distintas no hay problema de que los cambios se pisen, pero hay que tener en cuenta que conforme m´s tiempo se a trabaje por separado, m´s dif´ puede ser unir los cambios con el tronco del a ıcil proyecto sin que surjan multitud de conflictos. Para aplicar los cambios realizados en la rama principal sobre la copia en las que estamos trabajando se emplea el comando svn merge, muy similar a svn diff, con la diferencia de que aplica los cambios en la copia de trabajo en lugar de mostrar los cambios por consola, marcando el archivo como modificado. $ svn merge svn://osl.uca.es/proyecto/trunk Puede especificarse el directorio sobre el que aplicar los cambios. $ svn merge svn://osl.uca.es/proyecto/trunk mi_rama Una vez hecho esto puede actualizarse el repositorio indicando que se ha aplicado una modificaci´n sacada de la rama principal. o $ svn commit --message quot;Importado los cambios desde trunkquot; Para consejos sobre como usar estas funciones, consulte el cap´ ıtulo 4 de [4]. 6.2.4. Mantenimiento de ramas Directorios Se recomienda mantener una estructura de directorios est´ndar a que facilite el trabajo con ramas. Si el repositorio s´lo contiene un proyecto: o /trunk 9
  • 10. /branches /tags Si contiene m´s se replica la estructura anterior: a /proyecto1/trunk /proyecto1/branches /proyecto1/tags /proyecto2/trunk /proyecto2/branches /proyecto2/tags En cualquier caso no es obligatorio, puede elegir la distribuci´n que m´s le o a guste. Vida de los datos Una vez ha finalizado el trabajo en una rama y se han integrado los datos en la rama principal, puede borrarse usando svn delete. Otra utilidad de las ramas es cuando se quiere liberar una versi´n estable, o por lo que hay que trabajar en solucionar bugs, pero sin dejar de a˜adir nuevas n funciones: $ svn copy svn://osl.uca.es/proyecto/trunk svn://osl.uca.es/proyecto/branches/estable-1.0 De esta forma se pueden seguir a˜adiendo caracter´ n ısticas en /trunk y traba- jar s´lo en solucionar errores en /branches/estable-1.0 o 7. Administraci´n o Los detalles sobre la administraci´n se explicar´n s´lo de forma superficial. o a o Si quiere m´s informaci´n: Version Control with Subversion[4] a o 7.1. Utilidades svnlook Se emplea para examinar revisiones y transacciones. Es de s´lo lectura, o no modifica el repositorio. Sus funciones se salen del car´cter introductorio a de este ap´ndice. Para m´s informaci´n puede ejecutar svnlook help. e a o svnadmin Permite ejecutar operaciones de mantenimiento. Los par´metros a que acepta son: create Crea un nuevo repositorio: svnadmin create proyecto. 10
  • 11. deltify Comprime el repositorio almacenando s´lo las diferencias respecto o a la versi´n anterior. o dump Vuelca el contenido del repositorio empleando un formato porta- ble. hotcopy Crea una copia de un repositorio de forma segura, aunque est´ sien- e do usado. list-dblogs Muestra los archivos de historial de Berkeley DB asociados con el repositorio. list-unused-dblogs Muestra los archivos de historial de Berkeley DB asociados con el repositorio y que ya no son usados. Pueden borrarse sin problemas, aunque podr´ almacenarse para recuperarse de una ıan perdida de datos catastr´fica. o load Carga una serie de revisiones en un repositorio a partir de un flujo de datos que emplee el mismo formato de volcado que el subcomando dump. lstxns Muestra la lista de transacciones que todav´ no han sido enviadas. ıa recover Realiza una recuperaci´n en caso de error. o rmtxns Elimina las transacciones limpiamente. setlog Sustituye el mensaje de historial de una revisi´n en concreto por o otro nuevo. verify Comprueba la integridad del repositorio. 7.2. Restaurar un repositorio Pr´cticamente cualquier error - corrupci´n de datos, cambios no deseados,... a o - puede solucionarse empleando el comando svnadmin recover REPOSITO- RIO. Antes de ejecutarlo debe asegurase de que: 1. No haya ning´n proceso accediendo al repositorio. u 2. Es el usuario propietario del repositorio. No solo como root, ya que es posible que se generen de nuevo algunos archivos, y si se crean como root no ser´n despu´s accesibles. a e 7.3. Crear una copia de seguridad Pueden realizarse de dos maneras: una copia completa o incremental. Una copia completa es b´sicamente una duplicaci´n del repositorio. Ahora a o bien, a menos que deshabilite los accesos al repositorio puede obtener una copia inconsistente si se est´n realizando cambios mientras realiza la copia, as´ que lo a ı correcto es usar svnadmin hotcopy o bien un script suministrado por Subver- sion: hot-backup.py - puede encontrarlo en tools/backup dentro del directorio de instalaci´n de Subversion. o Para obtener una copia incremental puede usar svnadmin dump –incremental: 11
  • 12. $ svnadmin dump repositorio 0:100 > dump01 $ svnadmin dump 101:200 > dump02 $ svnadmin dump 201:300 > dump03 8. Configuraci´n del servidor o Aunque Subversion permite usar, gracias a su capa de abstracci´n, cualquier o protocolo de red, en realidad actualmente s´lo existen dos servidores: Apache o con el m´dulo mod dav svn o svnserve, un peque˜o servidor independiente. o n 8.1. svnserve Este servidor puede lanzarse de tres formas diferentes. inetd $ svnserve -i De esta forma svnserve se comunica con svn a trav´s de la entrada y salida e est´ndar. a Si su sistema utiliza un demonio inetd, puede editar el archivo /etc/inetd.conf y a˜adirle la siguiente l´ n ınea: svn stream tcp nowait USUARIO /usr/bin/svnserve svnserve -i Donde USUARIO es el usuario que tiene permisos para acceder al reposito- rio. Demonio $ svnserve -d De esta forma escuchar´ en el puerto 3690, aunque puede cambiarlo usando a el par´metro –listen-port=. a T´ nel u $ svnserve -t De esta forma presupone que un programa como RSH o SSH ha autentificado al usuario y que se ha invocado un servicio svnserve. Cuando se ejecuta el servidor de esa forma, el cliente debe especificar la ruta absoluta del repositorio: $ svn checkout svn://servidor/usr/local/repositorios/proyecto Para incrementar la seguridad puede limitarse el acceso a un subdirectorio empleando el par´metro -r. a 12
  • 13. $ svnserve -d -r /usr/local/repositorios De esta forma se acceder´ ıa: $ svn checkout svn://servidor/proyecto 8.1.1. Autenticaci´n y autorizaci´n o o Archivo de usuarios y realm En el archivo svnserve.conf, dentro del di- rectorio conf/ del repositorio, bajo la secci´n [general] se especifican: el archivo o que contiene los usuarios, el nombre de repositorio y los controles de acceso en funci´n de si se es un usuario autentificado o no. o svnserve.conf [general] password-db = archivo_contrase~as # Ruta absoluta o relativa n realm = Ejemplo anon-access = read # Los usuarios an´nimos s´lo pueden leer. o o auth-access = write # Los usuarios registrados pueden escribir. Los permisos pueden ser: none, sin acceso; read, s´lo lectura; write, lectura o y escritura. archivo contrase˜as (el indicado en password-db) n [users] juan = juanpasswd ana = anapasswd Puede ajustarse los permisos por directorios dentro de un repositorio, pero eso no se cubrir´ en este documento. a SSH Lo c´modo del m´todo anterior es que no es necesario crear cuentas del o e sistema por cada usuario, pero si se quiere aprovechar las cuentas de usuarios puede usarse svnserve a trav´s de un t´nel SSH. e u Basta con usar la ruta de la forma: svn+ssh://servidor/repositorio Como en la forja se utiliza el m´todo del archivo de usuarios por cada repo- e sitorio, si quiere m´s informaci´n sobre esta posibilidad, consulte [4] a o 8.2. Apache httpd Un repositorio puede hacerse accesible a trav´s del servidor Apache y un e m´dulo, usando el protocolo WebDAV[3], una extensi´n del protocolo HTTP. o o Para obtener informaci´n sobre c´mo configurar un servidor Apache, puede o o consultar [1] Debe tener instalado el servidor Apache httpd 2.0, el m´dulo mod dav (que o viene con el servidor) y mod dav svn. Una vez est´ todo instalado, aseg´rese de que ambos m´dulos sean cargados e u o al iniciar Apache. Puede hacerse en versiones antiguas a˜adiendo en httpd.conf n 13
  • 14. LoadModule dav_module modules/mod_dav.so LoadModule dav_svn_module modules/mod_dav_svn.so O, en versiones m´s reciente, a trav´s de /etc/apache2/mods-enabled, crean- a e do en su interior enlaces simb´licos a los m´dulos dav.load y a dav svn.load o o situados en /etc/apache2/mods-available. Una vez hecho esto es necesario hacer accesible el repositorio, lo que se pue- de hacer de dos formas, o haciendo accesible unicamente el repositorio de un ´ proyecto o el directorio que contiene los repositorios de varios proyectos. Esta segunda forma es la util en el caso de la forja. Para que Apache sepa qu´ di- ´ e rectorio debe hacer accesible, escriba en el archivo httpd.conf o apache2.conf (dependiendo de la versi´n): o <Location /svn> DAV svn SVNParentPath /usr/local/repositorio </Location> 8.2.1. Autenticaci´n o Autenticaci´n HTTP b´sica Usando la utilidad htpasswd que proporcio- o a na Apache. Lo primero es a˜adir los usuarios y sus contrase˜as: n n # Se pasa el par´metro -c para crear el archivo. a # -m es para cifrar la contrase~a usando MD5 n $ htpasswd -cm /etc/svn-auth juan New password: **** Re-type new password: **** Adding password for user juan $ htpasswd -m /etc/svn-auth ana New password: *** Re-type new password: *** Adding password for user ana Una vez hecho esto, es necesario especificar en el fichero de configuraci´n o que se quiere emplear este fichero para la autenticaci´n: o <Location /svn> DAV svn SVNParentPath /usr/local/repositorio AuthType basic AuthName quot;Subversionquot; AuthUserFile /etc/svn-auth Require valid-user # Todas las conexiones deben ser identificadas </Location> 14
  • 15. Certificado SSL Tambi´n pueden usarse conexiones seguras (https), pero e c´mo generar certificados y configurar Apache para que los use se escapa de los o objetivos de esta gu´ Puede consultar el manual de Apache si le interesa el ıa. tema. 8.2.2. Opciones de acceso Con las opciones anteriores cualquier usuario autenticado puede escribir y leer del repositorio, mientras que los no autenticados no pueden leerlo. Si se quiere permitir a los usuarios an´nimos leer y a los registrados leer y o escribir: <Location /svn> DAV svn SVNParentPath /usr/local/repositorio AuthType basic AuthName quot;Subversionquot; AuthUserFile /etc/svn-auth <LimitExcept GET PROPFIND OPTIONS REPORT> # Hace falta identificarse salvo para las operaciones de lectura Require valid-user </LimitExcept> </Location> Empleando el m´dulo mod authz svn puede limitarse el acceso por direc- o torios. Para m´s informaci´n al respecto, consulte [4], ya que est´ m´s all´ de a o a a a esta gu´ r´pida. ıa a Referencias [1] Apache httpd. http://httpd.apache.org/. [2] Detailed description of unified format. http://www.gnu.org/software/ diffutils/manual/html node/Detailed-Unified.html. [3] Webdav. http://www.webdav.org. [4] C.Michael Pilato Ben Collins-Sussman, Brian W. Fitzpatrick. Version Con- trol with Subversion. TBA, 2004. 15