Vous êtes sur la page 1sur 321

Control de versiones con Subversion

Para Subversion 1.2 (Libro compilado de Revisin 2147)


Ben Collins-Sussman Brian W. Fitzpatrick C. Michael Pilato

Control de versiones con Subversion: Para Subversion 1.2: (libro com-apilados de Revisin 2147)
Ben Collins-Sussman, Brian W. Fitzpatrick, y C. Michael Pilato Publicado (TBA) Copyright 2002, 2003, 2004, 2005, 2006 Ben Collins-SussmanBrian W. FitzpatrickC. Michael Pilato
Este trabajo est licenciado bajo la licencia Creative Commons Attribution. Para ver una copia de esta licencia, visite ht- tp :/ / creativecommons.org/licenses/by/2.0 / o enve una carta a Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, EE.UU..

Tabla de contenidos
Prefacio Prefacio Pblico Cmo leer este libro Convenciones utilizadas en este libro xiv Convenciones tipogrficas Iconos Estructura de este libro Este libro es gratis Agradecimientos Desde Ben Collins-Sussman De Brian W. Fitzpatrick A partir de C. Michael Pilato xvii 1. Introduccin Qu es Subversion? Historia de Subversion Caractersticas de Subversion 2 Arquitectura de Subversion Instalando Subversion Componentes de Subversion Un comienzo rpido 5 2. Conceptos Bsicos El repositorio Modelos de versionado 8 El problema de compartir archivos 9 La solucin bloquear-modificar-desbloquear 9 El copiar-modificar-mezclar Subversion en accin Las copias de trabajo 13 Revisiones Cmo las copias de trabajo al repositorio Revisin mixto copias de trabajo Resumen 3. Guided Tour Ayuda! Importar Revisiones: Nmeros, Palabras Clave, y Fechas, por Dios! 20 Nmeros de revisin Revisin Palabras clave 21 Fechas de la Revisin 22 Pedido inicial Ciclo Bsico de Trabajo 25 Actualice su copia de trabajo Hacer cambios a su copia de trabajo Examine sus cambios Resolver conflictos (fusionando los cambios de otros) 33 Confirmar los cambios Examinando el historial xi xiii xiii xiii xiv xiv xv xvi xvi xvii xvii 1 1 1 3 4 5 8 8

11 13 16 17 18 19 20 20 20 20

23 25 26 27 36

37 svn log svn diff svn cat svn list Una palabra final sobre la Historia 42 iv Control de versiones con Subversion 38 39 41 41

Otros comandos tiles svn cleanup svn import Resumen 4. Crear ramas y fusionarlas Qu es un Poder? Uso Ramas Creacin de una sucursal 46 Trabajando con su rama Los conceptos clave sobre las ramas Cambios Copia de entre las ramas Copiando cambios especficos 51 El concepto clave detrs de Fusin Mejores prcticas para la fusin 54 Comn casos de uso Fusionar una rama completa con otra Deshacer cambios Reconstruir Elementos eliminados 60 Patrones de ramificacin comunes 61 Cambiando la copia local de trabajo 63 Etiquetas 64 Crear una etiqueta simple Crear una etiqueta Complex Mantenimiento Poder Organizacin del repositorio 66 Vidas de datos Resumen 5. Administracin del Repositorio 69 Fundamentos del repositorio 69 Descripcin de las transacciones y Revisiones Propiedades no versionadas 70 Almacenes de datos del repositorio 70 Creacin y Configuracin de Repositorios Scripts gancho Berkeley DB de configuracin Mantenimiento del repositorio

42 42 43 43 44 44 44 48 50 50 53 57 57 59

65 65 66 67 68

69

72 74 77

77 Kit de herramientas del administrador 77 Limpieza del repositorio 85 Administracin de espacio en disco 87 Recuperacin Repositorio 88 Migrando un repositorio Backup Repositorio Proyectos Adicin Escogiendo el esquema de repositorio 95 Creando el esquema, importando los datos iniciales 96 Resumen 6. Configuracin del servidor 98 Visin de conjunto 98 Modelo de la Red Solicitudes y respuestas Almacenamiento en cach de credenciales de cliente 99 svnserve, un servidor personalizado 101 Invocando el Servidor Built-in de autenticacin y autorizacin Autenticacin y autorizacin SSH Trucos de configuracin SSH 106 httpd, el servidor HTTP Apache Requisitos previos 108

89 93 94

97

99 99

101 103 105 108

v Control de versiones con Subversion

Configuracin bsica de Apache 109 Opciones de autenticacin Opciones de autorizacin Extras adicionales 119 Ofrecer mltiples mtodos de acceso al repositorio 7. Temas avanzados rea de configuracin en tiempo de ejecucin 123 Configuracin Estructura del rea de 123 Configuracin y el registro de Windows Opciones de configuracin 125 Propiedades Por qu caractersticas? 129 Manipulando propiedades

110 114 121 123

124 129 130

Propiedades especiales 133 Configuracin automtica de propiedades 141 Cierre Creacin de cerraduras 142 Cerraduras Descubriendo 145 Romper y robar bloqueos Bloqueo de Comunicacin 148 PEG y revisiones operativas Repositorios externos Ramas de proveedores 153 Procedimiento de Gestin de Sucursales Distribuidor General 154 svn_load_dirs.pl Localizacin Entender locales Uso de Subversion de locales Uso de las herramientas de diferenciacin externos 159 Externo diff External diff3 URLs del repositorio Subversion 8. Informacin del desarrollador 164 Biblioteca de diseo de capas 164 Capa de repositorio Repositorio de capa de acceso 169 Capa Cliente Uso de la API La biblioteca ejecutable adaptable de Apache 173 Requisitos de URL y ruta Usando lenguajes distintos de C y C + + Dentro del rea de Administracin copia de trabajo 177 El Archivo de los comentarios 178 Copias prstinas y archivos de propiedad 179 WebDAV Programacin con piscinas de memoria 180 Contribuyendo a Subversion nete a la Comunidad Obtener el Cdigo Fuente 183 Familiarizarse con las polticas comunitarias Hacer y probar sus cambios Donar sus cambios 9. Referencia completa de Subversion La Subversin de lnea de comandos del cliente: svn 185 svn Switches svn Subcomandos svnadmin svnadmin Switches

141

145 149 152

156 157 157 158 160 161 162

165 172 173 173 174

179 182 182 183 184 184 185 185 188 250 250

vi Control de versiones con Subversion

svnadmin Subcomandos svnlook svnlook Switches svnlook svnserve svnserve Switches svnversion mod_dav_svn Las propiedades de Subversion 289 A. Subversion para usuarios de CVS 292 Nmeros de revisin son diferentes ahora Versiones Directorio Operaciones ms desconectados Distincin entre Estado y Actualizacin Estado Actualizar Ramas y etiquetas Propiedades de metadatos 295 Resolucin de conflictos 295 Archivos binarios y traduccin Mdulos versionados Autenticacin Convirtiendo un repositorio de CVS a Subversion B. WebDAV y autoversionado Conceptos bsicos de WebDAV 298 Original WebDAV Extensiones DeltaV Subversion y DeltaV Autoversionado Interoperabilidad Cliente Aplicaciones WebDAV independientes 302 File-explorer extensiones WebDAV WebDAV aplicacin del sistema de archivos 304 C. Herramientas de terceros 306 D. Derechos de autor 307 vii

251 268 268 269 285 285 286 288

292 292 293 293 293 294 295

295 296 296 296 298 298 299 299 300 301 303

Lista de Figuras
1.1. Arquitectura de Subversion 2.1. Un sistema cliente / servidor tpico 8 2.2. El problema de evitar 2.3. La solucin bloqueo-modificacin-desbloqueo 10 2.4. El copiar-modificar-mezclar 2.5. La solucin copiar-modificar-mezclar (continuacin) 12 2.6. El sistema de archivos del repositorio 13 2.7. El repositorio 4.1. Ramas de desarrollo 4.2. Estructura inicial del repositorio 45 4.3. Repositorio con nueva copia 4.4. Bifurcacin de la historia de un fichero 48 8.1. Ficheros y directorios en dos dimensiones 8.2. Versiones tiempo la tercera dimensin! viii 3 9 11

16 44 47 166 167

Lista de tablas
2.1. URL de acceso al repositorio 15 5.1. Repositorio Comparacin almacn de datos 70 6.1. Comparacin de servidor de red 8.1. Un corto inventario de las libreras de Subversion 164 B.1. Los clientes WebDAV comunes 301 ix

98

Lista de ejemplos
5.1. txn-info.sh (Informe de transacciones pendientes) 6.1. Un ejemplo de configuracin para el acceso annimo. 115 6.2. Un ejemplo de configuracin para el acceso autenticado. 116 6.3. Un ejemplo de configuracin para el acceso autenticado / annima mixta. 116 6.4. Desactivacin camino comprueba completo 119 7.1. Fichero ejemplo de registro (. Reg). 7.2. diffwrap.sh 7.3. diffwrap.bat 7.4. diff3wrap.sh 7.5. diff3wrap.bat 8.1. Usando la capa de repositorio 86

124 160 160 161 161 168

8.2. Usando la capa de repositorio con Python 8.3. A Crawler Estado Python 8.4. Contenido de un .svn / entradas ms comunes de archivos 178 8.5. Uso efectivo piscina x

174 176 181

Prefacio
Una mala Preguntas frecuentes hoja (FAQ) es el que se compone no de las preguntas que la gente realmente le pregunt, pero una de las preguntas del FAQ autor deseaba que la gente haba pedido. Tal vez usted ha visto una de estas antes: Q: Cmo puedo utilizar Glorbosoft XYZ para maximizar la productividad de los equipos? R: Muchos de nuestros clientes desean saber cmo maximizar su productividad a travs de nuestra oficina de trabajo en grupo innovaciones patena-ted. La respuesta es simple: en primer lugar, haga clic en el men "Archivo", desplcese hacia abajo para "aumentar la productividad", entonces ... El problema con tales preguntas frecuentes es que no lo son, en un sentido literal, FAQs en absoluto. Nadie se llama la lnea de soporte tcnico y pregunt, "Cmo podemos maximizar la productividad?". Ms bien, la gente hizo preguntas altamente especfi-cos, como, "Cmo podemos cambiar el sistema de calendario para enviar recordatorios con dos das de antelacin en lugar de uno?" Y as sucesivamente. Pero es mucho ms fcil de compensar imaginarios Preguntas ms frecuentes de lo que es descubrir los reales. Compilar una verdadera hoja de preguntas frecuentes se requiere un esfuerzo sostenido y organizado: durante el tiempo de vida del software, las preguntas realizadas deben ser rastreadas, las respuestas de seguimiento, y todos reunidos en un todo coherente e indexado que refleje la experiencia colectiva de los usuarios en la naturaleza. Pide la actitud paciente y observadora de un naturalista de campo. Sin grandes hiptesis ni pronunciamientos ojos abiertos aqu y precisa visionarios tomar notas son lo que ms se necesita. Lo que me gusta de este libro es que surgi de un proceso tal, y lo demuestra en cada pgina. Es el resultado directo de los encuentros de los autores con los usuarios. Comenz con la observacin de Ben Collins-Sussman que la gente estaba haciendo las mismas preguntas bsicas y otra vez en las listas de correo de Subversion: Cules son los flujos de trabajo estndar recomendado con Subversion? Los ramas y las etiquetas funcionan de la misma manera que en otros sistemas de control de versiones? Cmo puedo saber que hizo un cambio en particular? Frustrado al ver que el mismo da de preguntas tras da, Ben trabaj intensamente durante un mes en el verano de 2002 para escribir El Manual de Subversion, un manual de la pgina sesenta y que cubra todos los aspectos bsicos de la utilizacin de Subversion. El manual no tena pretensiones de ser completa, pero fue distribuido con Subversion y ayud a los usuarios a superar ese bache inicial en la curva de aprendizaje. Cuando O'Reilly y Asociados decidi publicar un libro completo sobre Subversion, el camino de menor resistencia era obvio: expandir el manual de Subversion libro. Los tres co-autores del nuevo libro se les present una oportunidad inusual. Oficialmente, su tarea consista en escribir un libro de arriba hacia abajo, a partir de una tabla de contenidos y un proyecto inicial. Pero tambin tenan acceso a un flujo constante-de hecho, un giser incontrolable-de material fuente de abajo hacia arriba. Subversion ya estaba en las manos de miles de pioneros, y los usuarios estaban proporcionando toneladas de retroalimentacin, no slo sobre Subversion, sino tambin sobre la documentacin existente. Durante todo el tiempo que llev escribir este libro, Ben, Mike y Brian frecuentaron las listas de correo de Subversion y charlar incesantemente habitaciones, observando atentamente los usuarios estaban teniendo problemas en situaciones de la vida real. Monitorizacin tales comentarios son parte de su descripcin de trabajo en CollabNet de todos modos, y les dio una gran venta-ja cuando comenzaron a documentar Subversion. El libro producido est firmemente establecido sobre la base de la experiencia, no en las arenas movedizas de la ilusin, que combina los mejores aspectos del manual de usuario y una hoja de preguntas frecuentes. Esta dualidad quizs no sea advertida en una primera lectura. Tomados en

orden, de adelante hacia atrs, el libro es simplemente una descripcin directa de una pieza de software. Hay una visin general, el obligado tour guiado, un captulo sobre administracin, algunos temas avanzados, y por supuesto una referencia de mando y gua de solucin de problemas. Slo al volver a ella ms tarde, buscando la solucin a algn problema especfico, no brillar su autenticidad: los detalles que slo pueden resultar de encuentros con lo inesperado, los ejemplos extrados de casos de uso efectivo, y sobre todo el SENSIT-ividad a las necesidades del usuario y el punto de vista del usuario. Por supuesto, nadie puede garantizar que este libro responder cualquier pregunta que tenga sobre Subversion.

xi Prefacio A veces, la precisin con la que se anticipa a sus dudas le parecer misteriosamente teleptica; pero ocasionalmente, se topar con un agujero en el conocimiento de la comunidad, y vienen con las manos vacas. Cuando esto sucede, lo mejor que puede hacer es el correo electrnico<users@subversion.tigris.org> y presentar su problema. Los autores siguen ah, sin dejar de mirar, y no incluyen slo los tres que figuran en la portada, pero muchos otros que contribuyeron correcciones al material original. Desde el punto de vista de la comunidad, la solucin de su problema es meramente un agradable efecto secundario de un proyecto mucho mayor, es decir, ajustando poco a poco este libro, y en definitiva Subversion, para que coincida ms de cerca la manera como la gente real-mente lo utilizan. Estn deseosos de escucharle, no slo porque pueden ayudar, sino porque usted puede ayudarles. Con Subversion como con todos los proyectos de software libre activos, usted no est solo. Que este libro compaero. sea su primer

Karl Fogel, Chicago, 14 de marzo 2004

xii

Prefacio
"Si C le da suficiente cuerda para ahorcarse, piense en Subversion como una especie de cuerda de almacenamiento de insta-lacin."-Brian W. Fitzpatrick En el mundo del software de cdigo abierto, Concurrent Versions System (CVS) ha sido durante mucho tiempo la herramienta de eleccin para el control de versiones. Y con razn. S CVS es software libre, y su op-erandi no restrictiva operandi y el apoyo para el funcionamiento en red que permiten a decenas de programa-dores dispersos geogrficamente compartir su trabajo se ajusta a la naturaleza colaborativa del mundo open-source muy bien. CVS y su modelo de desarrollo semi catico se han convertido en piedras angulares de la cultura de cdigo abierto. Pero al igual que muchas herramientas, CVS est comenzando a mostrar su edad. Subversion es un relativamente nuevo de control de versiones sistema diseado para ser el sucesor de CVS. Los diseadores se propusieron ganar los corazones de los usuarios de CVS de dos maneras: mediante la creacin de un sistema de cdigo abierto con un diseo (y el "look and feel"), similar a CVS, y en altentador para solucionar la mayora de los defectos evidentes de CVS. Si bien el resultado no es necesariamente la siguiente gran evolucin en el diseo de control de versiones Subversion es muy potente, muy til, y muy flexible. Este libro est escrito para documentar la serie 1.2 del sistema de control de versiones Subversion. Hemos hecho todo lo posible por ser a fondo en nuestra cobertura. Sin embargo, Subversion tiene una comunidad de desarrollo prspero y lleno de energa, por lo que ya hay una serie de caractersticas y mejoras planeadas para futuras versiones de Subversion que pueden cambiar algunos de los comandos y

notas especficas en este libro.

Pblico
Este libro est escrito para gente con conocimientos informticos que quieren usar Subversion para manejar sus datos. Aunque Subversion ejecuta en varios sistemas operativos diferentes, su interfaz de usuario principal se basa la lnea de comandos. Es esta herramienta de lnea de comandos (svn) que se discute y se utiliza en este libro. Para mantener la coherencia, los ejemplos de este libro asumen que el lector est usando un sistema operativo de tipo Unix, y es relativamente confort-able con Unix y las interfaces de lnea de comandos. Dicho esto, el programa svn tambin funciona en plataformas no Unix como Microsoft Windows. Con unas pocas excepciones, como el uso de barras diagonales inversas (\) en lugar de barras diagonales (/) para los separadores de ruta, la entrada a la salida de esta herramienta cuando se ejecuta en Windows son idnticas a su contraparte Unix. Sin embargo, los usuarios de Windows pueden encontrar mejores resultados ejecutando los ejemplos en el entorno Unix emulacin Cygwin. La mayora de los lectores son probablemente los programadores o administradores de sistemas que necesitan para seguir los cambios en el cdigo fuente. Este es el uso ms comn para Subversion, y por lo tanto, el escenario que subyace todos los ejemplos del libro. Pero Subversion puede usarse para gestionar cambios a cualquier tipo de informacin: imgenes, msica, bases de datos, documentacin, etc. Para Subversion, todos los datos son slo de datos. Aunque este libro est escrito con la suposicin de que el lector nunca ha utilizado el control de versiones, tambin hemos tratado de hacer ms fcil para los usuarios de CVS realizar un cambio indoloro a Subversion. Notas secundarias pueden CVS Discuta de vez en cuando, y un apndice especial resume la mayora de las diferencias entre CVS y Subversion.

Cmo leer este libro


Este libro pretende ser til a personas con diferentes grados de experiencia-desde personas sin experiencia previa en el control de versiones para los administradores de sistemas con experiencia. Dependiendo de su trasfondo propia, algunos captulos pueden ser ms o menos importantes para usted. A continuacin se puede considerar una "lista de lecturas recomendadas" de varios tipos de lectores:

xiii Prefacio Los administradores de sistemas con experiencia La suposicin aqu es que probablemente ya ha usado CVS antes, y se mora de ganas de conseguir un servidor Subversion en funcionamiento lo antes posible.Captulo 5, Administracin del Repositorio yCaptulo 6, Configuracin del servidor le mostrar cmo crear su primer repositorio y hacer que est disponible en la red. Despus de hecho esto,Captulo 3, Recorrido guiado yApndice A, Subversion para usuarios de CVS son las rutas ms rpidas a aprender el programa cliente de Subversion draw-cin de su experiencia CVS. Los nuevos usuarios El administrador probablemente ha fijado de Subversion, y hay que aprender a utilizar el cliente. Si usted nunca ha usado un sistema de control de versiones (como CVS), a continuacin,Captulo 2, Conceptos bsicos yCaptulo 3, guiada Gira son una introduccin vital. Si usted ya es un veterano en CVS, el captulo 3 y el apndice A son el mejor lugar para empezar. Los usuarios avanzados Si usted es un usuario o administrador, su proyecto crecer ms. Usted va a querer aprender a hacer cosas ms avanzadas con Subversion, tales como el uso de ramas y realizar mezclas(Captulo 4, Crear ramas y fusionarlas), Cmo usar la caracterstica de propiedades de Subversion, cmo configurar las opciones de tiempo

de ejecucin(Captulo 7, Temas avanzados), Y otras cosas. Estos dos captulos no son vitales al principio, pero asegrese de leer una vez que se sienta cmodo con lo bsico. Desarrolla dores Es de suponer que usted ya est familiarizado con Subversion, y ahora desea extender su funcionalidad o crear nuevo software en la parte superior de sus mltiples APIs. Captulo 8, Informacin para desarrolladores es slo para usted. El libro termina con referenciamaterial Captulo 9, Referencia completa de Subversion es una gua de referencia para todos los comandos de Subversion, y los apndices cubren varios temas interesantes. Estos son los captulos que la mayora son propensos a volver a despus de que haya terminado el libro.

Convenciones utilizadas en este libro


Esta seccin cubre las convenciones utilizadas en este libro.

Convenciones tipogrficas
Anchura constante Se utiliza para los comandos, la salida de comandos e interruptores Cursiva anchura constante Se utiliza para los elementos reemplazables de cdigo y texto Itlic o Se utiliza para los nombres de archivos y directorios

Iconos
Nota
Este icono indica una nota sobre el texto que lo rodea. xiv Prefacio

Punta
Este icono indica un consejo til sobre el texto que lo rodea.

Advertencia
Este icono indica una advertencia en relacin con el texto circundante. Tenga en cuenta que los ejemplos de cdigo fuente son slo eso-ejemplos. Mientras se compile con los conjuros adecuados compilador, que tienen por objeto ilustrar el problema que nos ocupa, no sirven necesariamente como ejem-plos de un buen estilo de programacin.

Estructura de este libro


Los captulos que siguen y sus contenidos se enumeran a continuacin: Captulo 1, Introduccin Cubre la historia de Subversion, as como sus caractersticas, arquitectura, componentes y mtodos de instalacin. Tambin incluye una gua de inicio rpido. Captulo 2, Conceptos bsicos Explica los conceptos bsicos de control de versiones y diferentes modelos de versiones, junto con el repositorio de Subversion, las copias de trabajo, y revisiones. Captulo 3, Recorrido guiado Le gua a travs de un da en la vida de un usuario de Subversion. Se muestra cmo utilizar Subversion para obtener, modificar y confirmar los datos. Captulo 4, Crear ramas y fusionarlas Discute ramas, fusiones y etiquetado, incluidas las mejores prcticas para la ramificacin y fusin, casos de uso comunes, cmo deshacer cambios y cmo alternar fcilmente de una rama a otra. Captulo 5, Administracin del Repositorio Describe los conceptos bsicos de un repositorio Subversion, cmo crear, configurar y mantener un repositorio, y las herramientas que puede utilizar para hacer todo esto. Captulo 6, Configuracin del servidor Explica cmo configurar su servidor Subversion y las tres formas de acceder a su repositorio: HTTP, el svn protocolo, y el acceso local. Tambin cubre los detalles de autenticacin, autorizacin y acceso annimo. Captulo 7, Temas avanzados Explora los archivos de configuracin de cliente de Subversion, propiedades de archivos y directorios, cmo ignorar ficheros en su copia de trabajo, cmo incluir rboles externos en su copia de trabajo, y, por ltimo, cmo manejar ramas de vendedor. Captulo 8, Informacin para desarrolladores Describe el funcionamiento interno de Subversion, el sistema de ficheros de Subversion, y las reas administrativas copia de trabajo desde el punto de vista de un programador. Muestra cmo usar las APIs pblicas para escribir un programa que usa Subversion, y sobre todo, cmo contribuir al desarrollo de Subversion. Captulo 9, Referencia completa de Subversion Explica con detalle todo subcomando de svn, svnadmin, y svnlook con un montn de ejemplos para toda la familia! Apndice A, Subversion para usuarios de CVS

Cubre las similitudes y diferencias entre Subversion y CVS, con numerosas sugerencias sobre cmo

xv Prefacio romper todos los malos hbitos que recogi de aos de uso de CVS. Se incluyen descripciones de Subversion nmeros de revi-sin, directorios versionados, las operaciones fuera de lnea, actualizacin de estado contra, ramas, etiquetas, metadatos, conflictos resolu-cin y autenticacin. Apndice C, WebDAV y autoversionado Describe los detalles de WebDAV y DeltaV, y cmo usted puede configurar su repositorio Subversion para ser montado de lectura / escritura como proporcin DAV. Apndice C, Herramientas de terceros Describe herramientas que soportan o usan Subversion, incluyendo programas alternativos cliente, navegadores de repositorio y as sucesivamente.

Este libro es gratis


Este libro comenz como fragmentos de documentacin escritos por los desarrolladores de proyectos de Subversion, que luego se fusionaron en una sola obra y volver a escribir. Como tal, siempre ha estado bajo una licencia libre. (Ver Apndice D, Derechos de autor.) De hecho, el libro fue escrito en el ojo pblico, como parte de Subversion. Esto significa dos cosas: Siempre encontrar la versin ms reciente de este manual en el propio repositorio Subversion del libro. Puede distribuir y realizar cambios en el libro a su gusto-est bajo una licencia libre. Por supuesto, en lugar de distribuir su propia versin privada de este libro, preferiramos que enviaremos feedback y los parches a la comunidad de desarrolladores de Subversion. Consulte laseccin llamada "Contribuir a Subversion " para aprender acerca de unirse a esta comunidad.

Una versin relativamente reciente en lnea de este libro se puede encontrar en http://svnbook.red-bean.com.

Agradecimientos
Este libro no hubiera sido posible (ni muy til) si Subversion no existiese. Para ello, los autores desean agradecer a Brian Behlendorf y CollabNet de la visin para financiar un nuevo proyecto de cdigo abierto tan arriesgada y ambiciosa; Jim Blandy por el nombre y Subversion diseo original, te amamos, Jim; Karl Fogel por ser tan buen amigo y un gran lder de la comunidad, en la que order.1 Gracias a O'Reilly y nuestros editores, Linda Mui y Tatiana Diaz por su paciencia y apoyo. Finalmente, agradecemos a las innumerables personas que han contribuido a este libro con revisiones informales, sugerencias y correcciones: Si bien esto, sin duda, no es una lista completa, este libro sera incompleto e incorrecto sin la ayuda de: Jani Averbach, Ryan Barrett, Franois Beausoleil , Jennifer Bevan, Matt Blais, Zack Brown, Martin Buchholz, Brane Cibej, John R. Todos los das, Peter Davis, Olivier Davy, Robert PJ Da, Mo DeJong, Brian Denny, Joe Drew, Nick Duffek, Ben Elliston, Justin Erenkrantz, Shlomi Fish, Julian Foad, Chris Foote, Martin Furter, Dave Gilbert, Eric Gillespie, Matthew Gregan, Arte Haas, Greg Hud-son, Alexis Huxley, Jens B. Jorgensen, Tez Kamihira, David Kimdon, Mark Benedetto King, Andreas J. Koenig , Nuutti Kotivuori, Matt Kraai, Scott Lamb, Vincent Lefevre, Morten Ludvigsen, Paul Lussier, Bruce A. Mah, Philip Martin, Feliciano Matias, Patrick Mayweg, Gareth McCaughan, Jon Middleton, Tim Moloney, Mats Nilsson, Joe Orton, Amy Lyn Pilato, Kevin Pilch-Bisson, Dmitriy Popkov, Michael Price, Mark Proctor, Steffen Prohaska, Daniel Rall, Tobias Ringstrom, Garrett Rooney, Joel Rosdahl, Christian Sauer, Larry Shatzer, Russell Steicke, Sander Striker, Erik Sjoelund, Johan Sundstroem, John Szakmeister, Mason Thomas, Eric Wadsworth, Colin Watson, Alex Waugh, Chad Whitacre, Josef Wolf, Blair Zajac, y toda la comunidad Subversion.

1OH, y gracias, Karl, por estar demasiado sobrecargados de trabajo para escribir este libro usted mismo.

xvi Prefacio

Desde Ben Collins-Sussman


Gracias a mi mujer Frances, quien, durante muchos meses, lleg a or, "Pero cario, todava estoy trabajando en el libro", en lugar de la habitual "Pero cario, todava estoy haciendo de correo electrnico." I don ' t sabe de dnde saca todo eso paciencia! Ella es mi contrapeso perfecto. Gracias a mi familia por su sincero apoyo, a pesar de no tener inters real en el tema. (Usted sabe, los que dicen, "Oh, usted est escribiendo un libro?", Y luego, cuando les dices que es un libro de la computadora, ms o menos vidriosos.) Gracias a todos mis amigos, que me hace un hombre rico, rico hacen. No me mires de esa manera, ya sabes lo que eres.

De Brian W. Fitzpatrick
Muchsimas gracias a mi mujer Marie por ser increblemente comprensiva, de apoyo, y sobre todo, paciente. Gracias a mi hermano Eric quien me introdujo a la programacin UNIX hace tiempo. Gracias a mi madre y mi abuela por todo su apoyo, por no hablar de aquellas vacaciones de navidades cuando llegu a casa y escond rpidamente mi cabeza en mi ordenador porttil para trabajar en el libro. Para Mike y Ben: Fue un placer trabajar con usted en el libro. Heck, es un placer trabajar con usted en el trabajo! Para todos los miembros de la comunidad Subversion y la Apache Software Foundation, gracias por invitarme. No pasa un da en el que no aprenda algo de al menos uno de ustedes. Por ltimo, gracias a mi abuelo, que siempre me dijo que "la libertad es la responsabilidad." Yo no podra estar ms de acuerdo.

A partir de C. Michael Pilato


Un agradecimiento especial a mi esposa, Amy, por su amor y apoyo a los pacientes, para soportar largas noches, y incluso para revisar secciones enteras de este libro-que siempre van ms all, y lo hacen con una gracia increble. Gavin, cuando eres lo suficientemente mayor para leer, espero que ests tan orgulloso de su pap como l es de ustedes. Mam y pap (y el resto de la familia), gracias por su constante apoyo y entusiasmo. Me quito el sombrero ante Shep Kendall, a travs de los cuales el mundo de las computadoras se abri por primera vez para m, Ben Collins-Sussman, mi gua turstico por el mundo de cdigo abierto; Karl Fogel-eres mi emacs;. Greg Stein, por transmitirme programacin prctica conocimientos tcnicos; Brian Fitzpatrick-por compartir esta experiencia escribiendo conmigo. Para las muchas personas a las que siempre estoy aprendiendo cosas nuevas-continuad! Por ltimo, para el que demuestra perfectamente excelencia creativa-gracias.

xvii

Captulo 1. Introduccin
El control de versiones es el arte de manejar cambios en la informacin. Ha sido durante mucho tiempo una herramienta crtica para pro-programadores, quienes tpicamente emplean su tiempo haciendo pequeos cambios al software y luego deshaciendo esos cambios al da siguiente. Sin embargo, la utilidad de software de control de versiones se extiende mucho ms all de los lmites del mundo de desarrollo de software. En cualquier lugar se puede encontrar personas que utilizan ordenadores para manejar informacin que cambia frecuentemente, no hay espacio para el control de versiones. Y ah es donde entra en juego Subversion. Este captulo contiene una introduccin de alto nivel para Subversion: qu es, qu hace, cmo conseguirlo.

Qu es Subversion?
Subversion es un sistema de control de versiones libre / open-source. Es decir, Subversion maneja ficheros y director-IES a travs del tiempo. Un rbol de archivos se coloca en un repositorio central. El repositorio es como un servidor de ficheros ordinario, salvo que recuerda todos los cambios que se hayan hecho a sus ficheros y directorios. Esto le permite recuperar versiones antiguas de sus datos, o examinar la historia de cmo cambiaron sus datos. En este res-pecto, mucha gente piensa en un sistema de control de versiones como una especie de "mquina del tiempo". Subversion puede acceder a su repositorio a travs de redes, lo que permite que pueda ser utilizado por personas de distintos ordenadores. A cierto nivel, la capacidad para que varias personas puedan modificar y administrar el mismo conjunto de datos de sus respectivas ubicaciones fomenta la colaboracin. Se puede progresar mas rpidamente sin un nico conducto por el cual deben pasar todas las modificaciones. Y debido a que el trabajo se versiona, no tienen por qu temer que la calidad es la compensacin por la prdida de ese conducto, si se hace un cambio incorrecto a los datos, simplemente deshacer el cambio. Algunos sistemas de control de versiones tambin son sistemas de gestin de configuracin de software (SCM). Estos sistemas estn diseados especficamente para manejar rboles de cdigo fuente, y tienen muchas caractersticas que son especficas para el desarrollo de software, como el entendimiento nativo de lenguajes de programacin, o el suministro de herramientas para la construccin de software. Subversion, sin embargo, no es uno de estos sistemas. Se trata de un sistema general que puede ser utilizado para manejar cualquier coleccin de archivos. Para usted, esos ficheros pueden ser cdigo fuente-para otros, cualquier cosa de las listas de compra de comestibles hasta combinaciones de vdeo digitales y ms all.

Historia de Subversion
A principios del 2000, CollabNet, Inc.(Http://www.collab.net) comenz a buscar desarrolladores para escribir un reemplazo para CVS. CollabNet ofrece un conjunto de software de colaboracin llamado CollabNet Enterprise Edition (CEE), 1 de los cuales es uno de los componentes de control de versiones. Aunque CEE usaba CVS como su sistema de control de versiones inicial, las limitaciones de CVS fueron evidentes desde el principio, y CollabNet saba que tendra que encontrar algo mejor. Desafortunadamente, CVS se haba convertido en el estndar de facto en el mundo del cdigo abierto porque no haba nada mejor, al menos no bajo una licencia libre. As CollabNet decidi escribir un nuevo sistema de control de versiones desde cero, manteniendo las ideas bsicas de CVS, pero sin sus fallos y defectos. En febrero de 2000, entraron en contacto con Karl Fogel, el autor de Desarrollo de Cdigo Abierto con CVS (Coriolis, 1999), y le preguntaron si le gustara trabajar en este nuevo proyecto. Coincidentemente, en el momento Karl ya estaba discutiendo sobre el diseo de un nuevo sistema de control de versiones con su amigo Jim Blandy. En 1995, los dos haban fundado Cyclic Software, compaa que haca contratos de soporte de CVS, y aunque despus vendieron el negocio, que todava se utiliza CVS todos los das en su trabajo. Su frustracin con CVS haba conducido a Jim a pensar cuidadosamente acerca de mejores vas para administrar datos versionados, y ya haba llegado, no slo con el nombre de "Subversion", sino tambin con el diseo bsico del repositorio de Subversion. Cuando CollabNet llam, Karl acept inmediatamente trabajar en el proyecto, y Jim consigui que su empresa, Red Hat

Software, que esencialmente le donar al proyecto por un perodo indefinido de tiempo. CollabNet contrat a Karl ya Ben Collins-Sussman, y el trabajo detallado de diseo comenz en mayo. Con la ayuda de un poco de buena posicin picanas de Brian

1No es tambin un Equipo de edicin que ofrece CollabNet (CTE), destinado a grupos ms pequeos.

1 Introduccin Behlendorf y Jason Robbins de CollabNet, y Greg Stein (a la vez que un desarrollador independiente act-iva en el proceso de especificacin de WebDAV / DeltaV), Subversion atrajo rpidamente a una comunidad de desarrolladores activos. Result que mucha gente haba tenido las mismas frustrantes experiencias con CVS y bienestar con beneplcito la oportunidad de hacer algo al respecto. El equipo de diseo original estableci algunos objetivos simples. Ellos no quieren abrir nuevos caminos en la metodologa de control de versiones, slo queran corregir CVS. Decidieron que Subversion incorporara las caractersticas de CVS, y conservar el mismo modelo de desarrollo, pero no duplicar los defectos obvios de CVS. Y aunque no necesitaba ser un reemplazo exacto de CVS, debe ser lo suficientemente similares como para que cualquier usuario de CVS pudiera hacer el cambio con poco esfuerzo. Despus de catorce meses de codificacin, Subversion se convirti en "auto-hospedado" el 31 de agosto de 2001. Es decir, los desarrolladores de Subversion dejaron de usar CVS para la administracin del propio cdigo fuente de Subversion, y empezaron a usar Subversion en su lugar. Mientras CollabNet comenz el proyecto, y todava financia una gran parte de la obra (que paga el salario de unos pocos desarrolladores de Subversion a tiempo completo), Subversion funciona como la mayora de proyectos de cdigo abierto, que se rige por un conjunto flexible y transparente de normas que fomentar la meritocracia. Licencia copyright de CollabNet es completamente cumpla con dichos requisitos con las Directrices de Software Libre de Debian. En otras palabras, cualquier persona es libre para descargar, modificar, y redistribuir Subversion como le plazca, sin el permiso de CollabNet o de cualquier otra persona es necesario.

Caractersticas de Subversion
Cuando se habla de las caractersticas que Subversion aporta a la mesa de control de versiones, a menudo es til hablar de ellos en trminos de cmo han mejorado sobre el diseo de CVS. Si usted no est familiarizado con CVS, usted no puede entender todas estas caractersticas. Y si usted no est familiarizado con el control de versiones para nada, sus ojos vidriosos menos que lea primeroCaptulo 2, Conceptos bsicos, En el que se proporciona una intro-duccin suave para el control de versiones en general. Subversion proporciona: Versiones de Directory CVS solamente lleva el historial de ficheros individuales, pero Subversion implementa un "virtual" de ficheros versionados que sigue los cambios sobre rboles de directorios en el tiempo. Los archivos y directorios estn versionadas. Historia verdadera versin Dado que CVS est limitado al versionado de ficheros, operaciones como copiar y renombrar-que podra suceder a los archivos, pero que en realidad son cambios en el contenido de algunos conteniendo directorio-no son admitidos en el CVS. Adicionalmente, en CVS no puede reemplazar un fichero versionado con algo nuevo que lleva el mismo nombre y sin el nuevo elemento herede el historial del completamente ajenos-fichero antiguo, tal vez. Con Subversion, usted puede agregar, eliminar, copiar, y renombrar ficheros y directorios. Y cada fichero nuevo aadido comienza con un historial nuevo, limpio propia.

Atomic compromete Una coleccin de las modificaciones o bien entra en el repositorio completamente, o no, en absoluto. Esto permite a los desarrolladores construir y confirmar cambios como unidades lgicas, y evita los problemas que pueden ocurrir cuando slo una parte de un conjunto de cambios enviados lo hace con xito. Metadatos versionados Cada fichero y directorio tiene un conjunto de propiedades-claves y sus valores asociados. Puede crear y almacenar cualquier par de clave / valor que desee. Las propiedades se versionan con el tiempo, al igual que el contenido del archivo. Eleccin de las capas de red Subversion tiene una nocin abstracta del acceso al repositorio, por lo que es fcil para la gente para implementar nuevos mecanismos de red. Subversion puede conectarse al servidor HTTP Apache como un mdulo de extensin. Esto le da a Subversion una gran ventaja en estabilidad e interoperabilidad, y acceso instantneo a las caractersticas existentes que ofrece este servi-er-autenticacin, autorizacin, compresin de la transmisin, y as sucesivamente. Una ms ligera, Subversion independiente 2 Introduccin proceso del servidor tambin est disponible. Este servidor habla un protocolo propio que puede encapsularse fcilmente sobre SSH. Manejo de datos consistente Subversion expresa las diferencias del fichero usando un algoritmo de diferenciacin binario, que funciona de forma idntica tanto en archivos binarios (ilegibles para humanos) texto (legible) y. Ambos tipos de ficheros se almacenan igualmente comprimidos en el repositorio, y las diferencias se transmiten en ambas direcciones a travs de la red. Ramificacin y etiquetado eficientes El coste de ramificacin y etiquetado no necesita ser proporcional al tamao del proyecto. Subversion crea ramas y etiquetas simplemente copiando el proyecto, usando un mecanismo similar a un vnculo fsico. Por lo tanto estas operaciones llevan un tiempo pequeo y constante de tiempo. Extensibilidad Subversion no tiene lastre histrico, sino que est implementado como una coleccin de bibliotecas de C compartidas con APIS bien definidas. Esto hace que Subversion sea extremadamente mantenible y usable por otras aplicaciones y lenguajes.

Arquitectura de Subversion
Figura 1.1, "Arquitectura de Subversion" ilustra lo que podramos llamar una visin "milla de altura" del diseo de Subversion.

Figura 1.1. Arquitectura de Subversion


3 Introduccin

En un extremo se encuentra un repositorio de Subversion que contiene todos los datos versionados. Por otro lado, hay un programa cliente de Subversion que administra rplicas partes de esos datos versionados (llamadas "copias de trabajo"). Entre estos extremos hay mltiples rutas a travs de varias de acceso al repositorio (AR) capas. Algunas de estas rutas van a travs de redes de ordenadores ya travs de los servidores de red que a su vez el acceso al repositorio. Otras pasan por alto la red y acceden al repositorio directamente.

Instalando Subversion
Subversion est construido sobre una capa de portabilidad llamada APR-la biblioteca Apache Portable Runtime. La biblioteca de abril proporciona todas las interfaces que Subversion necesita para funcionar en sistemas operativos diferentes: el acceso de disco, acceso de red, gestin de memoria, etc. Aunque Subversion es capaz de utilizar Apache como uno de sus programas de servidor de red, su dependencia de abril no significa que Apache es necesario com-

Introduccin nente. APR es una biblioteca independiente utilizable por cualquier aplicacin. Esto no significa, sin embargo, que al igual que Apache, clientes y servidores de Subversion ejecutar en cualquier sistema operativo que el servidor httpd Apache se ejecuta en: Win-dows, Linux, todos los sabores de BSD, Mac OS X, Netware y otros. La forma ms fcil de Subversion es descargando un paquete binario construido para su sistema operativo. La pgina web de Subversion(Http://subversion.tigris.org) a menudo tiene estos paquetes disponibles para descarga, publicados por voluntarios. El sitio contiene generalmente paquetes de instaladores grficos para los usuarios de sistemas operativos de Microsoft. Si ejecuta un sistema operativo similar a Unix, puede utilizar el sistema de distribucin de paquetes nativo del sistema (RPMs, DEBs, el rbol de puertos, etc) para conseguir Subversion. Alternativamente, puede compilar Subversion directamente desde el cdigo fuente. Desde el sitio web de Subversion, abajo a cargar la ltima versin del cdigo fuente. Despus de desembalar, siga las instrucciones del archivo INSTALL para compilarlo. Tenga en cuenta que un paquete fuente liberado contiene todo lo necesario para construir una lnea de comandos CLI-te capaz de hablar con un repositorio remoto (en particular, las bibliotecas apr, apr-util y neon). Pero porciones op-ciones de Subversion tienen otras muchas dependencias, como Berkeley DB y posiblemente Apache httpd. Si quieres hacer una compilacin completa, asegrese de que tiene todos los paquetes documentados en el archivo INSTALL. Si va a trabajar en el propio Subversion, puede usar su programa cliente para captar laltimo, el cdigo fuente bleeding-edge. Esto se documenta en la seccin "Obtener el Cdigo Fuente".

Componentes de Subversion
Subversion, una vez instalado, tiene un nmero de diferentes piezas. La siguiente es una breve descripcin de lo que hay. No se alarme si las descripciones breves dejan a uno rascndose la cabeza hay muchas ms pginas de este libro dedicadas a aliviarle esa confusin. svn El programa cliente de lnea de comandos. svnversion Un programa para la presentacin de informes del Estado (en trminos de revisiones de los elementos presentes) de una copia de trabajo. svnlook Una herramienta para inspeccionar un repositorio Subversion. svnadmin Una herramienta para crear, modificar o reparar un repositorio Subversion. svndumpfilter Un programa para filtrar el formato de volcado del repositorio Subversion. mod_dav_svn Un plug-in para el servidor HTTP Apache, usado para hacer su depsito a disposicin de otros a travs de una red. svnserve Un programa personalizado autnomo servidor, ejecutable como proceso demonio o invocable por SSH; otra manera de hacer su depsito a disposicin de otros a travs de una red. Asumiendo que tiene instalado Subversion correctamente, debera estar listo para comenzar. Los dos captulos siguientes le guiarn a travs del uso de svn, el programa cliente de lnea de comandos de Subversion.

Un comienzo rpido

Algunas personas tienen problemas para absorber una nueva tecnologa mediante la lectura de la clase de "arriba abajo" que ofrece este libro. Esta seccin es una breve introduccin a Subversion, y est diseado para dar "abajo hacia arriba" los estudiantes una oportunidad de luchar. Si usted prefiere aprender mediante la experimentacin, el siguiente demonio5 Introduccin tracin ser conseguir que la puesta en marcha. En el camino, le damos enlaces a los captulos relevantes de este libro. Si usted es nuevo en todo el concepto de control de versiones o el modelo "copiar-modificar-mezclar" utilizado tanto por CVS y Subversion, entonces usted debe leer el Captulo 2, Conceptos bsicos antes de seguir adelante.

Not a
En el siguiente ejemplo se supone que tiene svn, el cliente de lnea de comandos de Subversion, y svnadmin, la herramienta administrativa, listo para ir. Tambin se supone que est utilizando Subversion 1.2 o posterior (ejecutar svn -. Versin para comprobarlo) Subversion almacena todos los datos versionados en un repositorio central. Para empezar, cree un nuevo repositorio: $ Svnadmin create / path / to / repos $ Ls / ruta / al / repositorio conf / dav / db / Formato ganchos / cerraduras / README.txt Este comando crea un nuevo directorio / path / to / repos que contiene un repositorio Subversion. Este nuevo directorio contiene (entre otras cosas) una coleccin de archivos de bases de datos. No ver los archivos de ver-nados si vistazo dentro. Para obtener ms informacin acerca de la creacin y mantenimiento de repositorio, consulte Captulo 5, Administracin del Repositorio. Subversion no tiene un concepto de un "proyecto". El repositorio es slo un sistema de ficheros versionado virtual, un rbol grande que puede contener cualquier cosa que desee. Algunos administradores prefieren almacenar slo un proyecto en un reposit-ria, y otros prefieren almacenar mltiples proyectos en un repositorio colocndolos en directorios separados. Los mritos de cada enfoque se discuten enla seccin "Escogiendo el esquema de repositorio". De cualquier manera, el repositorio slo gestiona los archivos y directorios, por lo que toca a los seres humanos para interpretar determinados directa-teoras como "proyectos". As, mientras que es posible que vea referencias a proyectos en todo el libro, tenga en cuenta que slo estamos siempre hablando de un directorio (o conjunto de directorios) en el repositorio. En este ejemplo, se supone que ya tiene algn tipo de proyecto (una coleccin de archivos y director-es) que desea importar en el repositorio Subversion de nueva creacin. Comience por la organizacin en un nico directorio llamado miproyecto (o lo que quieras). Por razones que se aclararn ms adelante (vaseCaptulo 4, Crear ramas y fusionarlas), La estructura de rbol de su proyecto debe contener tres dir-ectories de nivel superior denominada ramas, etiquetas, y el tronco. El directorio del tronco debe contener todos los datos, mientras que las ramas y las etiquetas son directorios vacos: / Tmp / miproyecto branches / / Tmp / miproyecto / /

tags / / Tmp / miproyecto / trunk /

foo.c bar.c Makefile ...

Las ramas, las etiquetas y subdirectorios troncales no son realmente necesarios por Subversion. Son simplemente una convencin popular que lo ms probable desea utilizar ms adelante. Una vez que tenga su rbol de datos listo para ir, importarlo en el repositorio con el comando svn import (Consulte la seccin "svn import"): $ Svn import / tmp / miproyecto file :/ / / ruta / al / repositorio / miproyecto-m "importacin inicial" Agregar / tmp / miproyecto / branches Aadir / tmp / miproyecto / etiquetas

6 Introduccin Aadir / tmp / miproyecto Aadir / tmp / miproyecto Aadir / tmp / miproyecto Aadir / tmp / miproyecto . . . Committed revision 1. $ / / / / trunk trunk / foo.c trunk / bar.c trunk / Makefile

Ahora el repositorio contiene este rbol de datos. Como se mencion anteriormente, no podr ver los archivos de leerlo directamente en el repositorio, sino que son todos almacenados en una base de datos. Pero imaginaria sistema de ficheros del repositorio ahora contiene un directorio de nivel superior denominada miproyecto, que a su vez contiene los datos. Tenga en cuenta que el directorio original / tmp / miproyecto no ha cambiado; Subversion no es consciente de ello. (De hecho, incluso se puede borrar ese directorio si lo desea.) Con el fin de iniciar la manipulacin de datos del repositorio, es necesario crear una nueva "copia de trabajo" de los datos, una especie de espacio de trabajo privado. Pedirle a Subversion "check out" de una copia de trabajo del directorio trunk del repositorio miproyecto /: $ Svn checkout file :/ / / ruta / al / repositorio / miproyecto / trunk miproyecto A miproyecto / foo.c A miproyecto / bar.c A miproyecto / Makefile . . . Dejamos revisin 1. Ahora usted tiene una copia personal de parte del repositorio en un nuevo directorio llamado miproyecto. Puede editar los archivos en su copia de trabajo y despus esos cambios al repositorio. Ingrese su copia de trabajo y editar el contenido de un archivo. Ejecute svn diff para ver la salida diff unificado de los cambios. Ejecute svn commit para confirmar la nueva versin de su archivo en el

repositorio. Ejecute svn update para actualizar su copia de trabajo "up-to-date" con el repositorio.

Para una visita completa de todas las cosas que usted puede hacer con su copia de trabajo, lea el Captulo 3, Recorrido guiado. En este punto, usted tiene la opcin de hacer su depsito a disposicin de otros a travs de una red. Ver Captulo 6, Configuracin del servidor para aprender sobre los diferentes tipos de procesos de servidor disponibles y cmo configurarlos.

Captulo 2. Conceptos Bsicos


Este captulo es una introduccin corta e informal a Subversion. Si eres nuevo en el control de versiones, este captulo es definitivamente para ti. Comenzamos con una discusin de los conceptos generales de control de versiones, nos hacemos camino dentro de las ideas especficas que hay tras Subversion, y mostramos algunos ejemplos sencillos de Subversion en accin. A pesar de los ejemplos de este captulo muestran a gente compartiendo colecciones de cdigo fuente del programa, tenga en cuenta que Subversion puede manejar cualquier tipo de archivo de coleccin-no se limita a ayudar a los informticos pro-programadores.

El repositorio
Subversion es un sistema centralizado para compartir informacin. En su ncleo est un repositorio, que es un almacn central de datos. El repositorio almacena informacin en forma de un sistema de archivos de rboles de una jerarqua tpica de ficheros y directorios. Cualquier nmero de clientes se conectan al repositorio, y luego leer o escribir en estos archivos. Al escribir datos, el cliente hace que la informacin disponible a los dems, por los datos de la lectura, el cliente re- cibe informacin de otros. Figura 2.1, "Un sistema cliente / servidor tpico" ilustra esto.

Figura 2.1. Un sistema cliente / servidor tpico

Por qu es interesante? Hasta ahora, esto suena como la definicin de un servidor de ficheros tpico. Y, de hecho, el repositorio es una especie de servidor de archivos, pero no es el habitual. Lo que hace que el repositorio de Subversion especial es que recuerda todos los cambios que se ha escrito a l: cada cambio a cada archivo, e incluso cambios en el propio rbol de directorios, tales como la adicin, borrado y reubicacin de archivos y directorios.

Cuando un cliente lee datos de un repositorio, normalmente ve nicamente la ltima versin del rbol de archivos. Pero el cliente tambin tiene la capacidad de ver estados previos del sistema de archivos. Por ejemplo, un cliente puede hacer preguntas histricas, como "Qu contena este directorio el ltimo mircoles?" O "Quin fue la ltima persona que cambi este fichero, y qu cambios hizo l?" Estas son el tipo de preguntas que se encuentran en el corazn de cualquier sistema de control de versiones: sistemas que estn diseados para registrar y rastrear cambios en los datos a travs del tiempo.

Modelos de versionado
La misin principal de un sistema de control de versiones es permitir la edicin en colaboracin y el intercambio de datos. Pero diferentes sistemas utilizan diferentes estrategias para lograr esto.

8 Conceptos Bsicos

El problema de compartir archivos


Todos los sistemas de control de versiones tienen que resolver los mismos problemas fundamentales: cmo permitir el sistema compartir informacin entre usuarios, pero evitando que ellos accidentalmente se pisen unos a otros? Es muy fcil para los usuarios accidentalmente sobreescriban los cambios del otro en el repositorio. Considere el escenario mostrado en laFigura 2.2, "El problema de evitar". Supongamos que tenemos dos compaeros de trabajo, Harry y Sally. Cada uno decide editar el mismo fichero del repositorio a la vez. Si Harry graba sus cambios en el repositorio primero, entonces es posible que (unos momentos despus) a Sally podra accidentalmente sobreescribirlos con su propia versin del archivo. Mientras que la versin del fichero de Harry no se ha perdido para siempre (porque el sistema recuerda cada cambio), cualquier cambio que Harry hizo no estar en la versin nueva de Sally del archivo, porque ella nunca vi los cambios de Harry, para empezar. El trabajo de Harry est perdido-o an efectivamente al menos falta en la ltima versin del archivo-y probablemente por accidente. Esta es una situacin que queremos evitar!

Figura 2.2. El problema de evitar

La solucin bloquear-modificar-desbloquear
Muchos sistemas de control de versiones utilizan un modelo-modificar-desbloquear el bloqueo de modelo para abordar el problema de muchos autores vapulear el trabajo del otro. En este modelo, el repositorio slo permite que una persona cambie un archivo a la vez. Esta poltica de exclusividad se gestiona el uso de bloqueos. Harry debe "bloquear" un archivo antes de que pueda comenzar a MAKcin cambios. Si Harry ha bloqueado un fichero, entonces Sally puede tambin no bloquearla, y por lo tanto no puede realizar ningn cambio en ese archivo. Lo nico que puede hacer es leer el archivo y esperar a que Harry termine sus cambios y re-

9 Conceptos Bsicos arrendar la cerradura. Despus de que Harry desbloquee el fichero, Sally puede tomar su turno bloqueando y editando el archivo. Fig- ure 2.3, "La solucin bloqueo-modificacin-desbloqueo" demuestra esta sencilla solucin.

Figura 2.3. La solucin bloqueo-modificacin-desbloqueo

El problema con el modelo bloquear-modificar-desbloquear es que es un poco restrictivo, ya menudo se convierte en un roadb-lock para los usuarios: Bloqueo causa muchos problemas administrativos. A veces Harry bloquear un archivo y luego olvidarse de l. Mientras tanto, dado que Sally est an esperando para editar el fichero, sus manos estn atadas. Y entonces Harry se va de vacaciones. Ahora Sally tiene que buscar a un administrador para liberar el bloqueo de Harry. La situacin acaba causando un montn de retraso y prdida de tiempo innecesaria. El bloqueo puede causar procesos en serie innecesarios. Qu ocurre si Harry est editando el inicio de un archivo de texto, y Sally simplemente quiere cambiar la parte final del mismo archivo? Estos cambios no se superponen en absoluto. Ellos podran fcilmente editar el fichero de forma simultnea, y no habra ningn dao, asumiendo que los cambios se fusionaran correctamente. No hay necesidad de que se turnen en esta situacin. Bloqueo puede causar una falsa sensacin de seguridad.Imagine que Harry bloquea y edita el fichero A, mientras que a Sally simultneamente bloquea y edita el fichero B. Pero suponga que A y B dependen uno del otro, y los cambios hechos a cada uno son semnticamente incompatibles. De repente A y B no funcionan juntos toda10 Conceptos Bsicos ms. El sistema de bloqueo no para evitar el problema, sin embargo, de alguna manera proporciona una falsa sensacin de seguridad. Es fcil para Harry y Sally imaginar que al bloquear los ficheros, cada uno est empezando una tarea segura y aislada, por lo que no molesta discutir sus cambios

incompatibles desde el principio.

El copiar-modificar-mezclar
Subversion, CVS y otros sistemas de control de versiones utilizan un modelo-modificar-fusionar la modelo como alternativa al bloqueo. En este modelo, los contactos de los clientes de cada usuario al repositorio del proyecto y crea una copia de trabajo personal-un reflejo local de los archivos y directorios del repositorio. Luego, los usuarios trabajan en paralelo, modificando sus copias privadas. Finalmente, las copias privadas se fusionan juntas en una nueva versin final. El sistema de control de versiones a menudo ofrece ayuda en la fusin, pero al final la persona es responsable de hacer que ocurra correctamente. He aqu un ejemplo. Digamos que tanto Harry como Sally crean copias de trabajo del mismo proyecto, copiado del repositorio. Ellos trabajan concurrentemente, y hacen los cambios en el mismo archivo A dentro de sus copias. A Sally grabar sus cambios en el repositorio primero. Cuando Harry intenta grabar sus cambios ms tarde, la repos-itory le informa que su archivo A est fuera de fecha. En otras palabras, que el fichero A en el repositorio ha cambiado de alguna forma desde la ltima vez que lo copi. As que Harry le pide a su cliente que fusione cualquier nuevo cambio del repositorio dentro de su copia de trabajo del fichero A. Lo ms probable es que los cambios de Sally no se superpongan a los suyos, de modo que una vez que ambos conjuntos de cambios se han integrado, l graba su copia de trabajo en el repositorio. Figura2.4, "El copiar-modificar-mezclar " yFigura 2.5, "La solucin copiar-modificarmezclar (continuacin)" muestra este proceso.

Figura 2.4. El copiar-modificar-mezclar

11 Conceptos Bsicos

Figura 2.5. La solucin copiar-modificar-mezclar

(continuacin)

Pero qu pasa si los cambios de Sally s se superponen a los cambios de Harry? Qu, pues? Esta situacin se denomina un con-flicto, y por lo general no es un gran problema. Cuando Harry le pide a su cliente que fusione los ltimos cambios del repositorio en su copia de trabajo, su copia del fichero A se marca de alguna forma como estar en un estado de conflicto: l ser capaz de ver ambos conjuntos de cambios conflictivos, y manualmente podr elegir entre ellos . Tenga en cuenta que el software no puede resolver conflictos automticamente; slo los humanos son capaces de entender y tomar las decisiones inteligentes es necesario. Una vez que Harry haya resuelto manualmente los cambios superpuestos, tal vez despus de una discusin con Sally-que puede salvar con seguridad el archivo mezclado en el repositorio. El modelo copiar-modificar-mezclar puede sonar un poco catico, pero en la prctica, funciona extremadamente bien. Los usuarios pueden trabajar en paralelo, sin esperar a los otros. Cuando trabajan en los mismos ficheros, resulta que la mayora de sus cambios concurrentes no se superponen en absoluto; conflictos no son frecuentes. Y la cantidad de tiempo que se necesita para resolver conflictos es mucho menor que el tiempo perdido por un sistema de bloqueo. Al final, todo se reduce a un factor crtico: la comunicacin entre usuarios. Cuando los usuarios se comunican de forma pobre, aumentan los conflictos sintcticos y semnticos. Ningn sistema puede obligar a los usuarios a comunicarse perfecta-mente, y no hay sistema que pueda detectar conflictos semnticos. As que no hay motivo para que se deje llevar por una falsa promesa de que un sistema de bloqueo de alguna manera prevenir los conflictos, en la prctica, el bloqueo parece inhibir la productividad de ms que cualquier otra cosa.

12 Conceptos Bsicos

Cuando necesario

bloqueo

es

Mientras que el modelo bloquear-modificar-desbloquear es generalmente considerado perjudicial para la colaboracin, todava hay momentos en bloqueo es apropiado. El modelo copiar-modificar-fusin se basa en el supuesto de que los archivos son contextualmente fusionables: es decir, que la mayora de los archivos en el repositorio son archivos de texto basados en lnea (como el cdigo fuente de programa). Pero para los archivos con formatos binarios, como obras de arte o de sonido, a menudo es imposible fusionar los cambios conflictivos. En estas situaciones, lo que realmente es necesaria a los usuarios a tomar turnos estrictos cuando se cambia el archivo. Sin acceso serializado, alguien termina por perder el tiempo en los cambios que en definitiva se descartan. Aunque CVS y Subversion todava principalmente copiar-modificar-fusionar sistemas, ambos reconocen la necesidad de bloquear un archivo ocasional y proporcionar mecanismos para ello. Vea la seccin "Bloqueo".

Subversion en accin
Es hora de pasar de lo abstracto a lo concreto. En esta seccin, mostraremos ejemplos reales de Subversion que se utiliza.

Las copias de trabajo


Usted ya ha ledo acerca de las copias de trabajo; ahora le demostraremos cmo el cliente Subversion crea y las utiliza. Una copia de trabajo de Subversion es un rbol de directorios ordinario en su sistema local, conteniendo una coleccin de archivos. Puede editar estos ficheros como desee, y si son archivos de cdigo fuente, puede compilar su programa de la forma habitual. Su copia de trabajo es su rea de trabajo privada: Subversion nunca incorporar los cambios de otra gente, ni har que sus cambios estn disponibles para los dems, hasta que explcitamente diga que lo haga. Usted puede incluso tener varias copias de trabajo del mismo proyecto. Despus de haber hecho algunos cambios en los archivos de la copia de trabajo y verificar que funcionan correctamente, Subversion le provee de comandos para "publicar" sus cambios a las otras personas que trabajan con usted en su proyecto (escribiendo en el repositorio). Si los dems publican sus propios cambios, Subversion le provee de comandos para fusionar esos cambios dentro de su directorio de trabajo (leyendo desde el repositorio). Una copia de trabajo tambin contiene algunos archivos extra, creados y mantenidos por Subversion, para ayudarse a llevar a cabo estos mandatos. En particular, cada directorio en su copia de trabajo contiene un subdirectorio llamado . Svn, tambin conocido como el directorio administrativo de la copia de trabajo. Los archivos en cada Subversion ayuda directa-ria administrativa reconocer qu archivos contienen cambios no publicados y qu archivos estn fuera de fecha con respecto al trabajo de los dems. Un repositorio tpico de Subversion a menudo contiene los archivos (o el cdigo fuente) de varios proyectos, por lo general, cada proyecto es un subdirectorio en el rbol del sistema de archivos del

repositorio. En esta disposicin, una copia de trabajo de un usuario normalmente correspondern a un subrbol particular del repositorio. Por ejemplo, suponga que tiene un repositorio que contiene dos proyectos de software, paint y calc. Cada proyecto vive en su propio subdirectorio de nivel superior, como se muestra en la figura2.6 ", sistema de ficheros del repositorio tem ".

Figura 2.6. El sistema de archivos del repositorio


13 Conceptos Bsicos

Para obtener una copia de trabajo, primero debe obtener algn subrbol del repositorio. (El trmino "check out" puede sonar como que tiene algo que ver con el bloqueo o la reserva de recursos, pero no es as, sino que simplemente crea una copia privada del proyecto para usted.) Por ejemplo, si usted echa un vistazo a / calc, usted recibir una copia de trabajo as: $ Svn checkout http://svn.example.com/repos/calc A calc / Makefile A calc / integer.c A calc / button.c Prestado revisin 56. $ Ls-A calc Makefile integer.c button.c. Svn / La lista de letras A indica que Subversion est aadiendo una serie de elementos a su copia de trabajo. Ahora tiene una copia personal del directorio / calc del repositorio, con una entrada-.svn adicional, que

contiene la informacin extra que Subversion necesita, como se mencion anteriormente.

URLs repositorio

del

Repositorios de Subversion pueden ser accedidos por muchos mtodos diferentes-en el disco local, oa travs de varios protocolos de red. La ubicacin del repositorio, sin embargo, es siempre un URL. Tabla2.1, "URL de acceso al repositorio" describe cmo los diferentes esquemas de URL se asignan a los mtodos de acceso disponibles.

14 Conceptos Bsicos

Tabla 2.1. URL de acceso al repositorio


Esquema file :/ / / http:// https:// svn :/ / svn + ssh :/ / Mtodo de acceso Acceso directo al repositorio (en disco local) acceso a travs del protocolo WebDAV a un servidor Apache configurado para Subversion mismo que http://, pero con encriptacin SSL. Acceso mediante un protocolo personalizado a un svnserve servidor mismo que svn :/ /, pero a travs de un

tnel SSH. Para obtener ms informacin sobre cmo Subversion analiza las direcciones URL, consulte la seccin "URLs del repositorio Subversion".

Suponga que ha hecho cambios en button.c. Desde el directorio. Svn recuerda la fecha de modificacin del archivo y contenido original, Subversion puede decirle que ha cambiado el archivo. Sin embargo, Subversion no hace pblicos sus cambios hasta que explcitamente se lo pida. El acto de publicar sus cambios se conoce ms comnmente como confirmar (o enviar) los cambios en el repositorio. Para publicar sus cambios para los dems, puede utilizar el comando de Subversion commit: $ Svn commit button.c El envo de datos de archivos Transmisin button.c. Committed revision 57. Ahora sus cambios a button.c se han cometido en el repositorio, si cualquier otro usuario obtiene una copia de trabajo de / calc, vern sus cambios en la ltima versin del archivo. Suponga que tiene un colaborador, Sally, que obtuvo una copia de trabajo de / calc al mismo tiempo que usted. Cuando ha confirmado sus cambios a button.c, no se modifica la copia de trabajo de Sally, Subversion slo modifica las copias de trabajo a peticin del usuario. Para tener su proyecto actualizado, Sally puede pedirle a Subversion actualizar su copia de trabajo, mediante el comando update de Subversion. Esto incorporar sus cambios en la copia de trabajo, as como cualquier oth-res que se han cometido desde que ella lo obtuvo.

$ Pwd / Home / salida / calc $ Ls-A . Svn / button.c Makefile integer.c

$ Svn update U button.c Se ha actualizado a la revisin 57. La salida del comando svn update indica que Subversion actualizar el contenido del pero-ton.c. Tenga en cuenta que Sally no necesita especificar qu ficheros actualizar; Subversion usa la informacin en el directorio svn, y ms informacin en el repositorio, para decidir qu archivos necesitan ser puesto al da..

15 Conceptos Bsicos

Revisiones
Una operacin svn commit puede publicar los cambios de cualquier nmero de archivos y directorios como una nica transaccin atmica. En su copia de trabajo, contenido de los ficheros, crear, borrar, renombrar y copiar ficheros y directorios se pueden cambiar, y luego confirmar el conjunto completo de cambios como una unidad. En el repositorio, cada confirmacin se trata como una transaccin atmica: o bien todos los cambios de la confirmacin se llevan a cabo, o ninguno de ellos se llevan a cabo. Subversion trata de conservar esta atomicidad en caso de errores en el programa, errores del sistema, problemas de red, y otras acciones del usuario. Cada vez que el repositorio acepta una confirmacin, crea un nuevo estado del rbol de ficheros, llamado revi-sin. A cada revisin se le asigna un nmero natural nico, un nmero mayor que el nmero de la re-visin anterior. La revisin inicial de un repositorio recin creado se numera como cero, y consiste nicamente en un directorio raz vaco. Figura 2.7, "El repositorio" ilustra una buena manera de visualizar el repositorio. Imagine una fila de nmeros revi-sin, empezando en 0, de izquierda a derecha. Cada nmero de revisin tiene un rbol colgando debajo, y cada rbol es una "foto" de cmo estaba el repositorio tras la confirmacin.

Figura 2.7. El repositorio

Nmeros revisin

globales

de

A diferencia de muchos otros sistemas de control de versiones, los nmeros de revisin de Subversion se aplican a rboles completos, no archivos individuales. Cada nmero de revisin selecciona un rbol entero, un estado particular del repositorio tras algn cambio confirmado. Otra forma de verlo es pensar que la revisin N representa el estado del repositorio tras la confirmacin N-sima. Cuando los usuarios de Subversion habla de la "revisin 5 de foo.c", realmente quieren decir "foo.c tal y como aparece en la revisin 5". Tenga en cuenta que, en general, las revisiones N y M de un fichero no tienen por qu difieren? Dado que CVS utiliza nmeros de revisin por archivo, los usuarios de CVS pueden querer verApndice A, Subversion para Usuarios de CVS para ms detalles.

16 Conceptos Bsicos Es importante sealar que las copias de trabajo no siempre se corresponden a una nica revisin en el reposit-ria, ya que pueden contener ficheros de varias revisiones diferentes. Por ejemplo, supongamos que usted echa un vistazo a una copia de tra-bajo de un repositorio cuya revisin ms reciente es la 4: calc / Makefile: 4 integer.c: 4 button.c: 4 Por el momento, esta copia de trabajo se corresponde exactamente a la revisin 4 en el repositorio. Sin embargo, supongamos que se realiza un cambio en button.c, y confirme ese cambio. Suponiendo que no

han realizado otros envos, su confirmacin crear la revisin 5 en el repositorio, y su copia de trabajo ahora se ver as: calc / Makefile: 4 integer.c: 4 button.c: 5 Supongamos que, en este punto, Sally hace un cambio en integer.c, creando la revisin 6. Si utiliza svn update para actualizar su copia de trabajo al da, entonces se ver as: calc / Makefile: 6 integer.c: 6 button.c: 6 Cambios de Sally a integer.c aparecer en su copia de trabajo, y su cambio estar an presente en button.c. En este ejemplo, el texto de Makefile es idntico en las revisiones 4, 5 y 6, pero Subversion marcar su copia de trabajo de Makefile con la revisin 6 para indicar que an est actualizado. As que, despus de hacer una actualizacin limpia en la parte superior de su copia de trabajo, generalmente obtendr exactamente una revisin del repositorio.

Cmo las copias de trabajo al repositorio


Para cada archivo en un directorio de trabajo, Subversion grabar dos piezas esenciales de la informacin en el . Svn /rea administrativa: qu versin es tu archivo de trabajo se basa en (lo que se denomina la revisin de trabajo del fichero), y una fecha que indica cuando la copia local se actualiza el repositorio pasado.

Dada esta informacin, hablando con el repositorio, Subversion puede decirle cul de los cuatro estados de un archivo de trabajo se encuentra en: Sin cambios, y la corriente El archivo no ha cambiado en el directorio de trabajo, y sin cambios en ese archivo se ha comprometido con el reposit-ria desde su revisin de trabajo. Un svn commit del fichero no har nada, y un svn update del fichero no har nada. Cambiado localmente, y la corriente El archivo ha sido cambiado en el directorio de trabajo, y ningn cambio sobre ese fichero ha comprometido con el repositorio desde su revisin base. Hay cambios locales que no se han confirmado en el repositorio, lo que al confirmar svn del fichero se conseguir publicar sus cambios, y un svn update del fichero no har nada.

17 Conceptos Bsicos Sin cambios, y de fecha El archivo no se ha cambiado en el directorio de trabajo, pero se ha cambiado en el repositorio. El fichero deber ser actualizado, para actualizarlo con la revisin pblica. Un svn commit del fichero no har nada, y un svn update del fichero introducir los ltimos cambios a su copia de trabajo. Cambiado localmente, y fuera de la fecha El archivo se ha cambiado tanto en el directorio de trabajo, y en el repositorio. Un svn commit del fichero fallar con un error "out-of-date". El archivo debe ser actualizado primero; un comando svn update intentar

mezclar los cambios pblicos con los cambios locales. Si Subversion no puede completar la fusin de una forma automtica-mente plausible que deja al usuario para resolver el conflicto. Esto puede sonar como mucho para no perder de vista, pero el comando svn status le mostrar el estado de cualquierartculo en su copia de trabajo. Para obtener ms informacin sobre este comando, consulte la seccin "svn status".

Revisin mixto copias de trabajo


Como principio general, Subversion trata de ser lo ms flexible posible. Un tipo especial de flexibilidad es la capacidad de tener una copia de trabajo que contiene los archivos y directorios con una mezcla de diferentes nmeros de revisin de trabajo. Por desgracia, esta flexibilidad tiende a confundir a un nmero de nuevos usuarios. Si el ejemplo anterior mostrando revisiones mezcladas perplejos a usted, aqu est una cartilla en tanto por qu existe la funcin y la forma de hacer uso de ella.

Actualizaciones y confirmar acciones son independientes


Una de las reglas fundamentales de Subversion es que una accin de "push" no causa un "pull", ni a la inversa. El hecho de que est listo para enviar nuevos cambios en el repositorio, no significa que est listo para recibir los cambios de otras personas. Y si usted tiene nuevos cambios todava en progreso, entonces svn up-fecha debe combinar con gracia cambios del repositorio en su cuenta, en lugar de obligar a publicarlas. El principal efecto secundario de esta regla es que significa una copia de trabajo tiene que ver la contabilidad adicional para rastrear revisiones mezcladas, y ser tolerante con la mezcla tambin. Se hace ms complicado por el hecho de que dir-ectories mismos estn versionados. Por ejemplo, suponga que tiene una copia de trabajo completo en la revisin 10. Puede editar el archivo foo.html y luego realiza una svn commit, creando la revisin 15 en el repositorio. Despus de la confirmacin es satisfactoria, muchos de los nuevos usuarios se espera que la copia de trabajo a ser totalmente en la revisin 15, pero ese no es el caso! Cualquier nmero de cambios que podra haber sucedido en el depsito entre las revisiones 10 y 15. El cliente no sabe nada de los cambios en el repositorio, ya que an no se ha ejecutado svn update y svn com-mit no tire hacia abajo los nuevos cambios. Si, por el contrario, svn commit eran para descargar automticamente los nuevos cambios, entonces sera posible establecer la copia de trabajo a la revisin 15-pero entonces estaramos violando la regla fundamental de "push" y "pull" restante acciones separadas. Por lo tanto, la nica cosa segura que el cliente Subversion puede hacer es marcar el archivo-foo.html-como en la revisin 15. El resto de la copia de trabajo se mantiene en la revisin 10. Slo ejecutando svn update se pueden descargar los ltimos cambios y pueden marcar toda la copia de trabajo como la revisin 15.

Las revisiones mixtas son normales


El hecho es que cada vez que ejecute svn commit, su copia de trabajo termina con un poco de mezcla de revisiones. Las cosas que usted acaba de cometer estn marcados como de las revisiones de trabajo ms grandes que cualquier otra cosa. Despus de varias entregas (sin cambios en el medio) su copia de trabajo contendr toda una mezcla de revi-siones. Incluso si usted es la nica persona que utiliza el repositorio, seguir viendo este fenmeno. Para exami-nar la mezcla de revisiones, utilice el svn status comando detallado (vase elseccin llamada "Svn status" para obtener ms informacin.) A menudo, los nuevos usuarios no tienen idea de que su copia de trabajo contiene revisiones mezcladas. Esto puede ser confuso, ya que muchos comandos del cliente son sensibles a la revisin de trabajo del tema que son ex-

18 Conceptos Bsicos amining. Por ejemplo, se utiliza el comando svn log para mostrar la historia de los cambios en un archivo o directa-ria (vasela seccin llamada "svn log"). Cuando el usuario invoca este comando en un objeto de copia de trabajo, que esperan ver toda la historia del objeto. Pero si la revisin de trabajo del objeto es bastante viejo (a menudo debido a svn update no se ha ejecutado en mucho tiempo), a

continuacin, se muestra la historia de la versin anterior del objeto.

Las revisiones mixtas son tiles


Si su proyecto es lo suficientemente complejo, descubrir que a veces es bueno forzosamente porciones "efecto retroactivo" de su copia de trabajo a una revisin anterior, usted aprender cmo hacerlo en el captulo 3. Tal vez le gustara probar una versin anterior de un submdulo contenido en un subdirectorio, o tal vez desea averiguar si un insecto lleg por primera vez a la existencia de un archivo especfico. Esta es la "mquina del tiempo" aspecto de un sistema de control de versiones - la caracterstica que le permite mover ninguna parte de su copia de trabajo hacia adelante y hacia atrs en la historia.

Las revisiones mixtas tienen limitaciones


Sin embargo hacer uso de las revisiones mixtas en su copia de trabajo, hay limitaciones a esta flexibilidad. En primer lugar, no se puede comprometer a la eliminacin de un archivo o directorio que no est totalmente al da. Si una versin ms recientesin del tema existe en el repositorio, su intento de eliminar ser rechazada, para evitar que accidentalmente destruir cambios que an no has visto. En segundo lugar, no se puede confirmar un cambio de metadatos en un directorio a menos que sea plenamente al da. Usted aprender acerca de cmo adjuntar "propiedades" a elementos en el captulo 6. Revisin de trabajo de un directorio define un conjunto especfico de entradas y propiedades, y cometiendo as un cambio de propiedad a un directorio fuera de fecha puede destruir las propiedades que an no ha visto.

Resumen
Hemos cubierto un nmero de conceptos fundamentales de Subversion en este captulo: Hemos introducido las nociones de un repositorio central, la copia de trabajo del cliente, y el conjunto de rboles de revisiones del repositorio. Hemos visto algunos ejemplos simples sobre cmo dos colaboradores pueden utilizar Subversion para publicar y reci-bir cambios entre s, usando el "copiar-modificar-mezclar" del modelo. Hemos hablado un poco sobre la manera en que Subversion controla y maneja la informacin en una copia de trabajo.

En este punto, usted debe tener una buena idea de cmo funciona Subversion en el sentido ms general. Armado con este conocimiento, ahora debera estar listo para saltar al siguiente captulo, que es un recorrido detallado de los comandos y funciones de Subversion.

19

Captulo 3. Guided Tour


Ahora vamos a entrar en los detalles de la utilizacin de Subversion. En el momento en que llegue al final de este captulo, usted ser capaz de realizar casi todas las tareas que usted necesita usar Subversion en el trabajo de un da normal. Vamos a empezar con una compra inicial de su cdigo, y caminar a travs de hacer cambios y examinando esos cambios. Tambin ver como introducir cambios hechos por otros en su copia de trabajo, examinarlos, y resolver cualquier conflicto que pueda surgir. Tenga en cuenta que este captulo no pretende ser una lista exhaustiva de todos los comandos de Subversion-ms bien, es una introduccin informal a las tareas ms comunes de Subversion que se encontrar. En este captulo se as- asume que usted ha ledo y entendido Captulo 2, Conceptos bsicos y

estamos familiarizados con el general de mod-el de Subversion. Para una referencia completa de todos los comandos, consulteCaptulo 9, completa de Subversion de refe- cia.

Ayuda!
Antes de seguir leyendo, aqu est el comando ms importante que usted necesitar siempre al usar Subversion: svn help. El cliente de lnea de comandos Subversion est auto-documentado-en cualquier momento, una ayuda svn rpida <subcomando> describir la sintaxis, los interruptores, y el comportamiento del subcomando.

Importar
Use svn import para importar un nuevo proyecto en un repositorio Subversion. Si bien esto es muy probablemente la primera cosa que va a hacer al configurar su servidor Subversion, no es algo que sucede muymenudo. Para una descripcin detallada de la importacin, consulte la seccin "svn import" ms adelante en este captulo.

Revisiones: Nmeros, Palabras Clave, y Fechas, por Dios!


Antes de continuar, usted debe saber un poco acerca de cmo identificar una revisin particular en su repositorio. Como aprendi enla seccin "Revisiones", Una revisin es una "instantnea" del repositorio en un momento particular en el tiempo. A medida que contine a comprometerse y hacer crecer su repositorio, usted necesita un mecanismo para identificar estas instantneas. Puede especificar estas revisiones usando - revision (-r) junto con la revisin que desee (svn -Revisin REV) o puede especificar un rango separando dos revisiones con dos puntos (svn - revision REV1: REV2). Y Subversion le permite referirse a estas revisiones por nmero, palabra clave o fecha.

Nmeros de revisin
Cuando se crea un nuevo repositorio Subversion, comienza su vida en la revisin cero y cada envo sucesivo incrementa el nmero de revisin por uno. Despus de que su compromiso se completa, el cliente Subversion que in-forma del nuevo nmero de revisin: $ Svn commit - mensaje "Se ha corregido el nmero de lonchas de queso." Envo sandwich.txt Transmisin de datos de archivo. Comprometidos con la revisin 3. Si en algn momento en el futuro que desea hacer referencia a esa revisin (veremos cmo y por qu podramos querer

20 Guided Tour hacerlo ms adelante en este captulo), puede hacer referencia a ella como "3".

Revisin Palabras clave


El cliente de Subversion entiende una serie de palabras clave de revisin. Estas palabras clave se pueden utilizar en lugar de argumentos enteros a la opcin - revision, y son resueltos en nmeros especficos de

revisin por Subversion:

Not a
Cada directorio en su copia de trabajo contiene un subdirectorio administrativo llamado. Svn. Por cada archivo en un directorio, Subversion mantiene una copia de cada archivo en el rea administrativa. Esta copia es una (sin expansin de palabras clave, ninguna traduccin de final de lnea, nada de nada) copia no modificada del archivo tal como exista en la ltima revisin (llamada la revisin "BASE") que usted actualiz a su copia de trabajo. Nos referimos a este archivo como la copia original o la versin de texto de la base de su archivo, y siempre es una copia byte por byte exacta del fichero tal como existe en el repositorio. CABEZA La ltima revisin (o "ms joven") en el repositorio. BASE El nmero de revisin de un elemento en una copia de trabajo. Si el artculo se ha modificado localmente, la versin "base" se refiere a la forma en que el elemento aparece sin esas modificaciones locales. COMPROMETIDOS La revisin ms reciente antes de, o igual a, la base, en el que un elemento cambi. ANTERIOR La revisin inmediatamente antes de la ltima revisin en la cual un elemento cambi. (Tcnicamente, COMPROMETIDO - 1.)

Nota
PREV, BASE, y COMMITTEDpuede ser utilizado para referirse a las trayectorias locales, pero no a las direcciones URL. Estos son algunos ejemplos de palabras clave de revisin en accin. No se preocupe si los comandos no tienen sentido todava, vamos a estar explicando estos comandos a medida que avanzamos a travs del captulo: $ Svn diff - revision ANTERIOR: foo.c COMPROMETIDO # Indica el ltimo cambio comprometido a foo.c $ Svn log - CABEZA revisin # Muestra mensaje de registro para el ltimo repositorio de cometer $ Svn diff - CABEZA revisin # Compara el archivo de trabajo (con los cambios locales) a la ltima versin # En el repositorio $ Svn diff - revisin BASE: foo.c CABEZA # Compara su foo.c "virgen" (sin cambios locales) con el # Versin ms reciente en el repositorio $ Svn log - BASE revisin: CABEZA # Muestra todos los registros de confirmacin desde la ltima actualizacin

21 Guided Tour $ Svn update - revision ANTERIOR foo.c # Rebobina el ltimo cambio de foo.c # (Se reduce revisin de trabajo foo.c 's) Estas palabras clave le permiten realizar muchas operaciones comunes (y tiles) sin tener que buscar nmeros especficos de revisin o recordar la revisin exacta de su copia de trabajo.

Fechas de la Revisin
Dondequiera que usted especifique un nmero de revisin o palabra clave de revisin, tambin puede especificar una fecha dentro de llaves "{}". Incluso se puede acceder a una serie de cambios en el repositorio usando revi-siones fechas y juntos! Estos son ejemplos de los formatos de fecha que admite Subversion. Recuerde usar comillas alrededor de cualquier fecha que contenga espacios. $ Svn checkout - revision {2002-02-17} $ Svn checkout - revision {15:30} $ Svn checkout - revision {15:30:00.200000} $ Svn checkout - revision {"2002-02-17 15:30"} $ Svn checkout - revision {"2002-02-17 15:30 0230"} $ Svn checkout - revision {2002-02-17T15: 30} $ Svn checkout - revision {2002-02-17T15: 30Z} $ Svn checkout - revision {2002-02-17T15 :30-04: 00} $ Svn checkout - revision {20020217T1530} $ Svn checkout - revision {20020217T1530Z} $ Svn checkout - revision {20020217T1530-0500} . . . Cuando se especifica una fecha como revisin, Subversion encuentra la revisin ms reciente del repositorio a partir de esa fecha: $ Svn log - revision {2002-11-28} -------------------------------------------------- --------------------r12 | ira | 2002-11-27 12:31:51 -0600 (mircoles, 27 de noviembre de 2002) | 6 lneas . . .

Subversion antes?

es

un

da

Si se especifica una fecha simple como revisin sin especificar una hora del da (por ejemplo 2002-11-27), usted puede pensar que Subversion debera darle la ltima revisin que tuvo lugar el 27 de noviembre. En cambio, usted recibir una revisin del 26, o incluso antes. Recuerde que Subversion encontrar la revisin ms reciente del repositorio a la fecha que usted da. Si usted le da una fecha sin una marca de tiempo, como 2002-11-27, Subversion asume la hora como 00:00:00, as que busca la revisin ms reciente no devolver nada del da de la 27. Si desea incluir el da 27 en su bsqueda, puede especificar el da 27 con la hora ({"2002-11-27 23:59"}), o simplemente especificar el da siguiente ({2002-11-28}) . Tambin puede utilizar un rango de fechas. Subversion encontrar todas las revisiones entre ambas fechas inclusive: 22 Guided Tour $ Svn log - revision {2002-11-20}: {2002-1129} . . . Como sealamos, tambin puede mezclar fechas y revisiones: $ Svn 4040 log revision {2002-11-20}:

Los usuarios deben ser conscientes de una sutileza que puede convertirse en un obstculo al tratar con fechas en Subversion. Dado que la fecha y hora de la revisin se almacena como una propiedad de la revisin-una versionar, modificable timestamps propiedad de revisin se pueden cambiar para representar una falsificacin completa de la verdadera cronologa, o incluso eliminarse por completo. Esto causar estragos en la conversin de la fecha a la revisin interna que Subversion realiza.

Pedido inicial
La mayora de las veces, usted empezar a usar un repositorio Subversion haciendo un checkout de su proyecto. Comprobacin de un repositorio crea una copia del mismo en su mquina local. Esta copia contiene la cabeza (ltima revisin) del repositorio Subversion que especifique en la lnea de comandos: $ Svn checkout http://svn.collab.net/repos/svn/trunk Un tronco / subversion.dsw Un tronco / svn_check.dsp A trunk / Committers

Un tronco / configure.in A trunk / IDEAS . . . Dejamos la revisin 2499.

Qu hay en un nombre? Subversion se esfuerza por no limitar el tipo de datos que se pueden colocar bajo control de versiones. El contenido de los archivos y valores de propiedad se almacenan y transmiten como datos binarios, y la"svn: mime-type" le dice cmo dar Subversion un indicio de que las operaciones de "textuales" no tienen sentido para un archivo particular. Hay unos pocos lugares, sin embargo, cuando Subversion pone restricciones a la informacin que almacena. Subversion maneja internamente ciertos bits de datos, por ejemplo, nombres de propiedades, rutas de acceso y registro de mensajes, como UTF-8 Unicode codificada. Esto no quiere decir que todas sus interacciones con Subversion deben involucrar a UTF-8, sin embargo. Como regla general, los clientes de Subversion con gracia y transparente manejar conversiones entre UTF-8 y el sistema de codificacin en uso en el equipo, si tal conversin significativa se puede hacer (que es el caso para la mayora de las codificaciones comunes en uso hoy en da). Adems, los nombres de ruta se utilizan como valores de atributos XML en intercambios WebDAV, as como en algunos de los archivos de limpieza de subversin. Esto significa que los nombres de ruta slo puede contener caracteres legales XML (1.0). Subversion tambin prohbe TAB, CR, LF y caracteres en los nombres de ruta, por lo que no se rompen en diffs, o en elsalida de comandos, como svn log o svn status. Si bien puede parecer mucho para recordar, en la prctica, estas limitaciones son raramente un problema. Mientras que los valores de localizacin son compatibles con UTF-8, y que no utilizan caracteres de control en los nombres de ruta, que no debera tener problemas para comunicarse con Subversion. El cliente de lnea de comando agrega un poco ms de ayuda, que se escapar automticamente los caracteres camino legal segn sea necesario en las direcciones URL de escribir para crear versiones "jurdicamente correctas" para uso interno. Los usuarios experimentados de Subversion tambin han desarrollado un conjunto de convenciones de mejores prcticas para el tendido de vas en

23 Guided Tour

el repositorio. Si bien estos no son requisitos estrictos, como la sintaxis descrita anteriormente, que ayudan a organizar las tareas que se realizan con frecuencia. La parte / trunk de URLs que encontrars en este libro es uno de ellos con- intervenciones; hablaremos mucho ms sobre l y las correspondientes recomendaciones en el Captulo 4, Crear ramas y fusionarlas. Aunque el ejemplo anterior comprueba el directorio trunk, usted puede comprobar con la misma facilidad a cualquier profundidad subdirectorio de un repositorio especificando el subdirectorio en la URL de descarga: $ Svn checkout http://svn.collab.net/repos/svn/trunk/doc/book/tools A tools / readme-dblite.html A tools / fostylesheet.xsl A tools / svnbook.el A tools / dtd A tools / dtd / dblite.dtd . . . Dejamos la revisin 2499. Dado que Subversion usa un modelo de "copiar-modificar-mezclar" en lugar de "bloqueo-modificacindesbloqueo" (vase el captulo2, Conceptos Bsicos), Que ya est en condiciones de empezar a hacer cambios en los archivos y directorios en su copia de trabajo. Su copia de trabajo es igual que cualquier otra coleccin de ficheros y directorios en su sistema. Usted puede editar y cambiar ellos, moverlos, usted puede incluso borrar la copia de trabajo y olvidarse de l.

Not a
Mientras que su copia de trabajo es "como cualquier otra coleccin de ficheros y directorios en su sistema", es necesario saber a Subversion si va a reacomodar cualquier cosa dentro de su copia de trabajo. Si desea copiar o mover un elemento en una copia de trabajo, debe usar svn copy o svn move en vez del movimiento comandos de copiar y recibida por su sistema op-rio. Hablaremos ms sobre ellos ms adelante en este captulo. A menos que ests dispuesto a cometer un nuevo archivo o directorio, o cambios en las ya existentes, no hay necesidad de pieles-ther notificar al servidor de Subversion que usted ha hecho nada.

Qu pasa con el directorio.

Svn? Cada directorio en una copia de trabajo contiene un rea administrativa, un subdirectorio llamado. Svn. Por lo general, los comandos de lista dir-ectory no muestran este subdirectorio, pero es sin embargo un directorio importante. Hagas lo que hagas, no elimine o cambie nada en el rea administrativa! Subversion depende de ella para administrar su copia de trabajo. Mientras que usted puede revisar una copia de trabajo con la URL del repositorio como nico argumento, tambin puede especificar un directorio despus de su URL del repositorio. Esto coloca a su copia de trabajo en el nuevo directorio que usted nombra. Por ejemplo: $ Svn checkout http://svn.collab.net/repos/svn/trunk subv A subv / subversion.dsw A subv / svn_check.dsp A subv / Committers A subv / configure.in A subv / IDEAS . . . Dejamos la revisin 2499. 24 Guided Tour Esto pondr su copia de trabajo en un directorio llamado subv en vez de un directorio llamado tronco como lo hicimos anteriormente.

Ciclo Bsico de Trabajo


Subversion tiene numerosas caractersticas, opciones, campanas y silbidos, pero en el da a da, lo ms probable es que usted va a utilizar slo unos pocos de ellos. En esta seccin vamos a correr a travs de las cosas ms comunes que podra encontrarse haciendo con Subversion en el transcurso de un da de trabajo. El ciclo de trabajo tpico es el siguiente: Actualice su copia de trabajo svn update los

Realice cambios

svn add svn delete svn copy svn move

Examine sus cambios svn status svn diff

svn revert

Combinar los cambios de otros en su copia de trabajo svn update svn resolved los

Confirmar cambios svn commit

Actualice su copia de trabajo


Cuando se trabaja en un proyecto con un equipo, usted querr actualizar su copia de trabajo para recibir los cambios realizados desde su ltima actualizacin por otros desarrolladores en el proyecto. Use svn update para actualizar su copia de trabajo en sintona con la ltima revisin en el repositorio. $ Svn update U foo.c U bar.c Se ha actualizado a la revisin 2. 25 Guided Tour En este caso, alguien registr modificaciones a foo.c y bar.c desde la ltima vez que actualiz, y Subversion ha actualizado su copia de trabajo para incluir esos cambios. Vamos a examinar la salida de svn update un poco ms. Cuando el servidor enva cambios a su copia de trabajo, un cdigo de letras se muestra al lado de cada artculo para hacerle saber qu acciones realiz Subversion para actualizar su copia de trabajo al da: U foo El fichero foo fue actualizado (los cambios recibidos del servidor). A foo El fichero o directorio foo fue aadido a su copia de trabajo. D foo El fichero o directorio foo fue borrado de su copia de trabajo. R foo El fichero o directorio foo fue reemplazado en su copia de trabajo, esto es, foo fue borrado, y se aadi un nuevo elemento con el mismo nombre. Si bien pueden tener el mismo nombre, el repositorio los considera objetos distintos con historiales distintos. T foo El fichero foo recibi nuevos cambios del repositorio, pero su copia local del archivo tenido sus modificaciones. O los cambios no se cruzan, o los cambios eran exactamente iguales que sus modificaciones locales, por lo que Subversion ha fusionado con xito los cambios del repositorio en el archivo sin ningn problema. C foo El fichero foo recibi cambios conflictivos desde el servidor. Los cambios del servidor se solapan directamente sus propios cambios en el archivo. No hay necesidad de entrar en pnico, sin embargo. Esta superposicin necesita ser resuelta por un humano (usted); discutimos esta situacin ms adelante en este captulo.

Hacer cambios a su copia de trabajo


Ahora usted puede ir a trabajar y hacer cambios en su copia de trabajo. Por lo general es ms conveniente para de-cide en un cambio particular (o conjunto de cambios) para hacer, como por ejemplo escribir una nueva caracterstica, corregir un error, etc Los comandos de Subversion que va a utilizar aqu son svn add, svn delete, svn copiar y svn move. Sin embargo, si usted est simplemente corrigiendo los archivos que estn ya en Subversion, puede que no necesite utilizar cualquiera de estos comandos hasta que enve. Los cambios que puede realizar en su copia de trabajo: Cambios de archivos Este es el tipo ms simple de cambio. Usted no tiene que decirle a Subversion que tiene la intencin de cambiar un archivo, simplemente haga los cambios. Subversion ser capaz de detectar automticamente qu archivos han cambiado. Cambios en el rbol Usted puede pedir a Subversion a los archivos "marca" y directorios para el borrado planificado, la adicin, la copia o movimiento. Si bien estos cambios pueden ocurrir inmediatamente en su copia de trabajo local, ninguna adicin o borrado suceder en el repositorio hasta que enve los cambios. Para hacer cambios en los archivos, utilice su editor de textos, procesador de textos, programa de grficos, o cualquier herramienta que usara normalmente. Subversion maneja ficheros binarios tan fcilmente como maneja archivos de texto-y tan efi-cientemente tambin. 26 Guided Tour He aqu un resumen de los cuatro subcomandos de Subversion que usted utiliza con ms frecuencia para hacer cambios en el rbol (cubriremos svn import y svn mkdir despus).

Adverte ncia
Mientras que usted puede editar sus archivos con cualquier herramienta que te gusta, no se debe cambiar la estructura de su copia de trabajo sin dejar que Subversion lo sepa lo que ests haciendo. Utilice la copia svn, svn delete, y svn move comandos para cambiar la estructura de su copia de trabajo, y usar el comando svn add para colocar nuevos archivos y directorios bajo control de versiones. svn add foo Horario archivo, directorio o enlace simblico foo que se aaden al repositorio. La prxima vez que cometes, foo se convertir en hijo de su directorio padre. Tenga en cuenta que si foo es un directorio, todo por debajo de foo ser sched-ULed por adicin. Si solo quiere aadir el propio foo, pase la opcin - (-N) Interruptor no recursiva. svn delete foo Horario archivo, directorio o enlace simblico foo sean eliminados del repositorio. Si foo es un archivo o enlace, es inmediatamente eliminado de su copia de trabajo. Si foo es un directorio, no se elimina, pero Subversion lo programa para su eliminacin. Cuando enve sus cambios, foo ser borrado de su copia de trabajo y el repositorio. 1 svn copy foo bar Cree un nuevo elemento de la barra como un duplicado de foo. bar es automticamente programado para la adicin. Cuando bar es aadido al repositorio en el siguiente commit, se registra su historia de copia (como provenientes originalmente de foo). svn copy no crea directorios intermedios.

svn move foo bar Este comando es exactamente lo mismo que ejecutar svn copy foo bar; svn delete foo. Es decir, el bar est programado para la adicin como una copia de foo, y se programa foo para la eliminacin. svn move no crea intermedia director-s.

Cambiando el repositorio sin una copia de trabajo Al principio de este captulo, dijimos que tiene que enviar cualquier cambio que realice para que el repositorio refleje estos cambios. Eso no es del todo cierto-hay algunos casos de uso que de inmediato los cambios del rbol al repositorio. Esto slo ocurre cuando un subcomando est operando directamente sobre una URL, en lugar de en una ruta a una copia. En particular, los usos especficos de svn mkdir, svn copy, svn move, y svn delete pueden trabajar con URLs. Las operaciones de URL se comportan de esta manera porque los comandos que operan en una copia de trabajo pueden usar la copia de tra-bajo como una especie de "zona de espera" para configurar sus cambios antes de enviarlos al repositorio. Com-comandos que operan sobre URLs no tienen este lujo, as cuando usted opera directamente sobre una URL, cualquiera de las acciones anteriores representa un envo inmediato.

Examine sus cambios


Una vez que haya terminado de realizar cambios, es necesario confirmarlos en el repositorio, pero antes de hacerlo, por lo general es una buena idea echar un vistazo a exactamente lo que ha cambiado. Mediante el examen de los cambios an-tes en que se cometi, se puede hacer un mensaje ms preciso. Tambin puede descubrir que ha cambiado inadvertidamente un fichero, y esto le da la posibilidad de invertir esos cambios antes de comprometerse. Addi-

1De

Por supuesto, nada es totalmente eliminado del repositorio-slo desde elCABEZAdel repositorio. Usted puede volver cualquier cosa que borr descargando (o actualizando su copia de trabajo) una revisin antes de aquel en el que lo borr.

27 Guided Tour nalmente, esta es una buena oportunidad para revisar y escudriar cambios antes de publicarlos. Usted puede ver exactamente qu cambios ha hecho usando svn status, svn diff, y svn revert. Por lo general, utilizar los primeros dos comandos para descubrir qu ficheros han cambiado en su copia de trabajo y, a continuacin, tal vez el tercero para invertir algunos (o todos) de estos cambios. Subversion ha sido optimizado para ayudarle con esta tarea, y es capaz de hacer muchas cosas sin comuni-carse con el repositorio. En particular, su copia de trabajo contiene un cach "prstina" secreta copia de cada fichero de versin controlado dentro del rea. Svn. Debido a esto, Subversion puede rpidamente mostrarle cmo han cambiado sus archivos de trabajo, o incluso permitirle deshacer sus cambios sin contactar con el repositorio.

svn status

Es probable que utilice el comando svn status ms que cualquier otro comando de Subversion.

Usuarios de CVS: Hold That Update! Probablemente est acostumbrado a usar cvs update para ver qu cambios que ha realizado en su copia de trabajo. svn status le dar toda la informacin que necesita sobre qu ha cambiado en su copia de trabajo, sin ac-samiento del repositorio o incorporando nuevos cambios potenciales publicados por otros usuarios. En Subversion, update hace justo eso-actualiza su copia de trabajo con los cambios comprometidos con el repositorio desde la ltima vez que actualiz su copia de trabajo. Vas a tener que romper el hbito de usar el comando actualizar para ver qu modificaciones locales que ha realizado. Si ejecuta svn status en la parte superior de su copia de trabajo sin argumentos, detectar todos los cambios en los archivos y el rbol que ha realizado. A continuacin se presentan ejemplos de los diferentes cdigos de estado que svn status puede devolver. (Tenga en cuenta que el siguiente texto # no es impreso realmente por svn status.) L some_dir # svn dej un bloqueo en la zona. Svn de some_dir M bar.c # del contenido de bar.c tiene modificaciones locales M baz.c # baz.c tiene propiedad, pero sin modificaciones de contenido X 3rd_party # dir es parte de una definicin externa ? foo.o # svn no logra foo.o ! some_dir # svn logra esto, pero es falta o est incompleta ~ Qux # versionado como archivo / dir / link, pero el tipo me ha cambiado. Screenrc # svn no logra esto, y est previsto que ignorarlo A + moved_dir # aadi con la historia de su procedencia M + moved_dir / README # agregado de historia y tiene modificaciones locales D stuff / fish.c archivo # est programado para su eliminacin A # fichero stuff / loot / bloo.h est programado para la adicin Cstuff / loot / lump.c archivo # tiene conflictos textuales de un material C / loot / glub.c update # archivo tiene conflictos de propiedad de una actualizacin R xyz.c archivo # est programada para ser reemplazada Sstuff / graznido # archivo o directorio ha sido cambiado a una rama K dog.jpg # archivo est bloqueado localmente; lock-token actual O cat.jpg archivo # est bloqueado en el repositorio por otro usuario B bird.jpg # archivo est bloqueado localmente, pero cerradura se ha roto T fish.jpg # archivo est bloqueado localmente, pero bloqueo ha sido robado En este formato de salida de svn status imprime cinco columnas de caracteres, seguidos de varios espacios en blanco carac-teres, seguido de un nombre de archivo o directorio. La primera columna indica el estado de un archivo o directorio y / o su contenido. Los cdigos impresos aqu son:

28 Guided Tour Un

elemen to El archivo, directorio o file_or_dir se ha programado para la adicin en el repositorio. C art culo El tem archivo est en un estado de conflicto. Esto es, los cambios recibidos del servidor durante una actualizacin se solapan con cambios locales que usted tiene en su copia de trabajo. Debe resolver este conflicto antes de confirmar los cambios en el repositorio. D art culo El archivo, directorio o file_or_dir ha sido marcada para su borrado en el repositorio. Punto M El contenido del elemento de archivo se han modificado. Punto R El archivo, directorio o file_or_dir est programado para sustituir el punto en el repositorio. Esto significa que el objeto es eliminado en primer lugar, a continuacin, se aade otro objeto del mismo nombre, todo dentro de una nica revisin. Artcu lo X El elemento de directorio dir est sin versionar, pero est relacionado con una definicin externa de Subversion. Para obtener ms informacin sobre definiciones externas, vea la seccin "Repositorios externos". ? artcu lo El archivo, directorio o file_or_dir no est bajo control de versiones. Puede silenciar la marca de pregunta pasando la opcin - quiet (-q) a svn status, o estableciendo la propiedad svn: ignore en la matriz directorio. Para obtener ms informacin sobre los archivos ignorados, vea la seccin "svn: ignore". ! artcu lo El archivo, directorio o file_or_dir est bajo control de versiones pero falta o est de alguna manera incompleta. El objeto puede faltar si se ha borrado usando un comando ajeno a Subversion. En el caso de un directorio, puede ser in-completa si ha interrumpido una obtencin o actualizacin. Un rpido svn update repondr el archivo o directateora del repositorio, o svn revert file restaurar un archivo que falta. ~ Tema El archivo, directorio o file_or_dir est en el repositorio como un tipo de objeto, pero lo que es realmente en su copia de trabajo es otro tipo. Por ejemplo, Subversion pudo tener un fichero en el repositorio, pero eliminado el archivo y cre un directorio en su lugar, sin necesidad de usar el comando svn add o svn delete. Me artcu lo El archivo, directorio o file_or_dir no est bajo control de versiones y Subversion est configurado para ignorarlo durante svn add, svn import y svn status operaciones. Para obtener ms informacin sobre los archivos ignorados, vea laseccin "svn: ignore". Tenga en cuenta que este smbolo slo aparece si se pasa la opcin - noignore opcin a svn status, de lo contrario el archivo se pasa por alto y no aparece en la lista! La segunda columna indica el estado de un archivo o las propiedades del directorio (ver elseccin llamada "Propiedades" para ms informacin sobre las propiedades). Si aparece una M en la segunda columna, a continuacin, las propiedades se han modificado, de otra manera un espacio en blanco ser impreso. La tercera columna solo mostrar un espacio en blanco o una L la cual significa que Subversion ha

bloqueado el directo-ria de. rea de trabajo svn. Usted ver una L si ejecuta svn status en un directorio donde un svn commit est en progreso-quizs cuando est editando el mensaje de registro. Si Subversion no se est ejecutando, entonces Subversion presumiblemente fue interrumpido y el bloqueo necesita ser eliminado ejecutando svn cleanup (ms sobre esto ms adelante en este captulo). La cuarta columna solo mostrar un espacio en blanco o un + que significa que el archivo o directorio est programado para ser aadido o modificado con historial adicional adjunto. Esto suele ocurrir cuando se mueven o svn svn copiar un archivo o directorio. Si usted ve A +, esto significa que el objeto est programado para la adicin-con-historial.

29 Guided Tour Podra ser un archivo, o la raz de un directorio copiado. + Significa que el objeto es parte de un subrbol programado para la adicin-con-historial, es decir, unos padres consigui copia, y se acaba de venir adelante para el paseo. M + significa que el artculo es parte de un subrbol programado para la adicin-con-historial, y tiene modificaciones locales. Cuando los cambios, primero el padre ser aadido-con-historial (copiado), lo que significa que este fichero existir automtica-mente en la copia. Entonces las modificaciones locales se cargarn en la copia. La quinta columna solo mostrar un espacio en blanco o una S. Esto significa que el archivo o directorio ha sido movido de la ruta del resto de la copia de trabajo (usando svn switch) a una rama. La sexta columna muestra informacin acerca de los bloqueos, que se explica con ms detalle en la seccinllamado "Bloqueo". (Estas no son las mismas cerraduras como las indicadas por una L en la tercera columna,. Ver tres significados de "lock") Si pasa una ruta especfica a svn status, te da informacin sobre dicho elemento solo: $ Svn status stuff / fish.c D stuff / fish.c svn statusTambin tiene una opcin - verbose (-v), que le mostrar el estado de cada elemento en su copia de trabajo, incluso si no ha cambiado: $ svn estado - Verbose M 44 44 M 44 44 44 D 44 44 L 0 a 44 23 30 20 18 35 19 21 ? 36 salida salida Enrique ira Enrique ira salida ? Enrique README INSTALAR bar.c cosas cosas / trout.c cosas / fish.c cosa / cosas cosa / cosas / bloo.h cosa / cosas / gloo.c

Esta es la "forma larga" de salida de svn status. La primera columna sigue siendo el mismo, pero la segunda columna muestra la revisin de trabajo del artculo. Las tercera y cuarta columnas muestran la revisin en la que el elemento modificado y quin lo cambi. Ninguna de las invocaciones anteriores a svn status contactaban con el repositorio, trabajan solo localmente comparando los metadatos en el directorio. Svn con la copia de trabajo. Por ltimo, est la opcin - show-updates (u) switch, que contacta con el repositorio y aade informacin acerca de las cosas que estn fuera de fecha: M M D * 44 23 salida README 20 Enrique bar.c * 44 35 Enrique cosas / 44 19 ira trout.c cosas / fish.c $ Svn status - show-updates - verbose 44

A 0? ? cosa / cosas / Estado bloo.h contra la revisin: 46 Observe los dos asteriscos: si usted ejecutara svn update en este punto, usted recibira cambios a README y trout.c. Esto le dice cierta informacin muy til-usted necesidad de actualizar y coger los cambios del servidor para README antes de comprometerse, o el repositorio rechazar su envo por estar fuera de fecha. (Ms sobre este tema ms adelante.)

svn diff
30 Guided Tour Otra manera de examinar sus cambios es con el comando svn diff. Puede descubrir exactamente cmo ha modificado cosas ejecutando svn diff sin argumentos, el cual imprime los cambios en los archivos en formato diff unificado: 2 $ Svn diff Index: bar.c ================================================== ================= --- Bar.c (revisin 3) + + + Bar.c (copia de trabajo) @ @ -1,7 +1,12 @ @ + # Include <sys/types.h> + # Include <sys/stat.h> + # Include <unistd.h> + + # Include <stdio.h> int main (void) { - Printf ("Sesenta y cuatro rebanadas de americano ... \ n"); + Printf ("Sesenta y cinco rebanadas de queso americano ... \ n"); return 0; } queso

ndice: README ================================================== ================= --- README (revisin 3) + + + README (copia de trabajo) @ @ -193,3 +193,4 @ @ + Nota mental: recoger ropa. ndice: las cosas / fish.c ================================================== ================= --- Stuff / fish.c (revisin 1) + + + Material / fish.c (copia de trabajo) -Bienvenido al archivo conocido como "pez". -Informacin sobre los peces estar aqu pronto.

ndice: las cosas / cosas / bloo.h ================================================== ================= --- Stuff / cosas / bloo.h (revision 8) + + + Stuff / cosas / bloo.h (copia de trabajo) + Aqu est un nuevo archivo para describir + Cosas de bloo. El comando svn diff produce esta salida comparando sus ficheros de trabajo contra las copias en cach "vrgenes" en el rea. Svn. Archivos programados para la adicin se visualizan como texto-aadido, y los ficheros programados para su eliminacin son visualizados como texto eliminado. La salida se muestra en formato diff unificado. Esto es, las lineas quitadas son empezadas con un - y las lneas aadido estn precedidos con un signo +. svn diff tambin imprime nombre del archivo y la informacin til para contrarrestar el programa de revisin, por lo que puede generar "parches" redireccionando la salida del diff a un fichero: $ Svn diff> fichero de parche Podra, por ejemplo, enviar el archivo de parche a otro desarrollador para la revisin o prueba antes de enviarlo.

2Subversion

utiliza el motor diferencial interno, que produce formato unificado diff, por defecto. Si usted desea una salida de diff en un formato diferente, especifique un programa diff externo mediante- Diff-cmdy aprobar las banderas que le gustara que el uso de laExtensionescambiar. Por ejemplo, para ver las diferencias locales en el archivofoo.cen el formato de salida de contexto, sin tener en cuenta los cambios de espacio en blanco, puede ejecutar svn diff - diff-cmd / usr / bin / diff - Extensiones '- bc' foo.c.

31 Guided Tour

svn revert
Ahora supongamos que vea la salida del diff anterior, y se da cuenta de que los cambios a README son un error; quizs accidentalmente tecle ese texto en el fichero equivocado en su editor. Esta es una oportunidad perfecta para usar svn revert. $ Svn revert README Revertidas "README" Subversion invierte el fichero a su estado pre-modificado al sobrescribir con la cach copia "prstina" de la zona. Svn. Pero tambin en cuenta que svn revert puede deshacer cualquier operacin programada-por ejemplo, puede decidir que no desea aadir un nuevo archivo despus de todo: $ Svn status cualquiera ? foo $ Svn add foo foo A $ Svn revert foo Revertidas 'foo' $ Svn status cualquiera ? foo

Not a
svn revertARTCULOtiene exactamente el mismo efecto que la eliminacin de artculo de su copia de trabajo y luego ejecutar svn update-r BASE ITEM. Sin embargo, si usted est volviendo un archivo, svn re-vert tiene una diferencia muy notable-no tiene que comunicarse con el reposit-ria para restaurar el archivo. O tal vez que haya extrado por error un archivo de control de versiones: $ Svn status README README $ Svn delete README D README $ Svn revert README Revertidas "README" $ Svn status README README

Mira mam! Sin red! Los tres de estos comandos (svn status, svn diff, y svn revert) pueden utilizarse sin ningn acceso a la red. Esto hace que sea fcil de administrar sus cambios-en-progreso cuando ests en un lugar sin una conexin de red, tales como viajar en un avin, en un tren de cercanas o la piratera en la playa. 32 Guided Tour

Subversion hace esto manteniendo almacenes privados de versiones prstinas de cada fichero versionado dentro de las reas administrativas. Svn. Esto permite a Subversion reportar-y revertir-modificaciones locales a esos ficheros sin acceso a la red. Este almacn (llamado el "texto-base") tambin permite a Subversion mandar las modifica-ciones locales del usuario durante un envo al servidor como un delta comprimido (o "diferencia") contra la versin prstina. Hav-ing este almacn es un beneficio enorme, incluso si usted tiene una conexin de red rpida, es mucho ms rpido para enviar slo los cambios de un archivo en lugar de todo el archivo al servidor. A primera vista, esto podra no parecer tan importante, pero imagine la repercusin si usted intenta confirmar un cambio de una lnea a un archivo de 400 MB y tiene que enviar el fichero entero al

servidor!

Resolver conflictos (fusionando los cambios de otros)


Ya hemos visto cmo svn status-u puede predecir conflictos. Suponga que ejecuta svn update y ocurren algunas cosas intere-sante: $ Svn update U INSTALL T README C bar.c Se ha actualizado a la revisin 46. Los cdigos U y G no son causa de preocupacin; esos archivos absorbieron limpiamente los cambios del repositorio. Los ficheros marcados con una U no contienen cambios locales, pero se han actualizado con los cambios del repositorio. El G significa fusionada, lo que significa que el fichero tena para comenzar cambios locales con el, pero los cambios que se avecinan en el repositorio no coincidir con los cambios locales. Pero la C representa conflicto. Esto significa que los cambios del servidor se solapan con los suyos, y ahora tiene que elegir manualmente entre ellos. Siempre que se produce un conflicto, hay tres cosas ocurren tpicamente para ayudarle a notar y resolver ese con-flicto: Subversion imprime una C durante la actualizacin, y recuerda que el archivo est en un estado de conflicto. Si Subversion considera el archivo a ser de un tipo fusionarse, coloca conflicto cuerdas-marcadores especiales de texto que delimitan los "lados" del conflicto-en el fichero para demostrar visualmente las reas solapadas. (Subversion utiliza la propiedad svn: mime-type propiedad para decidir si un archivo es capaz de contextual, lnea base fusin. Vea la seccin "svn: mime-type" para obtener ms informacin.) Por cada fichero en conflicto, Subversion coloca hasta tres archivos no versionados extra en su copia de trabajo:

filename.mine Este es su fichero como existi en su copia de trabajo antes de que actualizara su copia de trabajo, es decir, sin marcas de conflicto. Este fichero tiene su ltimos cambios y nada ms. (Si Subversion considera que el archivo sea fusionables, entonces no se crea el archivo. Ma, ya que sera idntico al archivo de trabajo.) filename.rOLDREV Este es el fichero que era la revisin BASE antes de que actualizara su copia de trabajo. Es decir, el archivo que descarg antes de que hiciera su ltima edicin. filename.rNEWREV Este es el fichero que su cliente de Subversion acaba de recibir desde el servidor del que actualiz su copia de trabajo. Este archivo corresponde a la revisin HEAD del repositorio. 33 Guided Tour Aqu OLDREV es el nmero de revisin del fichero en su directorio. Svn y NEWREV es el nmero de revisin del HEAD del repositorio. Por ejemplo, Sally hace cambios en el archivo sandwich.txt en el repositorio. Harry acaba de cambiar el fichero en su copia de trabajo y comprobado in a Sally actualiza su copia de trabajo antes de enviarlo y recibe un conflicto:

$ Svn update C sandwich.txt Actualizado a revisin 2. $ Ls -1 sandwich.txt sandwich.txt.mine sandwich.txt.r1 sandwich.txt.r2 En este punto, Subversion no permitir que se comprometa el archivo sandwich.txt hasta eliminar los tres archivos tempor-arias. $ Svn commit - mensaje "Agregar un par de cosas ms" svn: Commit fall (detalles a continuacin): svn: Abortar commit: '/ home / salida / svn-trabajo permanece en conflicto Si obtiene un conflicto, tiene que hacer una de tres cosas: Fusionar el texto en conflicto "a mano" (examinando y editando las marcas de conflicto dentro del fichero). Copie uno de los archivos temporales en la parte superior de su archivo de trabajo. Ejecutar svn revert <filename> para eliminar todos sus cambios locales.

sandwich.txt'

Una vez que se haya resuelto el conflicto, necesita dejar que Subversion lo sepa ejecutando svn resolved. Esta re-mueve los tres ficheros temporales y Subversion ya no considera que el archivo est en un estado de conflicto.3 $ Svn sandwich.txt resuelto Resuelto estado de conflicto 'sandwich.txt' de

Fusionar conflictos a mano


Fusionar conflictos a mano puede ser bastante intimidante la primera vez que lo haga, pero con un poco de prctica, que puede llegar a ser tan fcil como caerse de una bicicleta. He aqu un ejemplo. Debido a una falta de comunicacin, usted y Sally, su colaboradora, editar el archivo sandwich.txt al mismo tiempo. Sally enva sus cambios, y al momento de actualizar su copia de tra-bajo, se obtiene un conflicto y vamos a tener que editar sandwich.txt para resolver los conflictos. En primer lugar, vamos a echar un vistazo al archivo:

3Usted

puede eliminar siempre los archivos temporales de ti mismo, pero realmente quieres hacer eso cuando Subversion puede hacer por usted? No lo creemos.

34 Guided Tour $ Cat sandwich.txt Top pedazo de pan mayonesa Lechuga Tomate Provolone <<<<<<<. Mina Salami Mortadella

Prosciutto ======= Sauerkraut Grilled Chicken >>>>>>>. R2 Creole Mustard Pieza inferior del pan Las cadenas de signos menos-que, signos de igual y mayor que las seales son marcas de conflicto, y no forman parte de los datos reales de conflicto. En general, usted quiere asegurarse de que las personas se retiran del archivo antes de su prximo compromiso. El texto entre las dos primeras marcas se compone de los cambios realizados en la zona en conflicto: <<<<<<<. Mina Salami Mortadella Prosciutto ======= El texto entre el segundo y tercer conjunto de marcas de conflicto es el texto de compromiso de Sally: ======= Sauerkraut Grilled Chicken >>>>>>>. R2 Por lo general, usted no desear borrar las marcas de conflicto y los cambios de Sally, ella va a ser awtotalmente sorprendido cuando llegue el sandwich y no es lo que quera. As que aqu es donde se levanta el telfono o caminar a travs de la oficina y le explica a Sally que no puede tomar sauerkraut de un italiano deli.4 Una vez que haya acordado en los cambios que el registro, editar el archivo y eliminar el marcas de conflicto. Top pedazo de pan mayonesa Lechuga Tomate Provolone Salami Mortadella Prosciutto Creole Mustard Pieza inferior del pan Ahora ejecute svn resolved, y ya est listo para enviar sus cambios:

4 Y si les preguntas por ella, que puede muy bien conducir fuera de la ciudad en un carril.

35 Guided Tour $ Svn sandwich.txt resuelto $ Svn commit-m "seguir adelante y utilizar mi sndwich, descartando Sally ediciones." Recuerde, si usted alguna vez est confuso mientras edita el fichero conflictivo, siempre puede consultar los tres ficheros que Subversion crea para usted en su copia de trabajo-incluyendo su fichero como estaba antes de actualizarse. Usted puede incluso utilizar una herramienta interactiva de fusin de terceros para examinar esos tres archivos.

Cmo copiar un fichero en su fichero de trabajo


Si obtiene un conflicto y decide que quiere rechazar sus cambios, simplemente usted puede copiar uno de los archivos temporales creados por Subversion sobre el fichero en su copia de trabajo:

$ Svn update C sandwich.txt Actualizado a revisin 2. $ Sndwich ls *. sandwich.txt sandwich.txt.mine sandwich.txt.r2 sandwich.txt.r1 $ Cp sandwich.txt.r2 sandwich.txt $ Svn sandwich.txt resuelto

Despejando: Usando svn revert


Si obtiene un conflicto, y al examinarlo decide que quiere rechazar sus cambios y empezar de nuevo sus ediciones, simplemente revertir los cambios: $ Svn revert sandwich.txt Revertidos 'sandwich.txt' $ Ls sndwich. * Sandwich.txt Tenga en cuenta que cuando usted invierte un fichero conflictivo, no tiene que ejecutar svn resolved. Ahora ya est listo para enviar sus cambios. Observe que svn resolved, al contrario que la mayora de los comandos que hemos tratado en este captulo, requiere un argumento. En cualquier caso, usted querr tener cuidado y solo ejecutar svn resolved cuando est seguro que ha arreglado el conflicto en su fichero-una vez que los archivos temporales se eliminan, Subversion le dejar enviar el fichero incluso si todava contiene conflicto marcadores.

Confirmar los cambios


Por fin! Su edicin est terminada, ha fusionado todos los cambios desde el servidor, y ya est listo para enviar sus cambios al repositorio. El comando svn commit enva todos sus cambios al repositorio. Cuando confirma un cambio, es necesario proporcionar un mensaje de registro, describiendo su cambio. Su mensaje de registro se adjuntar a la re-visin nueva que cree. Si su mensaje de registro es breve, puede querer proveerlo en la lnea de comandos mediante el - Mensaje(O-m) opcin: $ Svn commit - mensaje "Se ha corregido el nmero de lonchas de queso." Envo sandwich.txt Transmisin de datos de archivo. Comprometidos con la revisin 3. 36 Guided Tour Sin embargo, si ha estado componiendo su mensaje de registro mientras trabaja, es posible que desee decirle a Subversion que obtenga un mensaje de un fichero pasando el nombre del archivo con el parmetro - archivo: $ Svn commit - logmsg archivo Enviando sandwich.txt Transmisin de datos de archivo. Committed revision 4. Si usted no puede especificar las opciones - message o - file, entonces Subversion lanzar automticamente su editor favorito (consulte la seccin editor-cmd enla seccin "Config") Para componer un mensaje de registro.

Pu nta
Si usted est en su editor escribiendo un mensaje y decide que quiere cancelar su envo, usted puede quitar su editor sin guardar los cambios. Si ya ha guardado su mensaje de registro, simplemente borre el texto y guardarlo de nuevo. $ Svn commit Esperando Emacs Hecho ...

Entrar mensaje sin cambios o no se especifica a) bort, c) ontinuar, e) dit u n $ El repositorio no sabe ni le importa si sus cambios tienen algn sentido en su conjunto, sino que slo comprueba para asegurarse de que nadie haya cambiado cualquiera de los mismos ficheros que usted mientras usted no miraba. Si algn cuerpo ha hecho eso, el envo entero fallar con un mensaje que le informa de que uno o ms de los archivos est fuera de fecha: $ Svn commit - mensaje "Agregar otra regla" Envo rules.txt svn: Commit fall (detalles a continuacin): svn: Fuera de la fecha: 'rules.txt' en transaccin 'g'

la

En este punto, necesita ejecutar svn update, ocupndose con cualquier fusin o conflicto que resulte y procure enviarlo otra vez. Eso cubre el ciclo bsico de trabajo para usar Subversion. Hay muchas otras caractersticas en Subversion que puede utilizar para administrar su repositorio y copia de trabajo, pero se puede pasar fcilmente usando solo los comandos que hemos visto hasta ahora en este captulo.

Examinando el historial
Como mencionamos anteriormente, el repositorio es como una mquina del tiempo. Se mantiene un registro de todos los cambios que se hayan cometido, y le permite explorar este historial examinando versiones anteriores de archivos y director-IES, as como los metadatos que los acompaan. Con un nico comando de Subversion, puedes echar un vistazo al repositorio (o restaurar una copia de trabajo existente) exactamente como era en cualquier fecha o nmero de revisin en el pasado. Sin embargo, a veces solo desea mirar al pasado en vez de ir hacia el pasado. Hay varios comandos que pueden proporcionarle datos histricos del repositorio: 37 Guided Tour svn log Le muestra amplia informacin: mensajes de registro con informacin actualizada y autor adjunto a las revisiones, y las rutas que cambiaron en cada revisin. svn diff Le muestra los detalles especficos de cmo cambi un fichero en el tiempo.

svn cat Esto se utiliza para recuperar cualquier fichero tal como existi en un nmero de revisin particular y lo mostrar en la pantalla. svn list Muestra los archivos en un directorio para cualquier revisin dada.

svn log
Para encontrar informacin sobre la historia de un archivo o directorio, utilice el comando svn log. svn log le proporcionar un registro de quin hizo cambios a un archivo o directorio, en qu revisin cambi, la hora y la fecha de la revisin y, si se proporciona, el mensaje de registro que acompaaba al envo. $ Svn log -------------------------------------------------- --------------------r3 | salida | lunes, 15 de julio 2002 18:03:46 -0500 | 1 lnea Aadido incluir lneas y corregido # de lonchas de queso. -------------------------------------------------- --------------------r2 | harry | lunes, 15 de julio 2002 17:47:57 -0500 | 1 lnea Agregado main () mtodos. -------------------------------------------------- --------------------r1 | salida | lunes, 15 de julio 2002 17:40:08 -0500 | 1 lnea Importacin inicial ---------------------------------------------------

--------------------

Tenga en cuenta que los mensajes de registro son impresos en orden cronolgico inverso por defecto. Si usted desea ver un rango diferente de revisiones en un orden particular, o solo una nica revisin, pase la opcin - revision (-r): $ Svn log - 05:19 Revisin # muestra los registros del 5 al 19 en orden cronolgico $ Svn log-r 19:05 # muestra los registros del 5 al 19 en orden inverso $ Svn log-r 8 # muestra registro de revisin 8 Tambin puede examinar el historial de registro de un solo archivo o directorio. Por ejemplo: $ Svn log foo.c . . . $ Svn log http://foo.com/svn/trunk/code/foo.c . . . Se mostrarn mensajes de registro slo para esas revisiones en las que cambia el archivo de trabajo (o URL).

38 Guided Tour Si desea ms informacin acerca de un archivo o directorio, svn log tambin toma una opcin - verbose (-v). Porque Subversion le permite mover y copiar archivos y directorios, es importante ser capaz de seguir los cambios de ruta en el sistema de archivos, por lo que en modo detallado, svn log incluir una lista de rutas cambiado en una revisin en su salida: $ Svn log-r-8 v -------------------------------------------------- --------------------r8 | salida | 2002-07-14 08:15:29 -0500 | 1 Lnea de caminos cambiados: M / trunk / code / foo.c M / trunk / code / bar.h A / trunk / code / doc / README Frozzled el cabrestante subespacio. ----------------------------------------------------------------------

svn logtambin toma una opcin - quiet (-q), que suprime el cuerpo del mensaje de registro. Al combinarse con - verbose, se da slo a los nombres de los archivos modificados.

Por qu svn log me da una respuesta vaca? Despus de trabajar con Subversion un poco, la mayora de los usuarios tendrn algo como esto: $ Svn log-r 2 --------------------------------------------------$ --------------------

A primera vista, esto parece un error. Pero recuerde que mientras las revisiones son repositorio de ancho, svn log funciona sobre una ruta en el repositorio. Si no provee ninguna ruta, Subversion usa el directorio de trabajo actual como destino por defecto. Como resultado de ello, si usted est trabajando en un subdirectorio de su copia de trabajo y tratar de ver el registro de una revisin en la que se cambi ni ese directorio ni cualquiera de sus hijos, Subversion le mostrar un registro vaco. Si desea ver qu cambi en esa revisin, intente indicando svn log directamente en el ms alto del URL de su repositorio, como en svn log-r 2 http://svn.collab.net/repos/svn.

svn diff
Ya hemos visto svn diff antes-ste muestra las diferencias entre los archivos en formato diff unificado, sino que se utiliza para mostrar las modificaciones locales hechas a nuestra copia de trabajo antes de comprometerse con el repositorio. De hecho, resulta que hay tres usos distintos para svn diff: Examinar cambios locales Comparar su copia de trabajo al repositorio Comparar repositorio con repositorio

Examinando cambios locales


Como hemos visto, invocando svn diff sin argumentos comparar sus ficheros de trabajo de la cach 39 Guided Tour Copias "prstinas" en el rea de svn.: $ Svn diff Index: rules.txt ================================================== ================= --- Rules.txt (revisin 3) + + + Rules.txt (copia de trabajo) @ @ -1,4 +1,5 @ @ Sea amable con los dems Libertad = Responsabilidad Todo con moderacin -Mastica con la boca abierta + Masticar con la boca cerrada + Escuche cuando otros estn hablando $

Comparando copia de trabajo al repositorio


Si un solo - se pasa el nmero revision (-r), a continuacin, se compara su copia de trabajo a la revisin especificada en el repositorio. $ Svn diff - revision 3 ndice rules.txt: rules.txt ================================================== ================= --- Rules.txt (revisin 3) + + + Rules.txt (copia de trabajo) @ @ -1,4 +1,5 @ @ Sea amable con los dems Libertad = Responsabilidad Todo con moderacin -Mastica con la boca abierta + Masticar con la boca cerrada + Escuche cuando otros estn hablando $

Comparando repositorio al repositorio


Si se pasan dos nmeros de revisin, separados por dos puntos, a travs de - revision (-r), entonces los

dos revi-siones son directamente comparables. $ Svn diff - revision ndice rules.txt 02:03: rules.txt ================================================== ================= --- Rules.txt (revisin 2) + + + Rules.txt (revisin 3) @ @ -1,4 +1,4 @ @ Sea amable con los dems -Libertad = Helado de chocolate + Libertad = Responsabilidad Todo con moderacin masticar con la boca abierta $ No slo se puede usar svn diff para comparar los archivos en su copia de trabajo al repositorio, pero si usted proporciona un argumento URL, puede examinar las diferencias entre los elementos del repositorio sin ni siquiera tener una copia de trabajo. Esto es especialmente til si desea inspeccionar cambios en un archivo cuando usted no tiene una copia de trabajo en el equipo local:

40 Guided Tour $ Svn diff - revision 04:05 http://svn.redbean.com/repos/example/trunk/text/rules.t ... $

svn cat
Si desea examinar una versin anterior de un archivo y no necesariamente las diferencias entre dos archivos, puede usar svn cat: $ Svn cat - revision 2 rules.txt S amable con los dems Libertad = helado de chocolate Todo con moderacin Masticar con la boca abierta $ Tambin puede redirigir la salida directamente a un archivo: $ Svn cat - revision 2 rules.txt> rules.txt.v2 $ Probablemente te ests preguntando por qu no nos limitamos a usar svn update - revision para actualizar el archivo a la versin anterior. Hay algunas razones por las que preferimos usar svn cat. En primer lugar, es posible que desee para ver las diferencias entre dos revisiones de un fichero usando un programa diff externo (quizs uno grfico, o tal vez su archivo est en un formato tal que la salida de diff unificado es sin sentido). En este caso, tendr que hacerse con una copia de la revisin antigua, redirigirlo a un archivo y pasar este y el fichero en su copia de trabajo a su programa diff externo. A veces es ms fcil mirar una versin anterior de un archivo en su totalidad en lugar de slo las diferencias entre esta y otra revisin.

svn list
El comando svn list le muestra qu archivos estn en un directorio del repositorio sin tener que descargar los archivos en el equipo local: $ Svn list http://svn.collab.net/repos/svn

README sucursales / clientes / tags / trunk / Si desea un listado ms detallado, pase la opcin - verbose (-v) para obtener una salida como esta: $ Svn list - verbose http://svn.collab.net/repos/svn 2755 harry 1331 28 de julio 02:07 README 2773 salida 29 de julio ramas 15:07 / 2769 salida 29 de julio 12:07 a clientes / 2698 24 de julio etiquetas harry 18:07 /

41 Guided Tour 2785 salida 29 de julio 19:07 trunk / Las columnas le dicen la revisin en la que el archivo o directorio de la ltima modificacin, el usuario que lo modific, el tamao si se trata de un archivo, la fecha de la ltima modificacin, y el nombre del artculo.

Una palabra final sobre la Historia


Adems de todos los comandos anteriores, puede usar svn update y svn checkout con la-Revisioncambiar a tomar una copia de trabajo entera "back in time" 5: $ Svn checkout - Revisin # 1729 obtiene una copia de trabajo nueva en r1729 . . . $ Svn update - revision 1729 # Actualiza una copia de trabajo existente a r1729 . . .

Otros comandos tiles


Si bien no se utiliza con tanta frecuencia como los comandos discutidos previamente en este captulo, ocasionalmente necesitar estos comandos.

svn cleanup
Cuando Subversion modifica su copia de trabajo (o de cualquier informacin dentro. Svn), intenta hacerlo con la mayor seguridad posible. Antes de cambiar la copia de trabajo, Subversion escribe sus intenciones a un archivo de registro. A continuacin ejecuta los comandos en el archivo de registro para aplicar el cambio solicitado, que mantiene un bloqueo en la parte pertinente de la copia de trabajo, mientras que las obras - para evitar que los clientes de Subversion othe acceso a la copia de tra-bajo a mediados de cambio. Por ltimo, Subversion elimina el archivo de registro. Arquitectnicamente, es similar a un sistema de ficheros transaccional. Si se interrumpe una operacin de Subversion (si el proceso es matado, o si la mquina se cuelga, por ejemplo), los archivos de registro permanecen en el disco. Al volver a ejecutar los archivos de registro, Subversion puede completar el funcionamiento comenzado previamente, y su copia de trabajo puede tener en s de nuevo en un estado coherente. Y esto es exactamente lo que hace svn cleanup: busca en su copia de trabajo y se ejecuta cualquier

registro de sobra, vuelva a mover la copia de trabajo seguros en el proceso. Si Subversion alguna vez le dice que alguna parte de su copia de trabajo est "bloqueada", entonces este es el comando que se debe ejecutar. Tambin, svn status mostrar una L junto a los elementos bloqueados: $ Svn status L somedir M somedir / foo.c $ Svn cleanup $ Svn status M somedir / foo.c No hay que confundir estos bloqueos copia de trabajo con las cerraduras comunes que los usuarios de Subversion crean cuando se utiliza el "bloqueo-modificacin-desbloqueo" modelo de control de versiones concurrentes; ver tres significados de "bloqueo" para clarificacin.

5Vase? Les dijimos que Subversion era una mquina del tiempo.

42 Guided Tour

svn import
El comando svn import es una manera rpida de copiar un rbol de ficheros sin versionar en un repositorio, creando directorios intermedios como sea necesario. $ Svnadmin create / usr / local / svn / nuevorepos $ Svn import mytree file :/ / / usr / local / svn / nuevorepos / some / proyecto \ -M "importar Inicial" Adicin mytree / foo.c Adicin mytree / bar.c Adicin mytree / subdir Adicin mytree / subdir / quux.h Committed revision 1. El ejemplo anterior copia el contenido de mytree directorio bajo el directorio some / proyecto en el repositorio: $ Svn lista file :/ / / usr / local / svn / nuevorepos / some / proyecto bar.c foo.c subdir / Tenga en cuenta que despus de que se termin la importacin, el rbol original no se convierte en una copia de trabajo. Para empezar a trabajar, usted todava necesita hacer svn checkout una copia de trabajo fresca del rbol.

Resumen
Ahora que hemos cubierto la mayora de los comandos del cliente de Subversion. Excepciones notables son los relacionados con la ramificacin y fusin (verCaptulo 4, Crear ramas y fusionarlas) Y propiedades (ver elseccin llamada "Propiedades"). Sin embargo, es posible que desee tomar un momento para leerlo a travs de Captulo9, Subversion Com- Referencia completa para tener una idea de todos los muchos comandos diferentes que tiene Subversion, y cmo se pueden utilizar para hacer su trabajo ms fcil.

43

Captulo 4. Crear ramas y fusionarlas


Bifurcacin, etiquetar y fusionar, son conceptos comunes a casi todos los sistemas de control de versiones. Si usted no est familiarizado con estas ideas, proporcionamos una buena introduccin en este captulo. Si usted est familiarizado, esperamos que encuentre interesante ver cmo Subversion implementa estas ideas. La ramificacin es una parte fundamental de control de versiones. Si usted va a permitir que Subversion para manejar sus datos, entonces esta es una caracterstica de la cual acabar dependiendo de. En este captulo se presupone que ya estfamiliarizado con los conceptos bsicos de Subversion (Captulo 2, Conceptos bsicos).

Qu es un Poder?
Supongamos que es su trabajo para mantener un documento para una divisin en su empresa, un manual de algn tipo. Un da una divisin diferente le pide ese manual, pero con algunas partes "ajustado" para ellos, ya que hacen las cosas un poco diferente. Qu hacer en esta situacin? Usted hace lo obvio: realiza una segunda copia de su documento, y comienza a mantener dos copias por separado. A medida que cada departamento le pide que hacer pequeos cambios, usted los incorpora en una copia o la otra. A menudo se desea realizar el mismo cambio en ambas copias. Por ejemplo, si usted encuentra un error en la primera copia, es muy probable que el mismo error exista en la segunda copia. Los dos documentos son casi lo mismo, despus de todo, sino que slo se diferencian en pequeos y especficos. Este es el concepto bsico de una rama, es decir, una lnea de desarrollo que existe independientemente de la lnea anoth-er, y an as comparte una historia comn si mira suficientemente atrs en el tiempo. Una rama siempre nace como una copia de algo, y se mueve a partir de ah, generar su propia historia (ver Figura4.1, "Ramas de desarrollo").

Figura 4.1. Ramas de desarrollo

Subversion tiene comandos para ayudarle a mantener ramas paralelas de sus ficheros y directorios. Te permite crear ramas copiando sus datos, y recuerda que las copias estn relacionadas entre s. Tambin ayuda a duplicar cambios de una rama a otra. Por ltimo, puede hacer que partes de su copia de trabajo reflejan diferentes ramas, por lo que se puede "mezclar y combinar" diferentes lneas de desarrollo en su trabajo diario.

Uso Ramas
44

Crear ramas y fusionarlas En este punto, usted debe entender cmo cada commit crea un nuevo rbol completo sistema de archivos (llamado "Revisin") en el repositorio. Si no es as, volver atrs y leer informacin sobre revisiones en "Revisiones". Para este captulo, vamos a ir de nuevo al mismo ejemplo del captulo 2. Recuerde que usted y su collaborator, Carmen, comparten un repositorio que contiene dos proyectos, paint y calc. Observe que en Figura 4.2, "Estructura inicial del repositorio"Sin embargo, cada directorio de proyecto contiene subdirectorios llamados tronco y las ramas. La razn de esto pronto se aclarar.

Figura 4.2. Estructura inicial del repositorio

Al igual que antes, asuma que tanto Carmen como usted tienen copias locales del proyecto "calc". En concreto, cada uno tiene una copia de trabajo de / calc / trunk. Todos los archivos del proyecto estn en este subdirectorio en lugar de / calc s mismo, porque su equipo ha decidido que / calc / trunk es donde la "lnea principal" de desarrollo va a tener lugar. Digamos que le han dado a la tarea de llevar a cabo una reorganizacin radical del proyecto. Tomar mucho tiempo para escribir, y afectar a todos los archivos del proyecto. El problema aqu es que usted no quiere interferir con Carmen, que est en el proceso de corregir pequeos fallos aqu y all. Ella est en funcin del hecho de que la ltima versin del proyecto (en / calc / trunk) siempre es utilizable. Si usted comienza a enviar poco a poco cambios, seguramente fastidiar la tarea de Carmen. Una estrategia es esconderse en un agujero: usted y Carmen pueden dejar de compartir informacin de una o dos semanas. Es decir, comienza a reorganizar todos los archivos de su copia de trabajo, pero no confirmar o actualizar hasta que est completamente terminado con la tarea. Hay un nmero de problemas con este, sin embargo. En primer lugar, no es muy seguro. La mayora de las personas prefieren guardar su trabajo en el repositorio con frecuencia, por si algo malo accidentalmente suceder a su copia de trabajo. En segundo lugar, no es muy flexible. Si usted hace su trabajo en diferentes ordenadores (quizs tiene una copia de trabajo de / calc / trunk en dos mquinas diferentes), necesitar copiar manualmente sus cambios de un lado a otro, o simplemente hacer todo el trabajo en un solo equipo. Por eso

45 Crear ramas y fusionarlas Igualmente, es difcil de compartir su cambios en curso con nadie ms. Un desarrollo "mejores prcticas" de software comn es permitir que sus compaeros puedan revisar su trabajo sobre la marcha. Si nadie ve su intermedio se compromete, pierde crticas potenciales. Por ltimo, cuando haya terminado con todos los cambios, puede que le resulte muy difcil volver a fusionar su trabajo final con el resto del cuerpo principal del cdigo de la compaa. A Sally (u otros) puede haber realizado cambios en el repositorio que son difciles de incor-porativa en su copia de trabajo, especialmente si ejecuta svn update semanas tras el aislamiento. La mejor solucin es crear su propia rama, o lnea de desarrollo, en el repositorio. Esto le permite guardar su trabajo a medio hacer con frecuencia sin interferir con los dems, sin embargo, usted puede seleccionar-vamente compartir informacin con sus colaboradores. Vas a ver exactamente cmo funciona esto en el futuro.

Creacin de una sucursal


La creacin de una rama es muy simple de hacer una copia del proyecto en el repositorio usando el comando svn copy. Subversion no slo es capaz de copiar ficheros individuales, sino tambin directorios. En este caso, usted desea hacer una copia del directorio / trunk / calc. Dnde debera colocar la nueva copia? Donde desee-es una cuestin de poltica del proyecto. Digamos que su equipo tiene una poltica de creacin de sucursales en el area calc / / ramas del repositorio, y quiere nombrar la rama my-calc-branch. Usted desea crear un nuevo directorio, / calc / branches / my-calc-branch, que comienza su vida como una copia de / calc / trunk. Hay dos maneras diferentes de hacer una copia. Le mostraremos primero el modo engorroso, para hacer que el concepto claro. Para empezar, echa un vistazo a una copia de trabajo del directorio raz del proyecto, / calc: $ Svn checkout http://svn.example.com/repos/calc bigwc A bigwc / trunk / A bigwc / trunk / Makefile A bigwc / trunk / integer.c A bigwc / trunk / button.c A bigwc / branches / Dejamos la revisin 340. Hacer una copia ahora es simplemente una cuestin de pasar dos caminos de trabajo en papel al comando svn copy: $ Cd bigwc $ Svn copy tronco branches / my-calcbranch $ Svn status A ramas + / my-calc-branch En este caso, el comando svn copy copia recursivamente el directorio de trabajo del tronco en un nuevo directorio, branches / my-calc-branch. Como se puede ver en el comando svn status, el nuevo directorio est programado para ser aadido al repositorio. Pero fjese en el signo "+" al lado de la letra A. Esto indica que la adicin pendiente es una copia de algo, no es algo nuevo. Cuando enve sus cambios, Subversion crear / calc / branches / my-calc-branch en el reposit-ria copiando / calc / trunk, en lugar de volver a enviar todos los datos de la copia de trabajo en la red: $ Svn commit-m "Creacin de una rama privada de / calc / trunk." Adicin branches / my-calc-branch Committed revision 341. Y ahora el mtodo ms sencillo para crear una rama, que deberamos haberle explicado en primer lugar: svn copy es capaz de operar directamente sobre

dos URLs. $ \ Svn copy http://svn.example.com/repos/calc/trunk

46 Crear ramas y fusionarlas http://svn.example.com/repos/calc/branches/my-calc-branch \ -M "Creacin de una rama privada de / calc / trunk." Committed revision 341. En realidad no hay diferencia entre estos dos mtodos. Ambos procedimientos crean un nuevo directorio en la revisin 341, y el nuevo directorio es una copia de / calc / trunk. Esto se muestra en la figura4.3 ", repositorio con la nueva copia ". Observe que el segundo mtodo, sin embargo, lleva a cabo una confirmacin inmediata. 1 Es un procedimiento easi-er, ya que no requiere que usted echa un vistazo a un gran espejo del repositorio. De hecho, esta tcnica no es ni siquiera necesario que disponga de una copia de trabajo en absoluto.

Figura 4.3. Repositorio con nueva copia

Copias baratos Repositorio de Subversion sigue un diseo especial. Cuando se copia un directorio, usted no tiene que preocuparse por el crecimiento del repositorio-Subversion en realidad no duplicar los datos. En su lugar, se crea una nueva entrada de directorio que apunta a un rbol existente. Si usted es un usuario de Unix, es el mismo concepto que un enlace duro. A partir de ah, se dice que la copia es "vaga". Es decir, si usted comete un cambio en un archivo en el directorio copiado, slo que los cambios-el archivo resto de los archivos siguen existiendo como enlaces a los archivos originales en el directorio original.

1Subversion

no es compatible con copias entre repositorios. Al utilizar URLs con svn copy o svn move, s lo puede copiar elementos dentro del mismo repositorio.

47 Crear ramas y fusionarlas

Es por eso que a menudo se oye usuarios de Subversion habla de "copias baratas". No importa cun grande sea el dir-ectory-slo requiere una diminuta cantidad constante de tiempo para hacer una copia de la misma. De hecho, esta caracterstica es la base de cmo realizados en Subversion: cada revisin es una "copia barata" de la revisin anterior, con algunos elementos cambiados. (Para leer ms sobre este tema, visite el sitio web de Subversion y lea acerca de la "burbuja up" mtodo en los documentos de diseo de Subversion). Por supuesto, este mecanismo interno usado para copiar y compartir datos est oculto al usuario, que simplemente ve copias de rboles. El punto principal aqu es que las copias son ligeras, tanto en tiempo y espacio. Haga ramas con la frecuencia que desee.

Trabajando con su rama


Ahora que ha creado una rama del proyecto, se puede extraer una nueva copia de trabajo para comenzar a usarlo: $ Svn checkout http://svn.example.com/repos/calc/branches/my-calcbranch A my-calc-branch/Makefile A my-calc-branch/integer.c A my-calc-branch/button.c check out revisin 341. No hay nada especial sobre esta copia de trabajo, sino que simplemente refleja un directorio diferente del repositorio. Cuando confirma los cambios, sin embargo, Carmen nunca los ver cuando se actualiza. Su copia de trabajo es de / calc / trunk. (Asegrese de leer laseccin titulada "Cambiando la copia local

de trabajo" adelante en este captulo: el comando svn switch es una forma alternativa de crear una copia de trabajo de una rama). Vamos a suponer que pasa una semana y la siguiente se compromete a suceder: Puedes realizar un cambio en / calc / branches / my-calc-branch / button.c, que crea revi-sin 342. Puedes realizar un cambio en / calc / branches / my-calc-branch / integer.c, que crea re-visin 343. Carmen ha realizado un cambio en / calc / trunk / integer.c, creando la revisin 344.

Ahora hay dos lneas independientes de desarrollo, que se muestra enFigura 4.4, "La ramificacin de un archivo de historia ", Pasando en integer.c.

Figura 4.4. Bifurcacin de la historia de un fichero


48 Crear ramas y fusionarlas

Las cosas se ponen interesantes cuando nos fijamos en la historia de los cambios realizados en la copia de integer.c: $ Pwd / Home / user / my-calcbranch $ Svn log - verbose integer.c -------------------------------------------------- --------------------R343 | usuario | 2002-11-07 15:27:56 -0600 (Jue, 07 Nov 2002) | 2 lneas de caminos cambiados: M / calc / branches / my-calc-branch / integer.c * integer.c: frozzled la wazjub. -------------------------------------------------- --------------------R341 | usuario | 2002-11-03 15:27:56 -0600 (Jue, 07 Nov 2002) | 2 lneas de caminos cambiados: A / calc / branches / my-calc-branch (de / calc / trunk: 340) La creacin de una rama privada de / calc / trunk. -------------------------------------------------- --------------------r303 | salida | 2002-10-29 21:14:35 -0600 (mar, 29 de octubre de 2002) | 2 lneas cambiadas caminos: M / calc / trunk / integer.c

* integer.c: cambiado docstring. -------------------------------------------------- --------------------R98 | Sally | 2002-02-22 15:35:29 -0600 (Vier 22 Feb 2002) | 2 lneas de caminos Modificados: M / calc / trunk / integer.c * integer.c: proyecto. la adicin de este archivo al --------------------

---------------------------------------------------

Tenga en cuenta que Subversion sigue la historia de integer.c de su rama hacia atrs, traspasando incluso el punto en que se copi. Se muestra la creacin de la rama como un evento en la historia, porque integer.c fue copiado implcitamente cuando / fue copiado de / calc / trunk. Ahora mira lo que pasa cuando Carmen ejecuta el mismo comando en su copia del archivo: $ Pwd / Home / salida / calc 49 Crear ramas y fusionarlas $ Svn log - verbose integer.c -------------------------------------------------- --------------------R344 | Sally | 2002-11-07 15:27:56 -0600 (Jue, 07 Nov 2002) | 2 lneas cambiadas caminos: M / calc / trunk / integer.c * integer.c: arreglar un montn de errores de ortografa. -------------------------------------------------- --------------------r303 | salida | 2002-10-29 21:14:35 -0600 (mar, 29 de octubre de 2002) | 2 lneas cambiadas caminos: M / calc / trunk / integer.c * integer.c: cambiado docstring. -------------------------------------------------- --------------------R98 | Sally | 2002-02-22 15:35:29 -0600 (Vier 22 Feb 2002) | 2 lneas de caminos Modificados: M / calc / trunk / integer.c * integer.c: proyecto. la adicin de este archivo al --------------------

---------------------------------------------------

Carmen ve su propio cambio de la revisin 344, pero no el cambio realizado en la revisin 343. En lo que se refiere a Subversion, estos dos comete archivos diferentes afectados en diferentes ubicaciones de repositorio. Sin embargo, Subversion muestra que los dos archivos comparten una historia comn. Antes de que se hizo la rama en la revisin 341, que sola ser el mismo archivo. Es por eso que tanto usted como Carmen ven los cambios realizados en la revi-siones 303 y 98.

Los conceptos clave sobre las ramas


Hay dos lecciones importantes que usted debe recordar de esta seccin. 1. A diferencia de muchos otros sistemas de control de versiones, las ramas de Subversion como sistema de archivos normal de dir-ectories en el repositorio, no en una dimensin extra. Estos directorios simplemente llevan informacin histrica adicional. Subversion no tiene un concepto interno de rama-slo copias. Cuando se copia un directorio, el directorio res-ulting es slo una "rama" porque usted aade esa connotacin. Usted puede pensar en el dir-ectory diferente, o tratarlo de manera diferente, pero para Subversion es slo un directorio ordinario que sucede al haber sido creados por la copia.

2.

Cambios Copia de entre las ramas


Ahora usted y Carmen estn trabajando en ramas paralelas del proyecto: se est trabajando en una rama privada, y Carmen est trabajando en el tronco, o de la lnea principal de desarrollo. Para los proyectos que tienen un gran nmero de contribuyentes, es comn que la mayora de la gente que han trabajo copias del tronco. Cada vez que alguien tiene que hacer un cambio a largo plazo que puede molestar en el tronco, un procedimiento estndar es crear una rama privada y realizar ah los cambios hasta que todo el trabajo se ha completado. Por lo tanto, la buena noticia es que usted y Carmen no estn interfiriendo en sus trabajos. La mala noticia es que es muy fcil derivar demasiado lejos. Recuerde que uno de los problemas con el "rastreo en un agujero" La estrategia es que en el momento en que haya terminado con su rama, puede ser casi imposible fusionar los cambios de nuevo en

50 Crear ramas y fusionarlas el tronco sin una gran cantidad de conflictos. En su lugar, usted y Carmen pueden continuar compartiendo cambios a medida que trabaja. Todo depende de usted para decidir qu cambios son vale la pena compartir, Subversion le da la capacidad de forma selectiva "copiar" cambios entre ramas. Y cuando haya finalizado completamente con su rama, su conjunto entero de cambios de la rama puede ser copiado en el tronco.

Copiando cambios especficos


En la seccin anterior, mencionamos que tanto usted como Carmen han realizado cambios en integer.c en ramas diferentes. Si usted observa el informe de la revisin 344, se puede ver que ella corrigi algunos errores de ortografa. Sin duda, su copia del mismo archivo sigue teniendo los mismos errores de ortografa. Es probable que futuros cambios al fichero afectarn las mismas reas que tienen los errores de ortografa, por lo que se encontrar con algunos conflictos potenciales al combinar su rama algn da. Es mejor, entonces, para recibir los cambios de Carmen, antes de empezar a trabajar de forma intensiva en los mismos lugares. Es el momento de usar el comando svn merge. Este comando, que resulta, es un primo cercano del comando svn diff (sobre el cual lemos en el captulo 3). Ambos comandos son capaces de comparar dos obje-tos en el repositorio y describir las diferencias. Por ejemplo, usted puede pedir svn diff que le muestre el cambio exacto realizado por Carmen en la revisin 344: $ Svn diff-r 343:344 http://svn.example.com/repos/calc/trunk

ndice: integer.c ================================================== ================= --- Integer.c (revision 343) + + + Integer.c (revision 344) @ @ -147,7 +147,7 @ @ Caso 6: sprintf (info-> operating_system, "HPFS (OS / 2 o NT)"); break; case 7: sprintf (info-> operating_system, "Macintosh"); break; Caso 8: sprintf (info-> operating_system, "Z-System"); break; - Caso 9: sprintf (info-> operating_system, "CPM"); break; + Case 9: sprintf (info-> operating_system ", CP / M"); break; caso 10: sprintf (info-> operating_system ", TOPS-20"); break; caso 11: sprintf (info-> operating_system, "NTFS (Windows NT)"); break; caso 12: sprintf (info-> operating_system, "QDOS"); break; @ @ -164,7 +164,7 @ @ baja = (unsigned short) read_byte (gzfile); / * leer LSB * / Alta = (unsigned short) read_byte (gzfile); / * leer MSB * / high = Alta << 8 / * MSB interpretar correctamente * / - Total = bajo + alto / * agregarlos togethe para la correcta totales * / + Total = bajo + alto / * sumarlos para el total correcto * / info-> extra_header = (unsigned char *) my_malloc (total); fread (info-> extra_header, total, 1, gzfile); @ @ -241,7 +241,7 @ @ Guarde el desplazamiento con ftell ()! * / if ((info-> data_offset = ftell (gzfile)) == -1) { - Printf ("error: ftell () retturned -1 \ n."); + Printf ("error: ftell () devuelven -1 \ n."); Exit (1); } @ @ -249,7 +249,7 @ @ printf ("Creo inicio de datos comprimidos es% u \ n", info-> data_offset); # Endif - / * Conjunto postion ocho bytes desde el final del archivo. * / + / * Posicin de ocho bytes desde el final del archivo Set. * /

51 Crear ramas y fusionarlas if (fseek (gzfile, -8, SEEK_END)) {printf ("error: fseek () devuelve distinto de cero \ n"); El comando svn merge es casi exactamente el mismo. En lugar de imprimir las diferencias a su terminal, sin embargo, se les aplica directamente a su copia local como modificaciones locales: $ Svn merge-r 343:344 http://svn.example.com/repos/calc/trunk U integer.c $ Svn status M integer.c

La salida de svn merge muestra que fue parcheado su copia de integer.c. Ahora contiene Sally cambio-el cambio ha sido "copiado" del tronco a su copia local de la rama privada, y ahora existe como una modificacin local. En este punto, le toca a usted para revisar la modificacin local y asegurarse de que funciona correctamente. En otro escenario, es posible que las cosas no hayan ido tan bien, y que integer.c puede haber entrado en un estado de conflicto. Puede que sea necesario para resolver el conflicto mediante procedimientos estndar (vase el captulo 3), o si decide que la fusin fue una mala idea, simplemente darse por vencido y use svn revert el cambio local. Pero asumiendo que ha revisado el cambio fusionado, puede svn confirmar el cambio, como de costumbre. En ese momento, el cambio ha sido fusionado en su rama del repositorio. En la terminologa de control de versiones, este acto de copiar cambios entre ramas se denomina portar cambios. Cuando guarda su modificacin local, asegrese de que su mensaje de registro indica que est portando un cambio especfico de una rama a otra. Por ejemplo: $ Svn commit-m "integer.c: portado R344 (correcciones de ortografa) de tronco." Envo integer.c Transmisin de datos de archivo. Committed revision 360. Como ver en las siguientes secciones, se trata de una muy importante "mejores prcticas" a seguir.

Por qu no utilizar los parches en su lugar? Una pregunta que tendr en mente, especialmente si usted es un usuario de Unix: para qu usar svn merge? Por qu no simplemente usar el comando patch del sistema operativo para realizar el mismo trabajo? Por ejemplo: $ Svn diff-r 343:344 http://svn.example.com/repos/calc/trunk > Fichero de parche $ Patch-p0 <fichero de parche Integer.c archivo de parches utilizando el Plan A. .. Trozo # 1 tuvo xito en 147. Trozo # 2 tuvo xito en 164. Trozo # 3 logr en 241. Trozo # 4 tuvo xito en 249. hecho

En este caso en particular, s, realmente no hay diferencia. Pero svn merge tiene caractersticas especiales que sobrepasan el programa de parche. El formato de archivo utilizado por el parche es bastante limitado, es slo capaz de modificar el contenido del archivo. No hay forma de representar cambios a rboles, como la adicin, eliminacin o cambio de nombre de archivos y directorios. Si Sally

52 Crear ramas y fusionarlas

cambio haba, por ejemplo, ha aadido un nuevo directorio, la salida de svn diff no lo habra mencionado en absoluto. svn diff slo genera el formato limitado de patch, por lo que hay algunas ideas que simplemente no se puede expresar. 2 El comando svn merge, sin embargo, puede expresar cambios en la estructura y las propiedades del rbol directamente aplicndolos a su copia de trabajo. Una palabra de advertencia: aunque los comandos svn diff y svn merge son similares en concepto, tienen una sintaxis diferente en muchos casos. Asegrese de leer acerca de ellos en el captulo 9 para obtener ms informacin o pedir ayuda svn. Por ejemplo, svn merge requiere una ruta a una copia local como destino, es decir, un lugar donde debe aplicar los cambios a rboles. Si no se especifica el destino, se asume que est intentando realizar una de las siguientes operaciones comunes: 1. 2. Quiere fusionar cambios de directorio en el directorio de trabajo actual. Usted desea combinar los cambios en un archivo especfico en un archivo con el mismo nombre que existe en el directorio de trabajo actual.

Si est fusionando un directorio y no se ha especificado una ruta de destino, svn merge asume el primer caso mencionado e intenta aplicar los cambios en el directorio actual. Si est fusionando un archivo y ese archivo existe (o un archivo con el mismo nombre) en su directorio de trabajo actual, svn merge asume el segundo caso mencionado e intenta aplicar los cambios a un archivo local con el mismo nombre. Si desea que los cambios aplicados en otro lugar, tendr que decirlo. Por ejemplo, si usted est sentado en el directorio padre de su copia de trabajo, tendr que especificar el directorio de destino para recibir los cambios: $ Svn merge-r 343:344 http://svn.example.com/repos/calc/trunk mi-calc-branch U my-calc-branch/integer.c

El concepto clave detrs de Fusin


Usted ha visto un ejemplo del comando svn merge, y ests a punto de ver varios ms. Si te sientes confundido acerca de exactamente cmo la fusin de las obras, que no est solo. Algunos usuarios (especialmente aquellos nuevos en el control de versiones) son inicialmente perplejos acerca de la sintaxis apropiada del comando, y sobre cmo y cundo se debe utilizar la funcin. Pero no temas, este comando es en realidad mucho ms simple de lo que piensas! Hay una tcnica muy fcil de entender exactamente cmo se comporta svn merge. La principal fuente de confusin es el nombre del comando. El trmino "fusin" de alguna manera indica que las ramas se combinan entre s, o que no es una especie de mezcla misteriosa de datos pasando. Ese no es el caso. Un mejor nombre para el comando podra haber sido svn diff-and-se aplican, porque eso es todo lo que ocurre: dos rboles de repositorio se compararon y las diferencias se aplican a una copia de trabajo. El comando tiene tres argumentos: 1. Un rbol del repositorio inicial (a menudo llamado el lado izquierdo de la comparacin),

2. 3.

Un rbol de depsito final (a menudo llamado el lado derecho de la comparacin), Una copia de trabajo para aceptar las diferencias como cambios locales (a menudo llamado el blanco de la combinacin).

Una vez que se especifican estos tres argumentos, los dos rboles son comparados y las diferencias resultantes se aplican a la copia de trabajo de destino como modificaciones locales. Cuando se hace la orden, los resultados no son

2 En el futuro, el proyecto Subversion planea usar (o inventar) un formato de parche ampliada que describe los cambios en la estructura y las propiedades del rbol.

53 Crear ramas y fusionarlas diferente que si tuviera a mano editado los archivos, o ejecutar diversas svn add o comandos svn delete mismo. Si te gusta el resultado, puede cometerlos. Si no te gustan los resultados, slo tiene que svn revert todos los cambios. La sintaxis de svn merge permite especificar los tres argumentos necesarios ms flexible. He aqu algunos ejemplos: $ Svn merge http://svn.example.com/repos/branch1 @ 150 \ http://svn.example.com/repos/branch2 @ 212 \ My-copia de trabajo 100:200 http://svn.example.com/repos/trunk mi-copia de

$ Svn merge-r trabajo

$ Svn merge-r 100:200 http://svn.example.com/repos/trunk La primera sintaxis expone los tres argumentos de forma explcita, nombrando a cada rbol en forma URL @ REV y nombrar el destino de la copia de trabajo. La segunda sintaxis se puede utilizar como una forma rpida para situaciones en las que usted est comparando dos revisiones diferentes de la misma URL. La ltima sintaxis muestra cmo el argumento a una copia local es opcional, si se omite, el valor predeterminado es el directorio actual.

Mejores prcticas para la fusin


Seguimiento Combina manualmente
Fusionar cambios suena bastante simple, pero en la prctica puede convertirse en un dolor de cabeza. El problema es que si fusiona cambios con frecuencia de una rama a otra, es posible combinar accidentalmente el mismo cambio dos veces. Cuando esto sucede, a veces las cosas van a funcionar bien. Cuando remendar un fichero, Subversion normalmente se da cuenta si el archivo ya tiene el cambio, y no hace nada. Pero si el cambio ya existente se ha modificado de ninguna manera, obtendr un conflicto. Idealmente, el sistema de control de versiones debera prevenir la doble aplicacin de cambios a una rama. Cabe recordar automticamente qu cambios una rama ya ha recibido, y ser capaz de enumerarlos para usted. Se debe utilizar esta informacin para ayudar a automatizar las fusiones tanto como sea posible. Desafortunadamente, Subversion no es tal sistema. Al igual que CVS, Subversion no almacena ninguna informa-cin sobre las operaciones de combinacin. Cuando enva sus cambios locales, el repositorio no tiene idea de si esos cambios vinieron de una ejecucin svn merge, o de una modificacin manual de los ficheros. Qu significa esto para usted, el usuario? Esto significa que hasta que el Subversion da crece esta

funcin, usted tendr que la informacin de fusionado a ti mismo. El mejor lugar para hacerlo es en el mensaje de registro de confirmacin. Como se demuestra en el ejemplo anterior, se recomienda que el informe de cambios mencione varias revi-sin especfico (o rango de revisiones) que est siendo fusionado en su rama. Ms tarde, puede ejecutar svn log para revisar qu cambios contiene ya su rama. Esto le permitir construir con cuidado un comando svn merge posterior que no ser redundante con cambios previamente portados. En la siguiente seccin, mostraremos algunos ejemplos de esta tcnica en accin.

Fusiones Previsualizacin
Debido a la fusin slo se traduce en modificaciones locales, normalmente no es una operacin de alto riesgo. Si se equivoca en el fusionado la primera vez, simplemente svn revert los cambios y vuelve a intentarlo. Es posible, sin embargo, que su copia de trabajo ya puede haber sufrido modificaciones locales. Los cambios aplicada por una fusin se mezclarn con sus pre-existentes, y ejecutando svn revert ya no es una op-cin. Los dos conjuntos de cambios pueden ser imposibles de separar.

54 Crear ramas y fusionarlas En casos como este, la gente toma consuelo en ser capaces de predecir o examinar las fusiones antes de que ocurran. Una manera simple de hacer esto es ejecutar svn diff con los mismos argumentos que planea pasar a svn merge, como ya mostramos en nuestro primer ejemplo de la fusin. Otro mtodo de vista previa es pasar el -Dry-runopcin para el comando de fusionado: $ Svn merge - dry-run-r 343:344 http://svn.example.com/repos/calc/trunk U integer.c $ Svn status # Nada impreso, copia de trabajo no ha variado. La opcin - dry-run en realidad no aplica ningn tipo de cambios locales en la copia de trabajo. Slo muestra los cdigos de estado que seran mostrados durante una fusin real. Es til para obtener una vista previa de "alto nivel" de la fusin potencial, para esos momentos cuando se ejecuta svn diff da demasiados detalles.

Subversion y Cambios

Todo el mundo parece tener una definicin ligeramente diferente de "el conjunto de cambios", o por lo menos una expectativa diferente de lo que significa para un sistema de control de versiones tener "caractersticas del conjunto de cambios". Para nuestro propsito, vamos a decir que un conjunto de cambios es slo una coleccin de cambios con un nombre nico. Los cambios pueden incluir ediciones textuales para presentar contenidos, modificaciones de estructura de rbol, o ajustes a los metadatos. En el habla comn, un conjunto de cambios es slo un parche con un nombre que se puede referir. En Subversion, un nmero global de revisin N nombra el rbol en el repositorio: es el aspecto del repositorio tras la confirmacin N-sima. Es tambin el nombre de un conjunto de cambios implcita: si compara el rbol N con el rbol N-1, puede derivar el parche exacto en que se cometi. Por esta razn, es fcil pensar en la "revisin N" no slo como un rbol, sino un conjunto de cambios tambin. Si usted usa un software para gestionar los errores, puede utilizar los nmeros de revisin para hacer referencia a los parches especficos que los errores-para arreglar ejemplo, "este problema fue corregido en la revisin 9238.". Entonces alguien puede ejecutar svn log-r9238 para leer sobre el conjunto de cambios exacto que corrigi el error, y ejecuta svn diff-r9237: 9238 para ver el propio parche. Y comando de Subversion fusin tambin usa nmeros de revisin. Puede combinar los conjuntos de cambios especficos de una rama a otra nombrndolos en los parmetros de fusionado: svn merge-r9237: 9238 fusionara changeset # 9238 en su copia de trabajo.

Fusionar conflictos
Al igual que el comando svn update, svn merge aplica cambios a su copia de trabajo. Y por lo tanto, tambin es capaz de crear conflictos. Los conflictos producidos por svn merge, sin embargo, son a veces diferente, y en esta seccin se explican las diferencias. En primer lugar, se supone que su copia de trabajo tiene modificaciones locales. Cuando svn update a una revisin en particular, los cambios enviados por el servidor siempre se aplican "limpia" a su copia de trabajo. El servidor produce el delta mediante la comparacin de dos rboles: una instantnea virtual de su copia de trabajo, y el rbol de revisin que est interesado pulg Debido a que el lado izquierdo de la comparacin es exactamente igual a lo que ya tiene, el delta est garantizada convertir correctamente su copia de trabajo en el rbol de la derecha. Pero svn merge tiene tales garantas y puede ser mucho ms catico: el usuario puede pedir al servidor que comparar dos rboles en absoluto, incluso los que no estn relacionadas con la copia de trabajo! Esto significa que hay un gran potencial para el error humano. Los usuarios a veces comparar las equivocadas dos rboles, creando un delta que no se aplica limpiamente. svn merge har todo lo posible para aplicar la mayor cantidad de delta como sea posible, pero algunas partes puede ser imposible. Al igual que el comando patch Unix a veces se queja de "trozos fallidos", svn merge se quejan de "excluido objetivos": $ Svn merge-r 1288:1351 http://svn.example.com/repos/branch U foo.c

55 Crear ramas y fusionarlas U bar.c Saltado el objetivo que falta: "baz.c 'U glub.c C glorb.h $ En el ejemplo anterior, podra darse el caso de que baz.c existe en ambas instantneas de la rama que se comparan, y el delta resultante quiere cambiar el contenido del archivo, pero el archivo no existe en la copia de trabajo. Cualquiera que sea el caso, el mensaje "excluido" significa que el usuario es ms probable que la comparacin de los dos rboles equivocados, sino que son el sntoma clsico de un error del piloto. Cuando esto sucede, es fcil de revertir recursivamente todos los cambios creados por la fusin (svn revert - recursive), elimine los archivos no versionados o dir-ectories que quedan despus de la operacin de revertir, y vuelva a ejecutar svn merge con diferentes argumentos. Observe tambin que el ejemplo anterior muestra un acontecimiento conflicto glorb.h. Ya hemos

sealado que la copia de trabajo tiene modificaciones locales: cmo puede un conflicto pasar? Una vez ms, ya que el usuario puede usar svn merge para definir y aplicar cualquier delta antigua a la copia de trabajo, que el delta puede contener cambios en el texto que no se aplican limpiamente en un archivo de trabajo, incluso si el archivo no tiene modificaciones locales. Otra pequea diferencia entre svn update y svn merge son los nombres de los archivos de texto creados cuando se produce un conflicto. En elseccin "Resolver conflictos (fusionando los cambios de otros)", Vimos que una actualizacin produce archivos denominados filename.mine, filename.rOLDREV y archivos name.rNEWREV. Cuando svn merge produce un conflicto, sin embargo, crea tres archivos denominados archivos name.working, filename.left y filename.right. En este caso, los trminos "izquierda" y "derecha" estn describiendo de qu lado de la comparacin de dos rboles en el archivo de procedencia. En cualquier caso, estos nombres diferentes le ayudar a distinguir entre los conflictos que ocurrieron como resultado de una actualizacin frente a los que ocurrieron como resultado de una fusin.

En cuenta o ignorando ascendencia


Cuando hable con un desarrollador de Subversion, es muy posible que oiga referencia al trmino ascendencia. Esta palabra se utiliza para describir la relacin entre dos objetos en un repositorio: si ambos estn relaciona-das entre s, a continuacin, un objeto se dice que es un ancestro del otro. Por ejemplo, supongamos que la revisin 100, que incluye un cambio en un archivo foo.c. Entonces foo.c @ 99 es un "ancestro" de foo.c @ 100. Por otro lado, suponga que la supresin de foo.c en la revisin 101 y, a continuacin, agregar un nuevo archivo con el mismo nombre en la revisin 102. En este caso, foo.c @ 99 y foo.c @ 102 pueden parecer relacionados (tienen el mismo camino), pero en realidad son completamente diferentes objetos en el repositorio. Comparten sin antecedentes o "ascendencia". La razn de mencionar esto ahora es para sealar una diferencia importante entre svn diff y svn merge. El primer comando ignora la ascendencia, mientras que el segundo comando es muy sensible a ella. Por ejemplo, si usase svn diff para comparar las revisiones 99 y 102 de foo.c, vera ficheros diferenciales basados en lneas, el comando diff est comparando ciegamente dos caminos. Pero si usase svn merge para comparar ambos objetos, se dara cuenta de que son intentos relacionados y primero para borrar el fichero antiguo, a continuacin, agregar el nuevo archivo, la salida indicara una eliminacin seguida de un complemento: D foo.c A foo.c Mayora de las fusiones implican la comparacin de los rboles que estn ancestralmente relacionados entre s, y por lo tanto svn merge por defecto a este comportamiento. Ocasionalmente, sin embargo, es posible que desee el comando merge para com-parar dos rboles no relacionados. Por ejemplo, puede haber importado dos rboles de cdigo fuente que representan versiones de proveedores diferentes de un proyecto de software (verla seccin "Ramas de proveedores"). Si usase svn merge para comparar los dos rboles, vera que el primer rbol que se est eliminado, seguido de una adicin completa del segundo!

56 Crear ramas y fusionarlas En estas situaciones, querr que svn merge realice una comparacin basada nicamente en rutas, haciendo caso omiso de las relaciones entre los archivos y directorios. Aadir la opcin - ignoreancestry a su comando de fusionado, y se comportar igual que svn diff. (Y por el contrario, la opcin notice-ancestry har que svn diff se comporte como el comando de combinacin.)

Comn casos de uso


Hay muchos usos diferentes para la ramificacin y svn merge, y esta seccin se describen la mayora de los comunes que es probable que encontrarse.

Fusionar una rama completa con otra


Para completar el ejemplo que, nos moveremos hacia adelante en el tiempo. Supongamos varios das han pasado, y muchos cambios han ocurrido tanto en el tronco como en su rama privada. Supongamos que usted ha terminado de trabajar en su rama privada, la funcin o la correccin de errores est finalmente completada, y ahora quiere fusionar todos sus cambios en la rama en el tronco para que otros puedan disfrutar. Entonces, cmo usamos svn merge en esta situacin? Recuerde que este comando compara dos rboles, y aplica las diferencias a una copia de trabajo. As que para recibir los cambios, es necesario tener una copia de trabajo del tronco. Vamos a suponer que, o bien todava tiene una copia original por ah (completamente actualizada) o que recientemente ha obtenido una copia de trabajo fresca de / calc / trunk. Pero el que dos rboles deben compararse? A primera vista, la respuesta puede parecer obvia: simplemente compare el ltimo rbol del tronco con el ltimo rbol de rama. Pero cuidado, esta suposicin es incorrecta, y ha confundido a muchos usuarios nuevos! Dado que svn merge funciona como svn diff, comparar el tronco y su rama no slo describir el conjunto de cambios realizados en su rama. Tal comparacin muestra demasiados cambios: no solo mostrara la adicin de los cambios de la rama, sino tambin la eliminacin de los cambios del tronco que nunca ocurrieron en su rama. Para expresar nicamente los cambios que ocurrieron en su rama, necesita comparar el estado inicial de la sucursal a su estado final. Usando svn log en su rama, se puede ver que la rama fue creada en la revisin 341. Y el estado final de la rama es simplemente una cuestin de utilizar la revisin HEAD. Eso significa que quiere comparar las revisiones 341 y HEAD del directorio de su rama, y aplicar esas diferencias a una copia de trabajo del tronco.

Pu nta
Una buena manera de encontrar la revisin en la que se cre una rama (la "base" de la rama) es usar la opcin - stop-on-copy con svn log. El sub comando log normalmente muestra todo cambio hecho a la rama, incluyendo los de la copia a la que cre la rama. As que normalmente ver tambin la historia del tronco tambin. La - Stop-on-copydetendr iniciar la produccin tan pronto como svn log detecte que la rama fue copiada o renombrada. As que en nuestro continuo ejemplo, $ Svn log - verbose - stop-on-copy \ http://svn.example.com/repos/calc/branches/my-calc-branch ... -------------------------------------------------- --------------------R341 | usuario | 2002-11-03 15:27:56 -0600 (Jue, 07 Nov 2002) | 2 lneas de caminos cambiados: A / calc / branches / my-calc-branch (de / calc / trunk: 340) $

57 Crear ramas y fusionarlas Como era de esperar, el final de revisin mostrado por este comando es la revisin en la que mi-calc-branch fue creado por copia.

Aqu est el procedimiento de fusin final, entonces: $ Cd calc / trunk $ Svn update En la revisin 405. $ Svn merge-r 341:405 http://svn.example.com/repos/calc/branches/my-calc-branch U integer.c U button.c U Makefile $ M M M Svn status integer.c button.c Makefile los diffs, compilacin,

# ... Examinar pruebas, etc ..

$ Svn commit-m "Fusionado cambios mi-calc-branch R341: 405 en el tronco." Envo integer.c Envo button.c Envo Makefile Transmitir datos de archivos ... Committed revision 406. Una vez ms, se dio cuenta de que el mensaje de registro menciona de forma explcita el rango de cambios que fue fusionado en el tronco. Recuerde siempre hacer esto, porque es informacin crtica que necesitar ms adelante. Por ejemplo, suponga que decide continuar trabajando en su rama otra semana, con el fin para completar una mejora a su funcin original o correccin de errores. Revisin HEAD del repositorio es ahora 480, y ya est listo para realizar otra fusin desde su rama privada al tronco. Sin embargo, como se discute en laseccin "Procedimientos para la fusin", No quiere fusionar los cambios que ya fueron fusionados; slo quiere fusionar todo lo "nuevo" en su rama desde la ltima vez que fue fusionada. El truco est en averiguar qu hay de nuevo. El primer paso es ejecutar svn log en el tronco, y buscar un mensaje de registro de la ltima vez que realiz una fusin de la rama: $ Cd calc / trunk $ Svn log . . . -------------------------------------------------- ---------------------R406 | usuario | 2004-02-08 11:17:26 -0600 (Sun, 08 Feb 2004) | 1 line Fusionada cambios mi-calc-branch R341: 405 en tronco. --------------------------------------------------. . . el --------------------

Aj! Puesto que todas las ramas los cambios que ocurrieron entre las revisiones 341 y 405 fueron fusionados con el tronco como la revisin 406, que ahora sabemos que desea combinar slo los cambios de la rama posteriores a esto-comparando las revisiones 406 y HEAD. $ Cd trunk calc /

58 Crear ramas y fusionarlas $ Svn update En la revisin 480. # Nos damos cuenta de que la cabeza es actualmente 480, por lo que utilizamos para hacer la fusin: $ U U U Svn merge-r 406:480 http://svn.example.com/repos/calc/branches/my-calc-branch integer.c button.c Makefile

$ Svn commit-m "Fusionado cambios mi-calc-branch R406: 480 en el tronco." Envo integer.c Envo button.c Envo Makefile Transmitir datos de archivos ... Committed revision 481. Ahora el tronco contiene la segunda oleada completa de cambios realizados en la rama. En este punto, puede eliminar su sucursal (hablaremos de esto ms adelante), o continuar trabajando en su rama y repetir este procedimiento para las siguientes fusiones.

Deshacer cambios
Otro uso comn de svn merge es deshacer un cambio que ya se ha entregado. Suponga que est trabajando felizmente en una copia de trabajo de / calc / trunk, y usted descubre que el cambio realizado hace tiempo en la revisin 303, que modific integer.c, es completamente errneo. Nunca debera haber sido cometido. Puede usar svn merge para "deshacer" el cambio en su copia de trabajo y, a continuacin, las modificaciones locales al repositorio. Todo lo que necesitas hacer es especificar una diferencia inversa: $ Svn merge-r 303:302 http://svn.example.com/repos/calc/trunk U integer.c $ Svn status M integer.c $ Svn diff . . . # Verifique cambio . . .

que

se

elimina

el

$ Svn commit-m "cambio Deshacer cometido en r303." Envo integer.c Transmisin de datos de archivo. Committed revision 350. Una forma de pensar en una revisin de repositorio es como un grupo de cambios (algunos de control de versiones sistemas llamar a estos de cambios). Al utilizar el modificador-r, puede pedirle a svn merge para aplicar un conjunto de cambios, o de toda la gama de conjuntos de cambios, a su copia de trabajo. En nuestro caso para deshacer un cambio usamos svn merge para aplicar el changeset # 303 a nuestra copia de trabajo hacia atrs. Tenga en cuenta que deshacer un cambio como este es como cualquier otra operacin svn merge, por lo

que debe usar svn status y svn diff para confirmar que su trabajo est en el estado en el que quieres que sea y, a continuacin, usar svn commit para enviar la versin final al repositorio. Despus de cometer, este conjunto de cambios particular, ya no se refleja en la revisin HEAD. Una vez ms, usted puede estar pensando: bueno, eso realmente no deshacer el compromiso, verdad? El cambio todava existe en la revisin 303. Si alguien obtiene una versin del proyecto calc entre las revisiones 303 y 349, seguirn viendo todava el cambio malo, verdad?

59 Crear ramas y fusionarlas S, eso es cierto. Cuando hablamos de "eliminar" un cambio, que realmente estamos hablando de la eliminacin de la cabeza. El cambio original todava existe en la historia del repositorio. Para la mayora de las situaciones, esto es suficiente. La mayora de las personas slo estn interesados en el seguimiento de la cabeza de un proyecto de todos modos. Hay casos especiales, sin embargo, donde realmente puede ser que desee para destruir toda evidencia de la confirmacin. (Tal vez alguien puso accidentalmente en un documento confidencial.) Esto no es tan fcil, que resulta, porque Subversion fue diseado deliberadamente para nunca perder informacin. Las revisiones son rboles inmutables que se construyen sobre unos a otros. Extraccin de una revisin de la historia podra causar un efecto domin, creando caos en todas las revisiones posteriores y posiblemente invalidando todas las copias de trabajo. 3

Reconstruir Elementos eliminados


La gran cosa acerca de los sistemas de control de versiones es que la informacin nunca se pierde. Incluso cuando se elimina un archivo o directorio, puede haberse esfumado de la revisin HEAD, pero el objeto todava existe en revisiones anteriores. Una de las preguntas ms comunes que los nuevos usuarios es, "Cmo puedo recuperar mi fichero o directorio nuevo?". El primer paso es definir exactamente qu elemento est intentando resucitar. Esto es una metfora til: puede pensar que todo objeto en el repositorio existe en una especie de sistema de coordenadas bidimensional. La primera coordenada es una revisin particular del rbol, y la segunda coordenada es un camino dentro de ese rbol. As que cada versin del archivo o directorio puede ser definido por un par de coordenadas especfico. Subversion no tiene un directorio Attic como CVS, 4 por lo que necesita usar svn log para descubrir la pareja de coordenadas exactas que quiere resucitar. Una buena estrategia es ejecutar svn log - verbose en un directorio que sola contener el elemento borrado. La opcin - verbose muestra una lista de todos los elementos modificados en cada re-visin, todo lo que necesitas hacer es encontrar la revisin en la que se elimin el archivo o directorio. Usted puede hacer esto visualmente, o usando otra herramienta para examinar la salida del registro (va grep, o quizs con una bsqueda incremental en un editor). $ Cd parent-dir $ Svn log - verbose . . . -------------------------------------------------- --------------------- R808 | joe | 2003-12-26 14:29:40 -0600 (viernes, 26 de diciembre de 2003) | 3 lneas Caminos Modificados: D / calc / trunk / real.c M / calc / trunk / integer.c Alta transformada rpida de Fourier para funciones integer.c. Real.c eliminado porque el cdigo ya en double.c. . . .

En el ejemplo, estamos asumiendo que usted est buscando un archivo borrado real.c. Al mirar a travs de los registros de un directorio padre, usted ha manchado que este archivo se ha eliminado en la revisin 808. Por lo tanto, la ltima versin del fichero existi en la revisin de la derecha antes de eso. Conclusin: quiere resucitar la ruta / calc / trunk / real.c de la revisin 807. Esa fue la parte difcil-la investigacin. Ahora que ya sabe lo que quiere recuperar, tiene dos opciones diferentes. Una opcin es usar svn merge para aplicar la revisin 808 "al revs". (Ya hemos discutido cmo deshacer cambios, consulte laseccin llamada "Deshacer cambios".) Esto tendra el efecto de volver a agregar real.c como una modificacin local. El fichero se programara para la adicin y despus de un commit, el archivo existira de nuevo en HEAD.
3El

Proyecto Subversion tiene planes, sin embargo, para poner en prctica algn da un comando svnadmin que cumplir la tarea de eliminar de forma permanente la informacin borra. Mientras tanto, vea la seccin llamada "svndumpfilter" para una posible solucin.
4Debido CVS no versin rboles, crea un

ticorea dentro de cada directorio del repositorio como una manera de recordar a los archivos eliminados.

60 Crear ramas y fusionarlas En este ejemplo en particular, sin embargo, esto no es, probablemente, la mejor estrategia. Aplicar al revs la revisin 808 no solamente programara la adicin de real.c, pero el mensaje de registro indica que tambin se desharan ciertos cambios a integer.c, lo que no quiere. Ciertamente, podra fusionar al revs la revisin 808 y entonces ejecutar svn revert sobre la modificacin de la zona para integer.c, pero esta tcnica no escala bien. Y si hay 90 ficheros modificados en la revisin 808? Una segunda estrategia ms precisa es no usar svn merge en absoluto, sino ms bien el comando svn copy. Simplemente copie la revisin y la ruta exacta "par de coordenadas" del repositorio a su copia de trabajo: $ Svn copy - revision 807 \ http://svn.example.com/repos/calc/trunk/real.c . / Real.c $ Svn status A + real.c $ Svn commit-m "Resucitado real.c de la revisin 807, / calc / trunk / real.c." Adicin real.c Transmisin de datos de archivo. Committed revision 1390. El signo ms en la salida de estado indica que el elemento no slo se ha programado para la adicin, pero sched-gramado para ser aadido "con historia". Subversion recuerda de dnde fue copiado. En el futuro, se ejecuta svn log sobre este fichero recorrer hasta la resurreccin de archivo ya travs de toda la historia tena pri-o la revisin 807. En otras palabras, esta nueva real.c no es realmente nueva, es un descendiente directo del, archivo borrado ori-ginal. Aunque este ejemplo muestra cmo resucitar un fichero, tenga en cuenta que estas mismas tcnicas funcionan igual de bien para resucitar directorios borrados.

Patrones de ramificacin comunes


El control de versiones es la ms utilizada para el desarrollo de software, as que aqu tiene un rpido vistazo a dos de los ms comunes de ramificacin / fusin de los patrones utilizados por los equipos de programadores. Si usted no est utilizando Subversion para el desarrollo de software, puede saltarse esta seccin. Si eres un desarrollador de software con el control de versiones, por primera vez, prestar mucha atencin, ya que estos patrones a menudo se consideran las mejores prcticas por la gente con experiencia. Estos procesos no son especficos a Subversion, sino que son aplicables a cualquier sistema de control de versiones. Sin embargo, puede ser til para ver los describieron en trminos de Subversion.

Ramas del Lanzamiento


La mayora del software tiene un ciclo de vida tpico: cdigo, prueba, lanzamiento, repeticin. Hay dos problemas con este proceso. En primer lugar, los desarrolladores necesitan para seguir escribiendo nuevas caractersticas, mientras que los equipos de aseguramiento de la calidad toman tiempo para probar las versiones supuestamente estables del software. El nuevo trabajo no puede parar, mientras que el software ha sido probado. En segundo lugar, el equipo casi siempre tiene que apoyar, las versiones anteriores de lanzamiento de software, y si un error se descubre en el ltimo cdigo, es muy probable que exista en las versiones publicadas, as, y los clientes va a querer que la correccin de errores sin tener que esperar para una nueva versin. Aqu es donde el control de versiones puede ayudar. El procedimiento tpico es el siguiente: Los desarrolladores se comprometen todos los nuevos trabajos en el tronco. Cambios del da a da se comprometen a/ Trunk: nuevas caractersticas, correccin de errores, y as sucesivamente. El tronco se copia en una rama de "liberacin". Cuando el equipo piensa que el software est listo para el lanzamiento (por ejemplo, una versin 1.0), a continuacin, / Trunkpodran ser copiado / Branches/1.0. Los equipos continan trabajando en paralelo.Un equipo comienza a rigurosas pruebas de la rama de lanzamiento, mientras que

61 Crear ramas y fusionarlas otro equipo sigue un nuevo trabajo (por ejemplo, la versin 2.0) en / trunk. Si los errores se descubren en cualquier lugar, los arreglos son portados de ida y vuelta si es necesario. En algn punto, sin embargo, que incluso proceso se detiene. La rama se "congela" para las pruebas finales justo antes de un lanzamiento. La rama se marcaron y liberaron.Al terminar las pruebas,/ Branches/1.0se copia en/ Tags/1.0.0como una imagen de referencia. La etiqueta est empaquetado y puesto en libertad a los clientes. La rama se mantiene en el tiempo.Mientras se sigue trabajando en / trunk de la versin 2.0, correccin de errores seguirn portado desde / trunk a / branches/1.0. Cuando un nmero suficiente correcciones se han acumulado, la administracin puede decidir hacer una versin 1.0.1: / branches/1.0 se copia a / tags/1.0.1, y la etiqueta est empaquetado y puesto en libertad.

Todo este proceso se repite como el software madura: cuando el trabajo se haya completado 2.0, se crea una nueva rama de la versin 2.0, prueba, marcado, y finalmente puesto en libertad. Despus de algunos aos, el repositorio termina con una serie de ramas de liberacin en el modo de "mantenimiento", y una serie de etiquetas que representan versiones finales enviados.

Ramas de funciones
Una rama de la caracterstica es el tipo de rama que ha sido el ejemplo dominante en este captulo, el que ha estado trabajando a Sally mientras contina trabajando en / trunk. Es una rama temporal creada para trabajar en un cambio complejo sin interferir con la estabilidad de la / del tronco. A diferencia de las ramas de liberacin (que puede ser necesario con el apoyo siempre), cuentan con sucursales nacen, utiliza por un tiempo, incluido de nuevo al tronco, a continuacin, eliminar en ltima instancia. Ellos tienen una vida finita de utilidad. Una vez ms, las polticas de los proyectos varan mucho en relacin exactamente cundo es apropiado para crear una rama de la caracterstica. Algunos proyectos no cuentan con sucursales utilizan para nada: se compromete a / trunk es un pas libre para todos. La ventaja de este sistema es que es muy sencillo: nadie necesita aprender acerca de ramificacin o fusin. La desventaja es que el cdigo de tronco es a menudo inestable o inutilizable. Otros proyectos utilizan ramas hasta el extremo: no cambio jams se ha

comprometido a la lnea externa directamente. Incluso los cambios ms triviales se crean en una rama corta, cuidadosamente revisado y fusionado al tronco. A continuacin, se elimina la rama. Este sistema garantiza un tronco ex excepcionalmente estable y utilizable en todo momento, pero a costa de un enorme sobrecarga proceso. La mayora de los proyectos tienen un enfoque-de-la-calle de en medio. Ellos insisten en que comnmente / trunk compilar y pasar las pruebas de regresin en todo momento. Una rama de la funcionalidad slo es necesaria cuando el cambio requiere de un gran nmero de confirmaciones desestabilizador. Una buena regla de oro es para hacer esta pregunta: si el desarrollador trabajado durante das en aislamiento y luego cometi el gran cambio de una sola vez (para que / trunk nunca fueron destabil-zado), sera un cambio demasiado grande para revisar? Si la respuesta a esa pregunta es "s", entonces el cambio se debe desarrollar en una rama de la caracterstica. Como desarrollador confirma los cambios incrementales en la rama, que pueden ser fcilmente evaluados por pares. Por ltimo, est la cuestin de cmo mantener mejor una rama de la caracterstica de "sincronizacin" con el tronco como trabajo pro-gresos. Como hemos mencionado anteriormente, hay un gran riesgo de trabajar en una rama durante semanas o meses, los cambios del tronco pueden continuar a llegar, hasta el punto donde las dos lneas de desarrollo son tan diferentes que se convierta en una pesadilla tratando de fusionar la rama hasta el tronco. Esta situacin es mejor evitar la fusin de regular los cambios del tronco a la rama. Hacer una poltica: una vez a la semana, combinar la pena el de la semana pasada de los cambios del tronco a la rama. Tenga cuidado al hacer esto, el mer-ging necesita ser rastreado a mano para evitar el problema de las fusiones repetidas (como se describe en la seccin llama "Tracking fusiona de forma manual"). Tendr que escribir mensajes de registro cuidadoso detallando exactamente qu rangos de revisiones se han fusionado ya (como se demuestra en laseccin llamada "La fusin de un todo Rama a otra "). Puede sonar intimidante, pero en realidad es bastante fcil de hacer. En algn momento, usted estar listo para combinar el "sincronizado" rama de caracterstica al tronco. Para ello, comenzar por hacer una fusin final de los ltimos cambios del tronco a la rama. Cuando se hace eso, las ltimas versiones de la rama y del tronco sern absolutamente iguales excepto por sus cambios en la rama. As que en este caso especial, sera fusionar comparando la rama con el tronco:

62 Crear ramas y fusionarlas $ Cd tronco a una copia local $ Svn update En la revisin de 1910. $ Svn merge http://svn.example.com/repos/calc/trunk @ 1910 \ http://svn.example.com/repos/calc/branches/mybranch @ 1910 U real.c U integer.c A newdirectory A newdirectory / newfile . . . Al comparar la revisin HEAD del tronco con la revisin HEAD de la rama, se est definiendo un delta que describe slo los cambios realizados en la rama, las dos lneas de desarrollo que ya tienen todos los cambios del tronco. Otra forma de pensar acerca de este patrn es que la sincronizacin semanal de tronco en rama es anloga a la ejecucin de svn update en una copia de trabajo, mientras que la etapa final de mezcla es anloga a la ejecucin de svn commit de una copia de trabajo. Despus de todo, qu otra cosa es una copia de trabajo, sino una rama privada muy superficial? Es una rama que es slo capaz de almacenar un cambio a la vez.

Cambiando la copia local de trabajo


El comando svn switch transforma una copia de trabajo existente en una rama diferente. Mientras que este comando no es estrictamente necesario para trabajar con ramas, representa un buen atajo para los usuarios. En nuestro ejemplo anterior, tras crear su rama privada, obtuvo una copia de trabajo fresca del nuevo directorio del repositorio. En su lugar, usted puede pedirle a Subversion para cambiar su copia local de / calc / trunk para reflejar la nueva ubicacin de la sucursal: $ Cd calc $ Svn info | grep URL URL: http://svn.example.com/repos/calc/trunk $ Svn interruptor http://svn.example.com/repos/calc/branches/my-calcbranch U integer.c U button.c U Makefile Se ha actualizado a la revisin 341. $ Svn info | grep URL URL: http://svn.example.com/repos/calc/branches/my-calcbranch Despus de "cambiar" a la rama, su copia de trabajo no es diferente a lo que se obtendra de hacer una nueva compra de la gua. Y por lo general es ms eficiente usar este comando, ya que a menudo las ramas slo difieren en un pequeo grado. El servidor enva slo el conjunto mnimo de cambios necesarios para hacer que su copia de trabajo refleje el directorio rama. El comando svn switch tambin una opcin - revision (-r), por lo que no necesita siempre mueva su copia de trabajo a la "punta" de la rama. Por supuesto, la mayora de los proyectos son ms complicados que nuestro ejemplo calc, y contienen mltiples subdirector-s. Usuarios de Subversion frecuentemente siguen un algoritmo especfico al usar ramas:

63 Crear ramas y fusionarlas 1. 2. Copie todo el "tronco" del proyecto a un nuevo directorio rama. Cambiar slo parte de la copia de trabajo del tronco para reflejar la rama.

En otras palabras, si un usuario sabe que el poder-el trabajo slo tiene que ocurrir en un subdirectorio especfico, usar svn switch para mover slo ese subdirectorio a la rama. (A veces los usuarios cambian un nico fichero de trabajo de la rama!) De esta forma, pueden continuar recibiendo actualizaciones "troncales" normales a la mayora de su copia de trabajo, pero las porciones que cambi permanecer inmune (a menos que alguien hace un cambio de su sucursal). Esta caracterstica aade una nueva dimensin al concepto de una "copia de trabajo mixto"-no slo puede copias de trabajo contienen una mezcla de revisiones, sino una mezcla de ubicaciones de repositorio tambin. Si su copia de trabajo contiene una serie de sub rboles cambiados desde diferentes ubicaciones del repositorio, que si-gue funcione con normalidad. Cuando actualice, recibir los parches a cada sub rbol. Cuando se confirma, los cambios locales seguirn siendo aplicados como un cambio atmico nico al repositorio. Tenga en cuenta que aunque est bien que su copia de trabajo para reflejar una mezcla de ubicaciones de repositorio, estas loca-ciones deben estar todos en el mismo repositorio. Repositorios de Subversion todava no son capaces de comunicarse entre s, eso es una caracterstica planeada ms all de

Subversion 1.0.5

Cambios actualizaciones

Ha notado que la salida de svn switch y svn update parecen iguales? El comando de cambio es real-mente un superconjunto del comando de actualizacin. Cuando ejecuta svn update, est preguntndole al repositorio que compare dos rboles. El repositorio lo hace, y luego enva una descripcin de las diferencias de vuelta al cliente. La nica diferencia entre svn switch y svn update es que el comando de actualizacin siempre compara dos rutas idnticas. Es decir, si su copia de trabajo es un espejo de / calc / trunk, entonces svn update comparar automticamente su copia de trabajo de / calc / trunk a / calc / trunk en la revisin HEAD. Si va a cambiar su copia de trabajo a una sucursal, entonces svn switch comparar su copia local de / calc / trunk a algn otro directorio rama en la revisin HEAD. En otras palabras, una actualizacin mueve su copia de trabajo a travs del tiempo. Un interruptor se mueve su copia de trabajo a travs del tiempo y el espacio. Debido svn switch es esencialmente una variante de svn update, comparte el mismo comportamiento, cualquier modifica-ciones locales en su copia de trabajo es preservada cuando obtiene nuevos datos del repositorio. Esto le permite realizar todo tipo de trucos ingeniosos. Por ejemplo, suponga que tiene una copia de trabajo de / calc / trunk y realiza una serie de cambios a la misma. De repente se da cuenta de que la intencin de hacer los cambios a una rama en su lugar. No hay problema! Cuando svn cambiar su copia de trabajo a la sucursal, los cambios locales seguirn siendo. A continuacin, puede probar y que se comprometan a la rama.

Etiquetas
Otro concepto comn de control de versiones es una etiqueta. Una etiqueta es slo una "instantnea" de un proyecto en el tiempo. En Sub-

5You

puede, Sin embargo, usar svn switch con la- Trasladarsi cambia la URL de su servidor cambia y no desea abandonar una copia de trabajo existente. Vea la seccin svn switch en el Captulo 9, Referencia completa de Subversion para obtener ms informacin y un ejemplo.

64 Crear ramas y fusionarlas versin, esta idea ya parece estar en todas partes. Cada revisin del repositorio es exactamente eso-una instantnea del sistema de archivos despus de cada commit.

Sin embargo, las personas a menudo quieren dar ms familiares los nombres de las etiquetas, como lanzamiento-1.0. Y quieren hacer instantneas de subdirectorios menores del sistema de archivos. Despus de todo, no es tan fcil de recordar que lanzamiento-1.0 de una pieza de software es un subdirectorio particular de la revisin de 4822.

Crear una etiqueta simple


Una vez ms, svn copy viene al rescate. Si desea crear una instantnea de / calc / trunk exactamente como se ve en la revisin HEAD, haga una copia de la misma: $ Svn copy http://svn.example.com/repos/calc/trunk \ http://svn.example.com/repos/calc/tags/release-1.0 \ -M "Etiquetado de la versin 1.0 del proyecto 'calc'." Committed revision 351. Este ejemplo se supone que ya existe un directorio / calc / tags. (Si no es as, consultesvn mkdir). Despus de finalizar la copia, el directorio de la versin 1.0-nuevo es siempre una instantnea de cmo el proyecto se vea en la revisin HEAD en el momento de realizar la copia. Por supuesto, es posible que desee ser ms preciso sobre qu revisin exacta copiar, en caso de que otra persona puede tener cambios comprometidos con el proyecto, cuando no estaban buscando. As que si usted sabe que la revisin 350 de / calc / trunk es exactamente la instantnea que desea, puede especificarla pasando-r 350 al comando svn copy. Pero espere un momento: no es este procedimiento para crear etiquetas el mismo procedimiento se utiliz para crear una rama? S, de hecho, lo es. En Subversion, no hay diferencia entre una etiqueta y una rama. Ambas son directorios ordinarios que son creados por la copia. Al igual que con las ramas, la nica razn que un directorio copiado es una "etiqueta" se debe a que los seres humanos han decidido tratarlo de esa manera: mientras nadie enve el directo-ria, seguir siendo siempre una instantnea. Si la gente comienza a realizar cambios, se convierte en una rama. Si est administrando un repositorio, hay dos enfoques que puede tomar para la gestin de las etiquetas. El primer enfoque es "manos fuera": como una cuestin de poltica del proyecto, decidir dnde vivirn sus etiquetas, y asegrese de que todos los usuarios saben cmo tratar los directorios que copian ah. (Es decir, asegurarse de que no saben com-mit para ellos.) La segunda forma es ms paranoica: se puede utilizar uno de los scripts de control de acceso proporcionados con Subversion para que nadie pueda hacer nada, pero la creacin de nuevos ejemplares en las etiquetas - Zona (VerCaptulo 6, Configuracin del servidor.) El enfoque paranoide, sin embargo, no suele ser necesario. Si un usuario enva un cambio accidentalmente a una etiqueta-directorio, puede simplemente deshacer el cambio como se discuti en la seccin anterior. Este es el control de versiones, despus de todo.

Crear una etiqueta Complex


A veces puede que su "instantnea" para ser ms complicado que un solo directorio a una re-visin nica. Por ejemplo, pretende el proyecto es mucho ms grande que nuestro ejemplo calc: suponga que contiene un nmero de subdirectorios y muchos ms ficheros. En el curso de su trabajo, usted puede decidir que usted necesita para cre-ate una copia de trabajo que est diseado para tener caractersticas y correcciones de errores. Esto se puede hacer de forma selectiva los archivos o directorios fechas anteriores a la versin particulares (usando svn update-r liberal), o cambiando los archivos y directorios a ramas particulares (haciendo uso de svn switch). Cuando haya terminado, su copia de trabajo es un batiburrillo de ubicaciones de repositorio de diferentes revisiones. Pero despus de la prueba, usted sabe que es la combinacin exacta de los datos que necesita. Es hora de hacer una foto. Copia de una URL a otra no va a funcionar aqu. En este caso, usted desea hacer una instantnea de su disposicin exacta copia de trabajo y almacenarlo en el repositorio. Por suerte, svn copy ac-tualmente tiene cuatro usos diferentes (que se puede leer en el captulo 9), incluyendo la capacidad para copiar un

65

Crear ramas y fusionarlas rbol copia repositorio: $ Ls mi-copia trabajo / de trabajo al

de

$ Svn copy-mi copia de trabajo http://svn.example.com/repos/calc/tags/mytag Committed revision 352. Ahora hay un nuevo directorio en el repositorio, / calc / tags / MyTag, que es una instantnea exacta de su copia de trabajo las revisiones mixtas, URLs, y todo. Otros usuarios han encontrado usos interesantes de esta caracterstica. A veces hay situaciones en las que usted tiene un montn de cambios locales realizados en su copia de trabajo, y que le gustara a un colaborador para verlos. En lugar de ejecutar svn diff y enviar un fichero de parche (el cual no captura cambios en el rbol, los cambios de enlace simblico o cambios en las propiedades), se puede utilizar en su lugar svn copy para "cargar" su copia de trabajo a una zona privada del repositorio. Su colaborador puede entonces obtener una copia literal de su copia de trabajo, o usar svn merge para recibir sus cambios exactos.

Mantenimiento Poder
Usted puede haber notado que Subversion es extremadamente flexible. Dado que implementa ramas y etiquetas con el mismo mecanismo (copias de directorio), y porque las ramas y etiquetas aparecen en el espacio normal del sistema de archivos, mucha gente encuentra Subversion intimidante. Es casi demasiado flexible. En esta seccin, vamos a ofrecer algunas sugerencias para la organizacin y gestin de sus datos a travs del tiempo.

Organizacin del repositorio


Hay algunas formas estndar y recomendadas de organizar un repositorio. La mayora de la gente crea un tronco dir-ectory para mantener la "lnea principal" de desarrollo, un directorio de oficinas para contener copias de las ramas, y un directorio de etiquetas que contienen copias de la etiqueta. Si un repositorio contiene slo un proyecto, entonces gente a menudo crea estos directorios de nivel superior: / Trunk / Branches / Tags Si un repositorio contiene mltiples proyectos, los administradores normalmente indexa por proyecto (vase elseccin "Escogiendo el esquema de repositorio" para leer ms acerca de las "races" del proyecto): / Pintura / trunk / Pintura / ramas / Pintura / etiquetas / Calc / trunk / Calc / branches

/ Calc / etiquetas Por supuesto, usted es libre de ignorar estos patrones comunes. Usted puede crear cualquier tipo de variacin, lo que funcione mejor para usted o su equipo. Recuerde que lo que usted elige, no es un compromiso permanente. Puede reorganizar su repositorio en cualquier momento. Dado que las ramas y las etiquetas son ordinarias director-s, el comando svn move puede moverlos o renombrarlos como desee. Cambiar de una disposicin a otra es slo una cuestin de ejecutar una serie de movimientos en el servidor, y si no te gusta la forma en que las cosas son o-ganizado en el repositorio, simplemente moviendo los directorios.

66 Crear ramas y fusionarlas Recuerde, sin embargo, que mientras se mueve directorios puede ser fcil de hacer, tiene que ser considerado con sus usuarios tambin. Sus movimientos pueden desorientar a los usuarios con sus copias de trabajo. Si un usuario tiene una copia de trabajo de un directorio del repositorio en particular, su operacin svn move quizs elimine la ruta de la ltima revisin. Cuando el usuario ejecute svn update, se le dijo que su copia de trabajo represivos padres un camino que ya no existe, y el usuario se ver forzado a hacer svn switch a otra ubicacin.

Vidas de datos
Otra caracterstica interesante del modelo de Subversion es que las ramas y las etiquetas pueden tener vidas infinitas, al igual que cualquier otro elemento versionado. Por ejemplo, suponga que finalmente termina todo su trabajo en su rama personal del proyecto calc. Despus de la fusin de todos los cambios de nuevo en / calc / trunk, no hay necesidad de que el directorio de la rama privada permanezca visible: $ Svn branch \ eliminar http://svn.example.com/repos/calc/branches/my-calc-

-M "Extraccin rama obsoleta del proyecto calc." Committed revision 375. Y ahora se ha ido a su sucursal. Por supuesto no ha desaparecido realmente: el directorio simplemente falta en la revisin HEAD, ya no distrae a nadie. Si utiliza svn checkout, svn switch, o svn list para exami-nar una revisin anterior, usted todava ser capaz de ver su antigua rama. Si navegar por su directorio borrado no es suficiente, siempre se puede traer de vuelta. Resucitar datos es muy fcil en Subversion. Si hay un directorio borrado (o archivo) que desea traer de vuelta a la cabeza, simplemente use svn copy-r para copiar de la revisin antigua: $ Svn copy-r 374 http://svn.example.com/repos/calc/branches/my-calc-branch \ http://svn.example.com/repos/calc/branches/my-calc-branch Committed revision 376. En nuestro ejemplo, su rama personal tuvo una vida relativamente corta: es posible que haya creado para arreglar un error o implementar una nueva caracterstica. Cuando se lleva a cabo su tarea, por lo que es la rama. En el desarrollo de software, sin embargo, tambin es comn tener dos ramas "principales" que viven lado a lado durante perodos muy largos. Por ejemplo, supongamos que es hora de lanzar una versin estable del proyecto calc al pblico, y usted sabe que va a tomar un par de meses corregir posibles fallos del software. Usted no quiere que la gente aada nuevas caractersticas al proyecto, pero no quiere decir que todos los desarrolladores que dejen de programar. As que en vez, se crea una rama "estable" del software que no cambiar mucho: $ Svn copy http://svn.example.com/repos/calc/trunk \ http://svn.example.com/repos/calc/branches/stable-1.0 \ -M "Creacin de la rama estable del proyecto calc." Committed revision 377.

Y ahora los desarrolladores son libres de continuar aadiendo caractersticas novsimas (o experimentales) a / calc / trunk, y usted puede declarar como poltica del proyecto que slo las correcciones de fallos sern realizadas en / calc/branches/stable-1.0. Es decir, que las personas continan trabajando en el tronco, un error puertos select-vamente humana fija a la rama estable. Incluso despus de que la rama estable ha enviado, es probable que contine para mantener el poder durante mucho tiempo, es decir, siempre y cuando contine para apoyar esa versin para sus usuarios.

67 Crear ramas y fusionarlas

Resumen
Hemos cubierto mucho terreno en este captulo. Hemos hablado de los conceptos de las etiquetas y ramas, y demostrado como Subversion implementa estos conceptos por copiar directorios con el comando svn copy. Hemos mostrado cmo usar svn merge para copiar cambios de una rama a otra, o deshacer cambios errneos. Hemos revisado el uso de svn switch para crear copias de trabajo mixto ubicacin. Y hemos hablado de cmo se puede gestionar la organizacin y la vida til de las ramas en un repositorio. Recuerde el mantra Subversion: ramas y etiquetas son baratos. As usarlos libremente! 68

Captulo 5. Administracin del Repositorio


El repositorio Subversion es el almacn central de datos y versiones para varios proyectos. Como tal, se convierte en un candidato obvio para todo el amor y atencin que un administrador puede ofrecer. Aunque el repositorio es generalmente un elemento de bajo mantenimiento, es importante entender cmo configurar y cuidar de l para que se evitan posibles problemas correctamente, y los problemas actuales de forma segura. En este captulo, hablaremos de cmo crear y configurar un repositorio Subversion. Tambin hablaremos acerca del mantenimiento del repositorio, incluyendo el uso de las herramientas svnlook y svnadmin (que estn provistos de Subversion). Vamos a abordar algunas preguntas y errores comunes, y haremos algunas sugerencias sobre la forma de organizar los datos en el repositorio. Si va a acceder a un repositorio Subversion slo en el papel de un usuario cuyos datos estn bajo control de versiones (es decir, a travs de un cliente de Subversion), puede saltarse este captulo completo. Sin embargo, si usted es o desea ser, un administrador de repositorio de Subversion, 1 que definitivamente debe prestar atencin a este captulo.

Fundamentos del repositorio


Antes de entrar en el tema ms amplio de la administracin del repositorio, vamos a definir an ms qu es un repositorio. Cmo se ve? Cmo se siente? Se toma el t caliente o helado, dulce, y con limn? Como administrador, se le espera para comprender la composicin de un repositorio, tanto desde el punto de vista lgico, se trata de cmo se representa la informacin en el interior del depsito y de un fsico de tuercas y pernos perspectiva cmo un repositorio se ve y acta con con respecto a las herramientas no Subversion. La siguiente seccin cubre algunos de estos conceptos bsicos en un nivel muy alto.

Descripcin de las transacciones y Revisiones

Conceptualmente hablando, un repositorio Subversion es una secuencia de rboles de directorios. Cada rbol es una instantnea de cmo los archivos y directorios versionados en tu repositorio en un momento en el tiempo. Estas instantneas se crean como resultado de las operaciones del cliente, y se llaman revisiones. Cada revisin comienza su vida como un rbol de transaccin. Al hacer un compromiso, un cliente construye un Subversion trans-accin que refleja sus cambios locales (adems de los cambios adicionales que podran haber sido realizados en el repositorio desde el comienzo del proceso de envo de datos), y luego pide al repositorio para almacenar ese rbol como la siguiente instantnea en la secuencia. Si el error, la transaccin es efectivamente promovido en un nuevo rbol de revisin, y se le asigna un nuevo nmero de revisin. Si la confirmacin falla por alguna reas-on, la transaccin se destruye y se informa al cliente de la falla. Actualizaciones trabajan de una manera similar. El cliente construye un rbol de transaccin temporal que refleja el estado de la copia de trabajo. El repositorio compara entonces ese rbol de transaccin con el rbol de revisin en la revisin solicitada (generalmente el rbol ms reciente, o "ms joven"), y enva la informacin que informa al cliente sobre los cambios necesarios para transformar su copia de trabajo en una rplica de ese rbol revisin. Despus de la actualizacin, se borra la transaccin temporal. El uso de rboles de transaccin es la nica manera de realizar cambios permanentes en sistema de ficheros versionado de un repositorio. Sin embargo, es importante entender que el tiempo de vida de una transaccin es completamente flexible. En el caso de las actualizaciones, las transacciones con rboles temporales que se destruyen inmediatamente. En el caso de las confirmaciones, las transacciones son transformadas en revisiones permanentes (o borradas si el falla). En el caso de un error o bug, es posible que una transaccin puede ser permanezca accidentalmente suelta en el reposit-ria (en realidad no afectan a nada, pero an ocupando espacio).

1 Este

puede sonar realmente prestigioso y noble, pero estamos hablando de cualquier persona que est interesada en el misterioso reino ms all de la copia de trabajo donde los datos de todo el mundo anda.

69 Administracin del Repositorio En teora, las aplicaciones de flujo de trabajo de un da completo debern girar en torno a ms de grano fino control de la vida transaccin. Es factible imaginar un sistema en el que cada transaccin que se convierta una revi-sin se permanezca en bastante despus de que el cliente termine de describir sus cambios al repositorio. Esto permitira que cada nuevo que ser revisado por alguien ms, tal vez un gerente o un equipo de ingeniera de control de calidad, que pueden elegir entre promoverla a una revisin, o abortarlo.

Propiedades no versionadas
Transacciones y las revisiones en el repositorio Subversion pueden tener propiedades asociadas a los mismos. Estas propiedades son las asignaciones de clave-a-valor genrico, y por lo general se utilizan para almacenar informacin sobre el rbol al que estn unidos. Los nombres y valores de estas propiedades se almacenan en el sistema de archivos del repositorio, junto con el resto de los datos de los rboles. Las propiedades de revisiones y transacciones son tiles para asociar informacin con un rbol que no est estrictamente relacionado con los archivos y directorios de ese rbol, el tipo de informacin que no es administrado por las copias de trabajo del cliente. Por ejemplo, cuando se crea una nueva transaccin commit en el repositorio, Subversion aade una propiedad a dicha transaccin llamada svn: date-una marca de fecha que representa el momento en que se cre la trans-accin. En el momento en el proceso de confirmacin ha terminado, y la transaccin se promueve a una revisin perma-nente, el rbol tambin se ha dado una propiedad para almacenar el nombre de usuario del autor de la revisin (svn: author) y una propiedad para almacenar el mensaje de registro unido a esa revisin (svn: log). Las propiedades de revisiones y transacciones son propiedades no versionada-cuando se modifican los valores anteriores se eliminan de forma permanente. Tambin, mientras que los rboles de revisiones

son inmutables, las propiedades adjuntas a esos rboles no son. Puede agregar, eliminar y modificar las propiedades de revisin en cualquier momento en el futuro. Si usted comete una nueva revisin y ms tarde darse cuenta de que de alguna informacin incorrecta o un error sintctico en tu mensaje de registro, slo tiene que sustituir el valor de la propiedad svn: log con un mensaje nuevo, corregida log.

Almacenes de datos del repositorio


A partir de Subversion 1.1, hay dos opciones para almacenar los datos en un repositorio Subversion. Un tipo de tiendas repositorio todo en una base de datos Berkeley DB, los dems datos de tiendas de todo tipo en archivos planos normales, uti-lizando un formato personalizado. Como los desarrolladores de Subversion a menudo se refieren a un repositorio como "el sistema de archivos (versionados)", han adoptado el hbito de referirse a este ltimo tipo de repositorio como FSFS 2-a la implementacin del sistema de archivos ver-sioned que utiliza el sistema de archivos nativo del sistema operativo para almacenar datos. Cuando se crea un repositorio, un administrador tiene que decidir si va a utilizar Berkeley DB o FSFS. Hay ventajas y desventajas de cada uno, que vamos a describir en un rato. Ni back-end es ms "oficial" que otro, y los programas que acceden al repositorio estn aislados de este detalle de implementacin. Los programas tienen ni idea de cmo un repositorio es el almacenamiento de datos, que slo ven rboles de revisiones y transacciones a travs de la API de repositorio. Tabla 5.1, "Repositorio Comparacin almacn de datos" ofrece un panorama comparativo de Berkeley DB y repositorios FSFS. Las siguientes secciones entrar en detalles.

Tabla 5.1. Repositorio almacn de datos


Caracterstica Sensibilidad a las interrupciones

Comparacin

Berkeley DB

til de un montaje de slo lectura

FSFS mismo, los accidentes y los bastante insensible. problemas de permisos pueden salir de la base de datos "en cua", que requiere procedimientos recuperacin no por diario. s

2Pronounced "fuzz-fuzz", si Jack Repenning tiene algo que decir al respecto.

70 Administracin del Repositorio Berkeley DB Caracterstica Almacenamiento independiente de la no plataforma Utilizable sobre sistemas de archivos no de red Tama o Repositorio un poco ms grande Escalabilidad: nmero de rboles de revisiones Escalabilidad: directorios con muchos archivos Velocidad: el registro de salida el ltimo cdigo Velocidad: gran cometa Permisos del grupo de manejo Madurez Cdigo base de datos; no hay problemas FSFS s s ligeramente menor algunos sistemas de archivos nativos mayores no escala bien con miles de entradas en un solo directorio. ms rpido ms lento

ms lento ms rpido

ms lento, pero el trabajo se extendi ms rpido, pero el retardo por todo compromiso finalizacin puede causar tiempos de de los clientes obras alrededor de problemas umask sensibles a los problemas de umask espera usuario; mejor si accede por un solo usuario. en uso desde 2001 en uso desde 2004

Berkeley DB
Cuando la fase de diseo inicial de Subversion estaba en marcha, los desarrolladores decidieron usar Berkeley DB para una variedad de razones, como su licencia open-source, soporte de transacciones, fiabilidad, rendimiento, simplicidad API, hilos de seguridad, soporte para cursores, y as sucesivamente. Berkeley DB soporte real de transacciones-quizs su caracterstica ms poderosa. Mltiples procesos que tienen acceso a sus repositorios de Subversion no tienen que preocuparse por pisotear los datos de cada uno. El aislamiento que proporcionan el sistema de transacciones es tal que para cualquier operacin dada, el cdigo de repositorio Subversion tiene una vista esttica de la base de datos, no una base de datos que est en constante cambio de la mano de algn otro proceso y puede tomar decisiones sobre la base de esa opinin. Si la decisin est en conflicto con lo que otro proceso est haciendo, toda la operacin se deshace como si nunca hubiera sucedido, y Subversion reintenta la operacin contra una nueva actualizacin visin, (y an as esttica) de la base de datos. Otra gran caracterstica de Berkeley DB es copias de seguridad-el calor capacidad de copia de seguridad del entorno de base de datos sin tener que "fuera de lnea". Hablaremos de cmo hacer copia de seguridad del repositorio en la seccinllamado "Copia de seguridad del repositorio", Pero los beneficios de ser capaz de hacer copias totalmente funcionales de tus repositorios sin debera ser obvia. Berkeley DB es tambin un sistema de base de datos muy fiable. Subversion utiliza las facilidades de registro de Berkeley DB, lo que significa que la base de datos primero escribe en archivos de registro en disco una descripcin de las modificaciones que est a punto de hacer, y luego hace la propia modificacin. Esto es para asegurar que si algo sale mal, el sistema de base de datos puede realizar copias de seguridad a un checkpoint-una ubicacin en los archivos de registro se sabe que no es y corruptas-repetir transacciones hasta que se restauran los datos a un estado utilizable. Consulte la seccinllamado "Administracin de espacio en disco" la informacin sobre los archivos de registro de base de datos Berkeley. Pero toda rosa tiene su espina, y as debemos sealar algunas limitaciones conocidas de Berkeley DB. En primer lugar, los entornos de Berke-ley DB no son porttiles. Usted no puede copiar simplemente un repositorio Subversion que fue creado en un sistema Unix en un sistema Windows y esperar que funcione. Si bien gran parte del formato de datos de la base de datos Berkeley es independiente de la arquitectura, hay otros aspectos del medio ambiente que no lo son. En segundo lugar, Subversion utiliza Berkeley DB en una forma que no funcionar en Windows 95/98 sistemas, si usted necesita para albergar un repositorio en una mquina Windows, qudese con Windows 2000 o Windows XP. Adems, nunca se debe mantener un repositorio Berkeley DB en una unidad de red compartida. Mientras Berkeley DB se compromete a comportarse correctamente en recursos compartidos de red que cumplan un determinado conjunto de especificaciones, casi no comparte conocido cumple con todas las especificaciones. Finalmente, debido a Berkeley DB es una biblioteca vinculada directamente en Subversion, es ms sensible a la interrupcin

71 Administracin del Repositorio

FSFS
ciones que un sistema de base de datos relacional tpica. La mayora de sistemas SQL, por ejemplo, tienen un proceso de servidor dedicado que media el acceso a las tablas. Si un programa de acceso a la base de datos se bloquea por alguna razn, el demonio de la base de datos da cuenta de la prdida de conexin y se limpia cualquier desorden dejado atrs. Y debido a que el demonio de la base de datos es el nico proceso para acceder a las tablas, las aplicaciones no tienen que preocuparse por los conflictos permiso. Estas cosas no son el caso de Berkeley DB, sin embargo. Subversion (y programas de us-cin libreras de Subversion) acceder directamente a las tablas de la base, lo que significa que una cada del programa puede dejar la base de datos en un estado inaccesible temporalmente inconsistente. Cuando esto ocurre, el administrador debe preguntarse Berkeley DB para restaurar a un punto de control, que es un poco de una molestia. Otras cosas que pueden causar un depsito de "cua", adems de los procesos estrellados, como los programas en conflicto sobre la propiedad y el per-misiones en los archivos de

base de datos. As, mientras que un repositorio Berkeley DB es bastante rpido y escalable, es mejor utilizado por un proceso de un solo servidor se ejecuta como un usuario, como httpd o svnserve de Apache (ver Captulo 6, Configuracin del servidor), En vez de ingresar a tantos usuarios diferentes a travs file :/ / / o svn + ssh :/ / URLs. Si utiliza un repositorio Berkeley DB directamente como varios usuarios, asegrese de leer la"Ofrecer mltiples mtodos de acceso al repositorio". A mediados de 2004, un segundo tipo de sistema de almacenamiento repositorio surgi: uno que no utiliza una base de datos en absoluto. Un repositorio FSFS almacena un rbol de revisin en un solo archivo, y as todas las revisiones del repositorio se puede encontrar en un solo subdirectorio completo de archivos numerados. Las transacciones se crean en subdirectorios-ectories separadas. Cuando se haya completado, se crea un nico archivo de transacciones y se movi al directorio revisiones, lo que garantiza que comete son atmicas. Y como un archivo de revisin es permanente e inmutable, el repositorio puede ser una copia de seguridad, mientras que "caliente", al igual que un repositorio Berkeley DB. El formato de la revisin de archivos representa la estructura de una revisin del directorio, el contenido del archivo y deltas contra archivos en otros rboles de revisiones. A diferencia de una base de datos Berkeley, este formato de almacenamiento es portable a travs de diferentes sistemas operativos y no es sensible a la arquitectura de la CPU. Porque no hay ningn diario o los archivos de memoria compartida que se utilizan, el repositorio se puede acceder de forma segura a travs de un sistema de archivos de red y se examina en un entorno de slo lectura. La falta de sobrecarga base de datos tambin significa que el tamao total repositorio es un poco ms pequeo. FSFS tiene diferentes caractersticas de rendimiento tambin. Cuando la comisin de un directorio con un gran nmero de archivos, FSFS utiliza un algoritmo O (N) para anexar las entradas, mientras que Berkeley DB utiliza un algoritmo O (N ^ 2) para volver a escribir todo el directorio. Por otro lado, FSFS escribe la ltima versin de un archivo como un delta contra una versin anterior, lo que significa que la salida a la ltima rbol es un poco ms lento que ir a buscar los textos completos almacenados en una base de datos Berkeley revisin HEAD. FSFS tambin tiene un mayor retraso en la finalizacin de un compromiso, lo que podra, en casos extremos, hacer que los clientes se agote el tiempo mientras espera una respuesta. La distincin ms importante, sin embargo, es la incapacidad de FSFS ser "metido" cuando algo va mal. Si un procedimiento que utiliza una base de datos Berkeley DB se encuentra con un problema de permisos o de repente se estrella, la base de datos se queda inutilizable hasta que un administrador recupera. Si los mismos escenarios pasan a un procedimiento que utiliza un repositorio FSFS, el repositorio no se ve afectada en absoluto. En el peor, algunos datos de la transaccin queda de-trs. El nico argumento real contra FSFS es su relativa inmadurez en comparacin con Berkeley DB. No se ha utilizado o el estrs-probado casi lo mismo, por lo que muchas de estas afirmaciones sobre la velocidad y la escalabilidad son slo eso: afirmaciones, basadas en buenas conjeturas. En teora, promete una barrera baja de entrada para los administra-dores nuevo y es menos susceptible a los problemas. En la prctica, slo el tiempo lo dir.

Creacin y Configuracin de Repositorios


Creacin de un repositorio Subversion es una tarea increblemente simple. La utilidad svnadmin, provista con Subversion, tiene un subcomando para hacer precisamente eso. Para crear un nuevo repositorio, simplemente ejecuta: $ Svnadmin create / path / to / repos

72 Administracin del Repositorio Esto crea un nuevo repositorio en el directorio / ruta / al / repositorio. Este nuevo repositorio comienza su vida en la revisin 0, que se define a consistir en otra cosa que el (/) del sistema de ficheros raz de nivel superior. Inicialmente, la revisin 0 tiene tambin una propiedad de revisin, svn: date, que el momento en que se cre el repositorio.

En Subversion 1.2, se crea un repositorio con un back-end FSFS por omisin (consulte laseccin llamada "Almacenes de datos del repositorio"). El back-end puede ser elegido de forma explcita con el argumento - fs-type: $ Svnadmin create - fsfs tipo fs / ruta / al / repositorio $ Svnadmin create - fs-type bdb / path / to / otros / repos

Adverte ncia
No crear un repositorio Berkeley DB en una unidad de red en acciones que no puede existir en un sistema de archivos remoto como NFS, AFS o Windows SMB. Berkeley DB requiere que el sistema de ficheros subyacente implemente estrictamente la semntica de bloqueo POSIX, y lo ms importante, la capacidad de asignar los archivos directamente en la memoria del proceso. Casi ningn sistema de ficheros de red proporcionan estos rasgos. Si intenta usar Berkeley DB en una unidad de red compartida, los resultados son impredecibles-puede que veas errores misteriosos, o pueden pasar meses antes de que descubra que su base de datos del repositorio est corrupta de una forma inimaginable. Si necesita varios ordenadores para acceder al repositorio, se crea un repositorio FSFS en el recurso compartido de red, no un repositorio Berkeley DB. O mejor an, crear un proceso de servidor real (como Apache o svnserve), almacenar el repositorio en un sistema de archivos local que el servidor puede acceder y hacer el repositorio disponible en una red.Captulo 6, Servidor Configur- acin cubre este proceso en detalle. Usted puede haber notado que el argumento de ruta de svnadmin fue slo una ruta de sistema de archivos regular y no una URL como el programa cliente svn usa cuando se refiere a los depsitos. Tanto svnadmin y svnlook son considerados servicios pblicos-que del lado del servidor se utilizan en la mquina donde reside el repositorio para examinar o modificar aspectos del repositorio, y son, de hecho, no puede realizar las tareas a travs de una red. Un error comn de los recin llegados a Subversion es tratar de pasar URLs (incluso archivos "local": unos) a estos dos programas. As, despus de que ha ejecutado el comando svnadmin create, tienes un nuevo repositorio Subversion brillante en su propio directorio. Echemos un vistazo a lo que realmente se crea dentro de ese subdirectorio. $ Ls repos conf / dav / db / Formato ganchos / cerraduras / README.txt Con la excepcin de los archivos README.txt y formato, el directorio del repositorio es una coleccin de subdirectorios. Al igual que en otras reas del diseo de Subversion, modularidad se le tiene mucho respeto, y la organizacin jerarca-ca es preferible al caos desordenado. He aqu una breve descripcin de todos los elementos que aparecen en su nuevo directorio del repositorio: conf Un directorio que contiene los archivos de configuracin de repositorios. dav Un directorio para Apache y mod_dav_svn para su economa privada de datos. db Cuando todos los datos versionados reside. Este directorio es o bien un entorno de base de datos Berkeley (lleno de tablas de BD

73 Administracin del Repositorio y otras cosas), o es un ambiente FSFS que contiene los archivos de revisin. format o Un archivo cuyo contenido es un valor entero que determina el nmero de versin del diseo del repositorio. ganch os Una gua completa de plantillas de script gancho (y scripts gancho a s mismos, una vez que haya instalado algunos). cabel los Un directorio para el bloqueo de datos de repositorio de Subversion, que se utiliza para el seguimiento de acceso al repositorio. README.txt Un archivo que se limita a informar a sus lectores que estn buscando a un repositorio de Subversion. En general, no debe alterar su repositorio "a mano". La herramienta svnadmin debera ser suficiente para que los cambios necesarios en su repositorio, o usted puede mirar a herramientas de terceros (como conjunto de herramientas de base de datos Berkeley) para ajustar los incisos pertinentes del repositorio. Existen algunas excepciones, sin embargo, y las veremos aqu.

Scripts gancho
Un gancho es un programa que se activa por algn evento del repositorio, como la creacin de una nueva revisin o la modificacin de una propiedad no versionada. A cada gancho se le proporciona suficiente informacin para decirle qu evento es, sobre qu destino (s) se est operando, y el nombre de usuario de la persona que provoc el evento. En funcin de la salida del gancho o el estado de salida, el programa gancho puede continuar la accin, pararla, o sus-penden de alguna manera. Los ganchos subdirectorio es, por defecto, llenos de plantillas para varios ganchos de repositorio. $ Ls repos / hooks / post-commit.tmpl post-lock.tmpl post-revprop-change.tmpl

post-unlock.tmpl pre-commit.tmpl pre-lock.tmpl

pre-revprop-change.tmpl pre-unlock.tmpl puesta en commit.tmpl

Hay una plantilla para cada gancho que implementa el repositorio Subversion, y examinando el contenido de los guiones de la plantilla, se puede ver lo que desencadena cada uno de esos script para ejecutar y qu datos se pasan al script. Tambin estuvieron presentes en muchas de estas plantillas ejemplos de cmo se puede utilizar el guin, junto con otros programas provistos por Subversion, para realizar tareas comunes y tiles. Para instalar ac-tualmente un gancho de trabajo, slo es necesario colocar algn ejecutable o script en el directorio repos / ganchos que se pueden ejecutar como su nombre (como start-commit o post-commit) del gancho. En las plataformas Unix, esto significa que el suministro de un script o programa (que podra ser un script, un programa en Python, un binario C compilado, o cualquier nmero de otras cosas) llamado exactamente igual que el nombre del gancho. Por supuesto, los archivos de plantilla estn presentes para algo ms que informativo propsitos-la forma ms sencilla de instalar un gancho en plataformas Unix es simplemente copiar el archivo de plantilla adecuada a un nuevo fichero sin la extensin tmpl., Personalizar el contenido del gancho y asegrese de que el script sea ejecutable. De Windows, sin embargo, utiliza las extensiones de archivo para determinar si un programa es ejecutable, por lo que debera dar poner un programa cuyo nombre sea el nombre del gancho, y cuya extensin es una de las extensiones especiales reconocidas por Windows para programas ejecutables, tales como. exe o. com

para los programas y . Batpara los archivos de proceso por lotes.

Pu nta
Por razones de seguridad, el repositorio Subversion ejecuta scripts gancho con un vaco medio am-biente, es decir, hay variables de entorno estn definidas en absoluto, ni siquiera $ PATH o% PATH%. Be-causa de esto, muchos administradores estn desconcertados cuando su script gancho funciona muy bien con la mano,

74 Administracin del Repositorio pero no funciona cuando se ejecuta por Subversion. Asegrese de establecer explcitamente variables de entorno en su gancho y / o utilizar rutas absolutas a los programas. Hay nueve ganchos implementados por el repositorio Subversion: puesta en comprometerse Es ejecutado antes de haber creado la transaccin de confirmacin. Normalmente se utiliza para decidir si el usuario ha cometer privilegios en absoluto. El repositorio pasa dos argumentos a este programa: la ruta al repositorio, y el nombre de usuario que est tratando de confirmar. Si el programa devuelve un valor de salida distinto de cero, la confirmacin se detuvo antes de haber creado la transaccin. Si el programa gancho escribe datos en stderr, se comand al cliente. pre-commit Esto se ejecuta cuando se complete la transaccin, pero antes de que se ha comprometido. Tpicamente, este gancho se utiliza para proteger contra el cometa, que son rechazados debido a contenido o ubicacin (por ejemplo, su sitio puede requerir que todas las confirmaciones a una rama determinada incluyan un nmero de ticket del seguimiento de fallos, o que el mensaje de registro de entrada no est vaca). El repositorio pasa dos argumentos a este programa: la ruta al repositorio, y el nombre de la operacin que se cometen. Si el programa devuelve un valor de salida distinto de cero, el compromiso se cancela y se retira la transaccin. Si el programa gancho escribe datos en stderr, se comand al cliente. La distribucin de Subversion incluye algunos scripts de control de acceso (ubicado en el directorio tools / hook-scripts dir-ectory del rbol de fuentes de Subversion) que se puede llamar desde pre-commit para implementar de grano fino, control de prdidas y el acceso. Otra opcin es utilizar el mdulo de Apache httpd mod_authz_svn, que proporciona lectura y escritura control de acceso en directorios individuales (vase elseccin llamada "Control de acceso por directorio"). En una versin futura de Subversion, planeamos implementar listas de control de acceso (ACLs) directamente en el sistema de archivos. despus de comprometerse Este se ejecuta despus de que se confirme la transaccin, y se crea una nueva revisin. La mayora de la gente usa este gancho para enviar correos descriptivos acerca de la confirmacin o para hacer una copia de seguridad del repositorio. El repositorio pasa dos argumentos a este programa: la ruta al repositorio, y el nuevo nmero de revisin que se ha creado. El cdigo de salida del programa es ignorado. La distribucin de Subversion incluye scripts mailer.py y compromiso email.pl (ubicado en el directorio tools / hook-scripts / del rbol de fuentes de Subversion) que pueden ser utilizados para enviar correos electrnicos con (y / o anexar a un archivo de registro) a Descripcin de un commit dado. Este correo contiene una lista de las rutas que fueron cambiadas, el mensaje de registro adjunto a la confirmacin, el autor y la fecha de la

confirmacin, as como una pantalla de estilo GNU diff de los cambios realizados en los distintos ficheros versionados como parte de la cometer. Otra herramienta til de Subversion es el script hot-backup.py (ubicado en el directorio tools / backup / directory del rbol de fuentes de Subversion). Este script realiza copias de seguridad caliente de su repositorio Subversion (una funcin de apoyo de la base de datos Berkeley DB de fondo), y se puede utilizar para hacer una foto por cada confirmacin de su repositorio para la recuperacin de archivos o de emergencia. pre-revprop de cambio Debido a las propiedades de revisin de Subversion no se versionan, al hacer modificaciones a estas propiedades (por ejemejemplo, la propiedad svn: log propiedad del mensaje commit) sobreescribir el valor anterior de esa propiedad para siempre. Puesto que los datos pueden ser potencialmente perder, Subversion provee este gancho (y su contraparte, la post-rev-prop-cambio), de modo que los administradores de repositorios puedan mantener un registro de los cambios en estos elementos mediante algn medio exter-nos, si as lo desean. Como medida de precaucin contra la prdida de datos de propiedades no versionadas, no se les permitir a los clientes de Subversion modificar remotamente las propiedades de revisin en absoluto a menos que este gancho se implemente para su repositorio. Este gancho se ejecuta justo antes de realizar una modificacin en el repositorio. El repositorio pasa cuatro argumentos de este libro: la ruta al repositorio, la revisin en el que existe la propiedad a ser modificado, el nombre autntico-ATED de la persona que hace el cambio, y el nombre de la propiedad en s. post-revprop de cambio Como se mencion anteriormente, este gancho es la contrapartida del gancho pre-revprop de cambio. De hecho, en aras de la paranoia, este script no se ejecutar a menos que exista el gancho pre-revprop de cambio. Cuando ambos son anzuelos 75 Administracin del Repositorio Actualmente, el gancho post-revprop de cambio se ejecuta justo despus de una propiedad de revisin ha cambiado, y es tipico-mente utilizada para enviar un correo electrnico que contiene el nuevo valor de la propiedad que ha cambiado. El repositorio pasa cuatro argumentos a este gancho: la ruta al repositorio, la revisin en el que existe la propiedad, el nombre de usuario autenticado de la persona que hace el cambio, y el nombre de la propiedad en s. La distribucin de Subversion incluye un script propchange-email.pl (ubicado en el directorio tools / hookscripts / del rbol de fuentes de Subversion) que se puede utilizar para enviar correo electrnico con (y / o anexar a un archivo de registro) la de-colas de un cambio de propiedad de revisin. Este correo electrnico contiene la revisin y el nombre de la propiedad modificada, el usuario que realiz el cambio, y el nuevo valor de la propiedad. pre-bloqueo Este gancho se ejecuta cada vez que alguien intenta bloquear un archivo. Puede ser utilizado para prevenir bloqueos por completo, o para crear una poltica ms compleja que especifica exactamente qu se les permite a los usuarios bloquear los caminos particulares. Si el gancho nota un bloqueo pre-existente, tambin puede decidir si un usuario puede "robar" el candado existente. El repositorio pasa tres argumentos al gancho: la ruta al repositorio, la ruta est bloqueada y el usuario que intenta realizar el bloqueo. Si el programa devuelve un valor de salida distinto de cero, la accin de bloqueo se interrumpe nada impreso en stderr se comand al cliente. despus de la cerradura Este gancho se ejecuta despus de una ruta de acceso est bloqueado. El camino bloqueado se pasa al stdin del gancho, y el gancho tambin recibe dos argumentos: la ruta al repositorio, y el usuario que realiza el bloqueo. El gancho es libre de enviar notificacin por correo electrnico o grabar el evento en la manera que desee. Debido a que el bloqueo que ya pas, se pasa por alto la salida del gancho. pre-unlock Este gancho se ejecuta cada vez que alguien intenta quitar un bloqueo en un archivo. Puede ser utilizado para crear polticas que espe-

cify que se les permite a los usuarios abrir caminos particulares. Es particularmente importante para la determinacin de las polticas sobre la rotura de bloqueo. Si el usuario A cierra un archivo, el usuario B est permitido romper el bloqueo? Y si el bloqueo es ms de una semana? Este tipo de cosas pueden ser decididas y ejecutadas por el gancho. El repositorio pasa tres argumentos al gancho: la ruta al repositorio, el camino est abierto y el usuario intenta eliminar el bloqueo. Si el programa devuelve un valor de salida distinto de cero, la accin de desbloqueo se aborta y nada impreso en stderr est comandada de nuevo al cliente. post-unlock Este gancho se ejecuta despus de que se abri un camino. El camino abierto se pasa al stdin del gancho, y el gancho tambin recibe dos argumentos: la ruta al repositorio, y el usuario que lo retir de la cerradura. El gancho es libre de enviar notificacin por correo electrnico o grabar el evento en la manera que desee. Debido a la eliminacin de bloqueo que ya pas, se ignora la salida del gancho.

Adverte ncia
No intente modificar la transaccin mediante scripts gancho. Un ejemplo comn de esto sera para ajustar automticamente las propiedades tales como svn: eol-style o svn: mimetype durante la confirmacin. Si bien esto puede parecer una buena idea, que cause problemas. El problema principal es que el cliente no sabe nada de la modificacin introducida por el script gancho, y no hay manera de informar al cliente de que est fuera de fecha. Esta inconsistencia puede conducir a un comportamiento sorprendente e inesperado. En lugar de intentar modificar la transaccin, es mucho mejor para comprobar la transaccin en el gancho pre-commit y rechazar el compromiso si no cumple con los requisitos deseados. Subversin tratar de ejecutar los ganchos como el mismo usuario que posee el proceso que est accediendo al repositorio Subversion. En la mayora de los casos, se est accediendo al repositorio a travs del servidor HTTP Apache y mod_dav_svn, por lo que este usuario es el mismo usuario que ejecuta Apache. Los propios ganchos tendrn que ser configurado con los permisos OS-nivel que permiten que el usuario ejecutar ellos. Adems, se puede acceder a esto significa que cualquier archivo o programas (incluyendo el repositorio mismo) al acceder directa o indirectamente por el gancho con el mismo usuario. En otras palabras, estar atentos a los posibles problemas relacionados con permisos que podra

76 Administracin del Repositorio evitar que el gancho de la realizacin de las tareas que ha escrito que ste realice.

Berkeley DB de configuracin
Un entorno de base de datos Berkeley es una encapsulacin de una o ms bases de datos, archivos de registro, ficheros regionales y ficheros de configuracin. El entorno de base de datos Berkeley tiene su propio conjunto de valores de configuracin predeterminados para las cosas como el nmero de la base de datos de bloqueos permitido que ser sacado en un momento dado, o el tamao mximo de los ficheros de registro, el cdigo del sistema de archivos, etc de Subversion elige adems valores por defecto para algunas de las opciones de configuracin de base de datos Berkeley. Sin embargo, a veces su repositorio en particular, con su coleccin nica de datos y patrones de acceso, puede requerir un conjunto diferente de opcin de configuracin de valores. La gente de Sleepycat (los productores de Berkeley DB) entender que las diferentes bases de datos

tienen diferentes necesidades, por lo que han proporcionado un mecanismo para anular en tiempo de ejecucin muchos de los valores de configura-cin para el medio ambiente Berkeley DB. Berkeley comprueba la presencia de un archivo con el nombre DB_CONFIG en cada directorio del entorno, y analiza las opciones que se encuentran en ese archivo para su uso con ese entorno Berkeley particular. El archivo de configuracin de Berkeley para su repositorio se encuentra en el directorio del entorno db, en re-pos / db / DB_CONFIG. Subversion crea este archivo cuando se crea el resto del repositorio. El fichero inicialmente contiene algunas opciones por defecto, as como punteros a la documentacin de Berkeley DB en lnea para que pueda saber qu significan dichas opciones tienen. Por supuesto, usted es libre de aadir cualquiera de las opciones de Berke-ley DB apoyo a su archivo DB_CONFIG. Slo ten en cuenta que mientras Subversion no trata de leer o interpretar el contenido del archivo, y no hace uso de sus opciones de configuracin, usted querr evitar cualquier cambio de configuracin que pueden causar Berkeley DB se comporte de una manera que es inesperado por el resto del cdigo de Subversion. Adems, los cambios realizados en DB_CONFIG no entrarn en vigor hasta que se recupere el entorno de base de datos (usando svnadmin recover).

Mantenimiento del repositorio


El mantenimiento de un repositorio Subversion puede ser una tarea desalentadora, sobre todo debido a la complejidad inherente a los sistemas que tienen una base de datos de backend. Si lo hace bien la tarea, basta con conocer las herramientas-qu son, cundo usarlos y cmo usarlos. En esta seccin se le dar a conocer las herramientas de adminis-tracin provee Subversion, y cmo utilizarlas para realizar tareas tales como repositorio mi-graciones, actualizaciones, copias de seguridad y limpiezas.

Kit de herramientas del administrador


Subversion proporciona un conjunto de utilidades para crear, inspeccionar, modificar y reparar su repositorio. Echemos un vistazo ms de cerca cada una de estas herramientas. Despus, vamos a examinar brevemente algunos de los servicios incluidos en la distribucin Berkeley DB que proporcionan funcionalidad especfica para la base de datos back-end de su repositorio no se disponga otra cosa por las propias herramientas de Subversion.

svnlook
svnlookes una herramienta provista por Subversion para examinar las revisiones y transacciones en un repositorio. Ninguna parte de este programa intenta cambiar el repositorio-es una herramienta de "slo lectura". svnlook es utilizada normalmente por el repositorio ganchos para informar de los cambios que estn a punto de realizar (en el caso de que el gancho pre-commit), o que se acaban de hacer (en el caso de que el gancho post-commit) en el repositorio. Un administrador del repositorio puede utilizar esta herramienta para fines de diagnstico. svnlook tiene una sintaxis sencilla: $ ayuda Svnlook

uso general: svnlook SUBCOMMAND REPOS_PATH [PARAMS y OPCIONES ...] 77 Administracin del Repositorio Nota: todo subcomando que tome los parmetros '- revision' y 'transaccin' opciones, si se invoca sin una de estas opciones, actuar sobre la revisin ms reciente del repositorio. Escriba "help <subcomando> svnlook" para ayuda sobre un subcomando especfico. . . .

Casi cada uno de los subcomandos de svnlook puede operar en una revisin o un rbol de transaccin, informacin de im-presin sobre el rbol en s, o en qu se diferencia de la revisin anterior del repositorio. Utilice el parmetro - revision y - opciones de transaccin para especificar qu revisin o transaccin, respectiva-mente, para examinar. Tenga en cuenta que mientras que los nmeros de revisin se ven como nmeros naturales, los nombres de transaccin son cadenas al-alfanumricos. Tenga en cuenta que el sistema de ficheros slo permite navegar entre transacciones no confirmadas (transaccin que no han dado lugar a una nueva revisin). La mayora de los repositorios no tendrn este tipo de transacciones, ya que las transacciones normalmente son confirmadas (que puedan ser examinadas) o paradas y borradas. En ausencia de ambos la - revision y - opciones de transaccin, svnlook examinar el ms joven (o "HEAD") la revisin en el repositorio. As que las siguientes rdenes hacen exactamente lo mismo cuando 19 es la ltima revisin del repositorio ubicado en / ruta / al / repositorio: $ Svnlook info / path / to / repos $ Svnlook info / path / to revision 19

repos

La nica excepcin a estas reglas sobre subcomandos es el subcomando svnlook ms joven, que lleva sin opciones, y simplemente imprime el nmero de revisin HEAD. $ Svnlook ms jvenes / ruta / al / repositorio 19 La salida de svnlook est diseado para ser a la vez humana-y-mquina apta para su procesamiento. Tome como ejemplo la sa-lida del subcomando info: $ Svnlook info / path / to / repos Sally 2002-11-04 09:29:13 -0600 (Lunes, noviembre de 2002) 27 Aadido el rbol griega usual. La salida del subcomando info se define como: 1. 2. 3. 4. El autor, seguido de una nueva lnea. La fecha, seguido de una nueva lnea. El nmero de caracteres en el mensaje de registro, seguido por un salto de lnea. El mensaje de registro, seguido de una nueva lnea.

04

de

Esta salida es legible por humanos, artculos significado como la fecha, se muestran con un texto representar-cin en lugar de algo ms oscura (como el nmero de nanosegundos desde el tipo Freeze sabrosa condujo por). Pero esta salida es tambin la mquina apta para su procesamiento, porque el mensaje de registro puede contener varias lneas y no tener un lmite de longitud, svnlook proporciona la longitud del mensaje antes de que el mensaje en s. Este

78 Administracin del Repositorio permite a los scripts y otros envoltorios alrededor de este comando para tomar decisiones inteligentes sobre el registro de mensaje, como la cantidad de memoria para asignar el mensaje, o al menos cuntos bytes saltarse en caso de que esta salida no es la ltima parte de la datos en la secuencia.

Otro uso comn de svnlook es ver realmente el contenido de una revisin o rbol de transaccin. La svnlook treecomando muestra los directorios y archivos en el rbol solicitado. Si se proporciona la opcin -Show-idsopcin, tambin se muestran los identificadores de revisiones de los nodos del sistema de archivos para cada uno de esos caminos (que suele ser de mayor utilidad para los desarrolladores de los usuarios). $ Svnlook tree / path / to / repos show-ids / <0.0.1> Una / <2.0.1> B / <4.0.1> lambda <5.0.1> E / <6.0.1> alpha <7.0.1> beta <8.0.1> F / <9.0.1> mu <3.0.1> C / <a.0.1> D / <b.0.1> gamma <c.0.1> G / <d.0.1> pi <e.0.1> rho <f.0.1> tau <g.0.1> H / <h.0.1> chi <i.0.1> omega <k.0.1> psi <j.0.1> iota <1.0.1> Una vez que usted ha visto la estructura de los directorios y archivos en el rbol, puede utilizar comandos como svnlook cat, svnlook propget y svnlook proplist a cavar en los detalles de los archivos y directorios. svnlookpuede realizar una variedad de otras consultas, presentando los subgrupos de informacin que hemos men-cionado antes, informando qu rutas fueron modificadas en una revisin o transaccin determinada, mostrando diferencias tex-tuales y la propiedad realizados en los archivos y directorios, y as sucesivamente . La siguiente es una breve descripcin de la actual lista de subcomandos aceptados por svnlook, y la salida de los subcomandos: autor Dice el autor del rbol. gat o Imprimir el contenido de un archivo en el rbol. cambiad o Lista de todos los archivos y directorios que han cambiado en el rbol. fech a Imprimir fechador del rbol. diff Imprimir diffs unificados de los archivos modificados. dirs-changed Enumere los directorios en el rbol que eran ellos mismos cambiaron, o cuyos hijos archivos fueron cambiados. histori a

79 Administracin del Repositorio Mostrar puntos de inters de la historia de una ruta versionada (lugares en los que se produjeron modificaciones o copias). info Dice el autor del rbol, marca de fecha, el mensaje de recuento de caracteres de registro, y el mensaje de registro. bloq uear Si una ruta est bloqueada, describir los atributos de bloqueo. log Imprimir mensaje de registro del rbol. propget Imprimir el valor de una propiedad en una ruta en el rbol. proplist Imprima los nombres y valores de propiedades de rutas en el rbol. rbo l Imprimir la lista de rbol, revelando opcionalmente los ID revisiones de los nodos del sistema de ficheros asociados a cada paso. uuid Imprimir UUID-Universal identificador nico del repositorio. joven Imprimir el nmero de revisin menor.

svnadmin
El programa svnadmin es el mejor amigo del administrador del repositorio. Adems de proporcionar la capacidad de cre-ate repositorios de Subversion, este programa le permite realizar varias operaciones de mantenimiento en los repositorios. La sintaxis de svnadmin es similar a la de svnlook: $ Svnadmin help uso general: svnadmin SUBCOMMAND REPOS_PATH [PARAMS y OPCIONES ...] Escriba "svnadmin help <subcomando>" para ayuda sobre un subcomando especfico. Subcomandos disponibles: create deltify volcar Ayuda (?, h) . . . Ya hemos mencionado subcomando create de svnadmin (ver elseccin llamada "Repositorio Cre- cin y configuracin "). La mayora de los otros que trataremos en ms detalle ms adelante en este captulo. Por ahora, vamos a echar un rpido vistazo a lo que cada uno de los subcomandos ofertas disponibles. crear Crear un nuevo repositorio Subversion. deltify Ejecutar en un rango de revisiones especificado, realizando deltificacin predecesor en los caminos cambiaron en

los revisiones. Si no se especifica ninguna revisin, este comando simplemente deltify la revisin HEAD. arro jar Vierta el contenido del repositorio, delimitada por un conjunto de revisiones, usando un formato portable de volcado.

80 Administracin del Repositorio hotcopy Haga una copia en caliente de un repositorio. Puede ejecutar este comando en cualquier momento y hacer una copia de seguridad del repositorio, sin importar si otro proceso est utilizando el repositorio. list-dblogs (Slo Berkeley DB repositorios.) Una lista de los caminos de ficheros de registro Berkeley DB asociados con el repositorio. Esta lista incluye todos los archivos de registro, aquellas an en uso por Subversion, as como los que ya no se utilizan. list-unused-dblogs (Berkeley DB repositorios solamente.) Lista de los caminos de ficheros de registro Berkeley DB asociados, pero ya no se utilizan por, el repositorio. Puede eliminar de forma segura los archivos de registro del entorno del repositorio y archivarlos para su uso en el caso de que alguna vez tiene que realizar una recuperacin catastrfico del repositorio. carg ar Carga un grupo de revisiones en un repositorio de un flujo de datos que utiliza el mismo formato portable de volcado geATED por el subcomando dump. lslocks Enumerar y describir los bloqueos que existen en el repositorio. lstxns Anote los nombres de las transacciones Subversion no confirmadas que existen actualmente en el repositorio. recuper ar Realiza tareas de recuperacin en un repositorio que se encuentra en necesidad de los mismos, generalmente despus de un error fatal ha ocurrido que la preventila un proceso cerrar limpiamente su comunicacin con el repositorio. rmlocks Incondicionalmente eliminar bloqueos de las rutas mencionadas. rmtxns Limpiamente quitar las transacciones desde el repositorio Subversion (convenientemente nutrido por la salida de la lstxns control secundario). setlog Reemplace el valor actual de la propiedad svn: log propiedad (mensaje de registro) en una revisin que figura en el repositorio con un nuevo valor. verifi car Verifique el contenido del repositorio. Esto incluye, entre otras cosas, las comparaciones de suma de comprobacin de la versindatos Sioned almacenados en el repositorio.

svndumpfilter
Dado que Subversion almacena todo en un sistema de base de datos opaco, intentar hacer cambios manuales es imprudente, si bien no es difcil. Y una vez que los datos se han almacenado en el repositorio, Subversion generalmente no proporciona una manera fcil de extraer los datos. 3 Pero, inevitablemente, habr ocasiones en las que querr manipular el histrico de su repositorio. Puede que tenga que eliminar todas la versiones de un archivo que se ac-accidentalmente aadido al repositorio (y no debera estar ah por la razn que sea). O quizs tiene varios proyectos que comparten un nico repositorio, y decide dividir en sus repositorios. Para llevar a cabo este tipo de tareas, los administradores necesitan una representacin ms manejable y maleable de los datos en sus repositorios, el formato de volcado del repositorio Subversion. El formato de volcado del repositorio Subversion es una representacin legible de los cambios que ha realizado en sus datos versionados a lo largo del tiempo. Utilice el comando svnadmin dump para generar el volcado

3That, por cierto, es un

caracterstica, no un error.

81 Administracin del Repositorio datos, y svnadmin load para poblar un nuevo repositorio con l (ver elseccin llamada "Migracin de un Re- repositorio "). La gran cosa sobre el aspecto humano-lectura del formato de volcado es que, si usted no tiene cuidado de ello, se puede inspeccionar y modificar de forma manual. Por supuesto, el inconveniente es que si tienes el valor de trabajo en un repositorio encapsulado en lo que es probable que sea un archivo de volcado muy grande, de dos aos, que le podra llevar mucho tiempo, mucho tiempo para inspeccionar manualmente y modificarlo. Aunque no ser la herramienta ms utilizada a disposicin del administrador, svndumpfilter proporciona una marca muy particular de funcionalidad til, la capacidad de modificar rpidamente y fcilmente que los datos de volcado actuando como un filtro basado en las rutas. Simplemente darle ya sea una lista de las rutas que quieres mantener, o una lista de rutas que no quieres mantener, luego, dirige tu volcado de repositorios a travs de este filtro. El resultado ser un flujo de modi-ficado de datos de volcado que contendr slo las rutas versionadas que (explcita o implcitamente) requeridos. La sintaxis de svndumpfilter es como sigue: $ Svndumpfilter ayuda uso general: svndumpfilter SUBCOMMAND [PARAMS y OPCIONES ...] Escriba "help <subcomando> svndumpfilter" para ayuda sobre un subcomando especfico. Subcomandos disponibles: exclude incluir ayuda (?, h) Slo hay dos subcomandos interesantes. Le permiten tomar la decisin entre la inclusin explcita o implcita de rutas en el flujo: excluir Filtrado de un conjunto de rutas de flujo de datos de volcado. incluir Permitir slo el conjunto de rutas solicitado, pase a travs de la corriente de datos de volcado. Veamos un ejemplo real de cmo se puede utilizar este programa. Se discute en otro lugar (ver elseccin

"Escogiendo el esquema de repositorio") El proceso de decidir cmo elegir un diseo para los datos de los repositorios que utilizan un repositorio por proyecto o combinndolos, organizar todo el material dentro de su repositorio, y as sucesivamente. Pero a veces, despus de nuevas revisiones comienzan a volar, a repensar el diseo y quisiera hacer algunos cambios. Un cambio comn es la decisin de mover proyectos que son un nico repositorio en repositorios separados para cada proyecto com-partir. Nuestro repositorio imaginario contiene tres proyectos: calc, calendario y hoja de clculo. Ellos han estado viviendo lado a lado en una disposicin como esta: / calc / trunk / branches / tags / calendario / trunk / branches / tags / hojas de clculo / trunk / branches / tags /

82 Administracin del Repositorio Para conseguir estos tres proyectos en sus propios repositorios, lo primero que tiramos todo el repositorio: $ Svnadmin dump / * Dumped revisin * Dumped revisin * Dumped revisin * Dumped revisin ... $ ruta / al / repositorio> repos-dumpfile 0. 1. 2. 3.

A continuacin, ejecute el archivo de volcado a travs del filtro, incluyendo cada vez, slo uno de nuestros directorios de nivel superior, y dando lugar a tres nuevos archivos de volcado: $ Cat repos-dumpfile | svndumpfilter incluyen calc> calco-dumpfile ... $ Cat repos-dumpfile | svndumpfilter incluyen calendario> cal-dumpfile ... $ Cat repos-dumpfile | svndumpfilter incluyen hojas de clculo> ssdumpfile ... $ En este punto, usted tiene que tomar una decisin. Cada uno de los archivos de volcado crear un repositorio vlido, pero mantendr las rutas exactamente como estaban en el depsito inicial. Esto significa que aunque tenga un repositorio exclusivamente para su proyecto calc, dicho repositorio tendr todava un alto nivel directa-ria calc nombre. Si desea que su tronco, etiquetas y ramas directorios a vivir en la raz de su repositorio, es posible que desee editar tus archivos de volcado, cambiando las cabeceras Node-path y el nodo-copyfrom-path ya no tienen ese camino primero calc / componente. Adems, tendr que volver a pasar la seccin de datos de volcado que crea el directorio calc. Se ver algo como: Node-path: calc nodo de accin: add Node-tipo: dir ContentLength: 0

Advertencia
Si usted planea en la edicin manual del archivo de volcado para eliminar un directorio de nivel superior, asegrese de que el editor no est configurado para convertir automticamente las lneas finales para el formato nativo (por ejemplo, \ R \ n \ n) como el contenido a continuacin, no est de acuerdo con los metadatos y esto har que el archivo de volcado intil. Todo lo que queda ahora es la creacin de sus tres nuevos repositorios, y cargar cada archivo de volcado en el repositorio correcto: $ Svnadmin create calc; svnadmin carga calc <calco-dumpfile <<< Iniciado nueva transaccin, basado en la revisin original de 1 * aadiendo ruta: Makefile ... hecho. * aadiendo ruta: button.c ... hecho. ... $ Svnadmin create calendario; svnadmin carga calendario <cal-dumpfile <<< Iniciado nueva transaccin, basado en la revisin original de 1 * Aadiendo ruta: Makefile ... hecho. 83 Administracin del Repositorio * Aadiendo ruta: cal.c ... hecho. ... $ Svnadmin crear hojas de clculo, hoja de clculo svnadmin load <ssdumpfile <<< Iniciado nueva transaccin, basado en la revisin original de 1 * aadiendo ruta: Makefile ... hecho. * aadiendo ruta: ss.c ... hecho. . . . $ Ambos subcomandos de svndumpfilter aceptan opciones para decidir cmo hacer frente a las revisiones "vacas". Si una revisin dada slo contena cambios a rutas que se han filtrado, que la revisin ha quedado vaco podra considerarse poco interesante o incluso ignorada. As que para dar al usuario control sobre qu hacer con las re-visiones, svndumpfilter ofrece las siguientes opciones de lnea de comandos: - Drop-empty-revs No generar ninguna revisin vaca-tan slo ignorarlas. Renumerarrevoluciones Si se eliminan las revisiones vacas (usando la opcin - drop-empty-revs), cambiar los nmeros de revisin de las restantes para que no haya huecos en la secuencia numrica. - Preserve-revprops Si las revisiones vacas no se eliminan, preservar las propiedades de revisin (mensaje de registro, autor, fecha, aduana propiamente dicholazos, etc) para las revisiones vacas. De lo contrario, las revisiones vacas slo contendrn la marca original, y un mensaje de registro generado indicando que esta revisin fue vaciada por svndumpfilter. Mientras svndumpfilter puede ser muy til, y un gran ahorro de tiempo, desafortunadamente hay un par de problemas. En primer lugar, esta utilidad es muy sensible a la semntica de la ruta. Preste atencin a si las rutas en el archivo de volcado se especifican con o sin barras al principio. Usted tendr que buscar en el nodo de la ruta y las cabeceras Node-copyfrom-path.

. . . Node-path: Makefile . . .

hoja

de

clculo

Si los caminos se lleva barras, debe incluir barras al principio en las rutas que quiera pasar a svndumpfiltro de inclusin y exclusin svndumpfilter (y si no lo hacen, no se debera). Adems, si el archivo de volcado tiene un uso inconsistente de las principales barras por alguna razn, 4 que probablemente debera normalizar esas rutas por lo que todos tienen, o falta de, barras al principio. Tambin las rutas copiadas pueden darle algunos problemas. Subversion soporta operaciones de copia en el repositorio, donde una nueva ruta se crea copiando otra ruta ya existente. Es posible que en algn momento de la vida de su repositorio, usted podra haber copiado un archivo o directorio desde alguna ubicacin que svn-dumpfilter es excluyente, a un lugar que est incluyendo. A fin de que los datos de volcado autosuficiente, svndumpfilter todava necesita ensear la adicin de la nueva ruta, incluidos los contenidos de los archivos creados por la copia-y no representa que la adicin como una copia de una fuente que gan ' t existe en el flujo de datos de volcado filtrada. Pero debido a que el formato de volcado slo muestra lo que se cambi en cada revisin, el contenido de la fuente de la copia podran no estar fcilmente disponible. Si usted sospecha que tiene alguna copia de este tipo en su repositorio, usted tal vez quiera reconsiderar su sistema de caminos incluidos / excluidos.

Berkeley DB Utilities

4Mientras

svnadmin dumptiene una poltica de constante barra inicial no incluirlas-otros programas que generan datos de volcado podran no ser tan consistente.

84 Administracin del Repositorio Si utiliza un repositorio Berkeley DB, entonces, de la estructura y los datos de su sistema de ficheros versionado viven en un conjunto de tablas de base de datos dentro del subdirectorio db de su repositorio. Este subdirectorio es un directorio de entorno de base de datos Berkeley regular, y por lo tanto se puede utilizar en combinacin con cualquiera de las herramientas de base de datos Berkeley (se puede ver la documentacin de estas herramientas en la web de Sleepycat, ht- tp :/ / www.sleepycat.com/). Para el uso de Subversion da a da, estas herramientas no son necesarias. La mayor parte de la funcionalidad que normalmente se necesita para repositorios Subversion ha sido duplicada en la herramienta svnadmin. Por ejemplo, svnadmin list-unused-dblogs y svnadmin list-dblogs realizar un subconjunto de lo dispuesto por el comando db_archive Berkeley, y svnadmin recover refleja los casos de uso comn de la utilidad db_recover. Todava hay algunas utilidades de Berkeley DB que le puede resultar til. El db_load programas db_dump y escriben y leen, respectivamente, un formato de archivo personalizado que describe las claves y valores en una base de datos Berke-ley DB. Dado que las bases de datos Berkeley no son portables entre arquitecturas, este formato es un modo til para transferir las bases de datos de una mquina a otra, independientemente de la arquitectura o sistema operativo. Adems, la utilidad db_stat puede proporcionar informacin til sobre el estado de su entorno de Berkeley DB, incluidas estadsticas detalladas sobre el bloqueo y subsistemas de almacenamiento.

Limpieza del repositorio


Su repositorio Subversion lo general requieren muy poca atencin una vez que se ha configurado para su lik-ing. Sin embargo, hay ocasiones en que alguna intervencin manual de un administrador podra estar en orden. La utilidad svnadmin proporciona algunas funciones tiles para ayudarle en la realizacin de tareas como:

modificacin de informe cambios, la eliminacin de transacciones muertas, las

de

recuperar repositorios "cua", y la migracin de contenido del repositorio en un repositorio diferente.

Tal vez el ms utilizado de los subcomandos de svnadmin es setlog. Cuando una transaccin est comprometido en el repositorio y ascendida a una revisin, el mensaje de registro descriptivo asociado con esa nueva revisin (y proporcionado por el usuario) se almacena como una propiedad no versionada adjunta a la propia revisin. En otras palabras, el repositorio slo recuerda el ltimo valor de la propiedad, y descarta las anteriores. A veces, un usuario tendr un error en su mensaje de registro (un error ortogrfico o de algunas informaciones errneas, por-tal vez). Si se configura el repositorio (usando el pre-revprop-cambio y ganchos post-rev-prop de cambio, vase laseccin "Scripts de enganche") Para aceptar los cambios a este mensaje de registro una vez finalizado el compromiso, el usuario puede "arreglar" su mensaje de registro de forma remota mediante el comando propset del programa svn (verCaptulo 9, Referencia completa de Subversion). Sin embargo, debido al potencial de perder informacin para siempre, los repositorios Subversion no son, por defecto, configurados para permitir cambios en las propiedades no versionadas-excepto por un administrador. Si necesita un mensaje de registro que ser cambiado por un administrador, esto se puede hacer usando setlog svnadmin. Este comando cambia el mensaje de registro (la propiedad svn: log) en una revisin concreta de un repositorio, leyendo el nuevo valor a partir de un archivo proporcionado. $ Echo "Aqu est el nuevo mensaje, registro correcto"> newlog.txt $ Svnadmin setlog myrepos newlog.txt-r 388 El comando svnadmin setlog solo todava est sujeto a las mismas protecciones contra la modificacin de las propiedades unver-nados como un cliente remoto-los pre-y post-revprop cambio de ganchos siguen 85 Administracin del Repositorio activado, por lo que debe ser configurado para aceptar los cambios de esta naturaleza. Sin embargo, un administrador puede conseguir alrededor de estas protecciones pasando la opcin - de bypass-hooks al comando svnadmin setlog.

Adverte ncia
Recuerde, sin embargo, que al pasar por los ganchos, es probable que est evitando las cosas tales como notificaciones de correo electrnico de los cambios de propiedad, sistemas de copia de seguridad, que registran los cambios de propiedades sin versionar, y as sucesivamente. En otras palabras, tener mucho cuidado con lo que est cambiando, y cmo cambiarlo. Otro uso comn de svnadmin es consultar el repositorio para las transacciones pendientes-posiblemente muerto Subversion. En el caso de que un compromiso falla, la transaccin se limpia generalmente arriba. Es decir, la propia transaccin se elimina desde el repositorio, y cualquier dato asociado con (y slo con) la transaccin se elimina tambin. Ocasionalmente, sin embargo, se produce un fallo de tal manera que

la limpieza de la transaccin nunca ocurre. Esto puede ocurrir por varias razones: quizs el cliente funciona-miento fue poco elegante terminado por el usuario o un fallo en la red podra haber ocurrido en medio de una operacin, etc Independientemente de la razn, las transacciones muertas pueden suceder. Ellos no hacen ningn dao real, aparte de consumir un poco de espacio en disco. Un administrador exigente, sin embargo, puede que desee volver a moverlas. Usted puede utilizar el comando svnadmin lstxns de listar los nombres de las operaciones actualmente en circulacin. Lstxns $ svnadmin myrepos 19 3a1 a45 $ Cada elemento de la salida resultante se puede utilizar con svnlook (y su opcin - transaction) para determinar quin cre la transaccin, cuando fue creado, qu tipo de cambios se hicieron en la transaccin, es decir, si el transaccin es un candidato seguro para el retiro! Si es as, el nombre de la transaccin pueda ser pasado a rmtxns svnadmin, que realizarn la limpieza de la transaccin. De hecho, el rmtxns subcomando puede tener su entrada directamente desde la salida del lstxns! $ Svnadmin rmtxns myrepos `lstxns svnadmin myrepos` $ Si usa estos subcomandos de esto, usted debe considerar la posibilidad de su repositorio temporalmente accesible a los clientes. De esta manera, nadie puede iniciar una transaccin legtima antes de empezar su limpieza. El siguiente es un poco de shell-scripting que puede generar rpidamente la informacin sobre cada transaccin-cin destacan en su repositorio:

Ejemplo 5.1. txn-info.sh (Informe de transacciones pendientes)


! # / Bin / sh # # # Generar la produccin de informacin para todas las operaciones pendientes en # # # Un repositorio Subversion. REPOS = "$ {1}" if ["$ x REPOS" = x]; then echo "Uso: $ 0 REPOS_PATH" exit

86 Administracin del Repositorio fi para TXN en `lstxns svnadmin $ {REPOS}`; hacer echo "--- [Transaction $ {TXN}] -------------------------------------- ---- " info svnlook "$ {REPOS}" - Operacin "$ {TXN}" done Puede ejecutar el script anterior usando / path / to / txn-info.sh / ruta / al / repositorio. La salida es bsicamente una concatenacin de varios trozos de svnlook info de salida (ver el seccin llamada "svnlook"), y se ver algo como esto: $ Txn-info.sh myrepos

--- [Transaction 19] -----------------------------------------salid a 2001-09-04 11:57:19 -0500 (Tue, 04 Sep 2001) 0 --- [Transaction 3a1] -----------------------------------------Enriq ue 2001-09-10 16:50:30 -0500 (Mon, 10 Sep 2001) 39 Tratar de cometer ms de una red defectuosa. --- [Transaction a45] -----------------------------------------salid a 2001-09-12 11:09:28 -0500 (Wed, 12 Sep 2001) 0 $ Una transaccin de larga abandonada suele representar algn tipo de compromiso fracasado o interrumpido. Una marca de fecha de la transac-cin puede proporcionar informacin para el ejemplo interesante, qu tan probable es que una operacin se-gun hace nueve meses se mantiene activo? En definitiva, las decisiones de limpieza transaccin no necesitan hacerse imprudentemente. Varias fuentes de infor-macin, incluyendo error de Apache y acceder a registros, los registros de Subversion xito compromete, y as sucesivamente-se pueden emplear en el proceso de toma de decisiones. Por ltimo, un administrador puede a menudo simplemente comunicarse con el propietario de una transaccin aparentemente muerta (va correo electrnico, por ejemplo) para verificar que la transaccin es, de hecho, en un estado zombi.

Administracin de espacio en disco


Mientras que el costo de almacenamiento se ha reducido increblemente en los ltimos aos, el uso del disco sigue siendo una preocupacin vlida para los administradores que buscan versin de grandes cantidades de datos. Cada byte adicional consumido por el repositorio en vivo es un byte que debe ser respaldado seguridad, quizs varias veces como parte de la rotacin de horarios de copia de seguridad. Si utiliza un repositorio Berkeley DB, el mecanismo de almacenamiento primario es una base de datos compleja sistema, es til saber qu elementos de datos deben permanecer en el sitio activo, que deben ser respaldados, y que puede ser eliminado con seguridad. Esta seccin es especfica de Berkeley DB, repositorios FSFS no tienen datos adicionales para ser limpiado o regenerada. Hasta hace poco, el mayor infractor del uso del espacio en disco con respecto a los repositorios de Subversion eran los archivos de registro en la que Berkeley DB realiza su pre-escrituras antes de modificar los archivos de base de datos real. Estos ficheros capturan todas las acciones realizadas a lo largo de la ruta del cambio de la base de datos de un estado a anoth-er-, mientras que los archivos de base reflejan en un momento dado algn estado, los archivos de registro contienen todos los muchos cambios a lo largo del camino entre los estados. Como tal, pueden empezar a acumularse muy rpidamente. Afortunadamente, a partir de la versin 4.2 de Berkeley DB, el entorno de base de datos tiene la capacidad de eliminar sus propios archivos de registro no usados sin ningn procedimiento externos. Cualquier repositorio creado usando svn-admin que se compila contra Berkeley DB versin 4.2 o mayor se configurar para esta auto-

87 Administracin del Repositorio eliminacin de archivos log matic. Si no desea que esta funcin est activada, simplemente pase la opcin - bdb-log-keep op-cin al comando svnadmin create. Si se olvida de hacer esto, o cambiar de

opinin en un momento posterior, sencillo editar el archivo DB_CONFIG encontrado en el directorio db de su repositorio, comente la lnea que contiene la directiva set_flags DB_LOG_AUTOREMOVE y, a continuacin, ejecutar svnadmin recover sobre su repositorio para forzar la cambios de configuracin surtan efecto. Verla seccin llamada "Berkeley DB Config- racin " para ms informacin sobre la configuracin de la base de datos. Sin algn tipo de eliminacin de archivos de registro automtico en su lugar, los archivos de registro se acumulan mientras usa su repositorio. Esto es en realidad algo as como una caracterstica del sistema de base de datos que debe ser capaz de volver a crear la base de datos completa usando nada ms que los archivos de registro, por lo que estos archivos pueden ser de utilidad para la recuperacin de bases de datos catastrfica. Pero por lo general, tendr que archivar los archivos de registro que ya no estn en uso por Berkeley DB y, a continuacin, eliminarlos del disco para ahorrar espacio. Utilice el mandato list-unused-dblogs svnadmin para listar los archivos de registro no utilizados: $ Svnadmin list-unused-dblogs / ruta / al / repositorio / Path/to/repos/log.0000000031 / Path/to/repos/log.0000000032 / Path/to/repos/log.0000000033 $ Svnadmin list-unused-dblogs repositorio | xargs rm # # Espacio en disco recuperado! / ruta / al /

Para mantener el tamao del repositorio tan pequeo como sea posible, Subversion usa deltificacin (o, "deltified almacena-miento") dentro del mismo repositorio. Deltificacin implica la codificacin de la representacin de un fragmento de datos como una coleccin de diferencias contra otro bloque de datos. Si las dos piezas de datos son muy similares, esta deltificacin traduce en ahorros de almacenamiento para el deltified trozo-en lugar de ocupar espacio igual al tamao de los datos originales, que slo ocupa espacio suficiente para decir, "un aspecto como este otra pieza de datos a travs de aqu, a excepcin de lo siguiente par de cambios ". En concreto, cada vez que una nueva versin de un archivo se ha comprometido en el repositorio, Subversion codifica la versin anterior (en realidad, varias versiones anteriores) como un delta contra la nueva versin. El resultado es que la mayora de los datos del repositorio que tiende a ser considerable, es decir, el contenido de ficheros versionados-se almacenan en un tamao mucho ms pequeo que la representacin original "texto completo" de los datos.

Not a
Debido a que todos los datos del repositorio de Subversion que se sujeta a la deltificacin se almacena en un nico archivo de base de datos Berkeley, la reduccin del tamao de los valores almacenados no reducir necesariamente el tamao del archivo de base de datos en s. Berkeley DB, sin embargo, mantener registros internos de las reas no utilizadas del archivo de base de datos, y utilizar esas reas primero antes de crecer el tamao del archivo de base de datos. As, mientras que deltificacin no produce un ahorro de espacio inmediatas, puede enlentecer drsticamente el crecimiento futuro de la base de datos.

Recuperacin Repositorio
Como se ha mencionado enla seccin llamada "Berkeley DB", Un repositorio de datos Berkeley a veces puede ser dejado en estado de congelacin si no se ha cerrado correctamente. Cuando esto sucede, un administrador tiene que rebobinar la base de datos a un estado coherente. Con el fin de proteger los datos de su repositorio, Berkeley DB utiliza un mecanismo de bloqueo. Este mecanismo garantiza que las porciones de la base de datos no se modifican simultneamente por mltiples clientes de la base de datos, y que cada proceso ve los datos en el estado correcto cuando los

datos que est siendo ledo desde la base de datos. Cuando un proceso necesita cambiar algo en la base de datos, primero comprueba la existencia de un bloqueo en los datos de destino. Si los datos no est bloqueada, el proceso bloquea los datos, hace que el cambio que quiere hacer, y luego abre los datos. Otros procesos se ven obligados a esperar hasta que se retira de bloqueo antes de que se les permite continuar accediendo a esa seccin de la base de datos. (Esto no tiene nada que ver con los seguros que usted, como usuario, se pueden aplicar a los archivos versionados dentro del repositorio, consulte Tres significados de "bloqueo" para obtener ms

88 Administracin del Repositorio informacin. ) En el curso de la utilizacin de su repositorio Subversion, los errores fatales (como quedarse sin espacio en disco o memoria disponible) o interrupciones pueden evitar que un proceso de tener la oportunidad de eliminar los bloqueos que ha colocado en la base de datos. El resultado es que el sistema de base de datos back-end queda "encajado". Cuando esto sucede, cualquier intento de acceder al repositorio de colgar indefinidamente (ya que cada nuevo acceso es a la espera de una cerradura que se vaya, que no va a suceder). En primer lugar, si esto le ocurre a su repositorio, no se asuste. El Berkeley DB sistema de archivos se aprovecha de las bases de datos y los puestos de control y pre-escritura en diario para asegurar que slo los ms catastrfica de acontecimientos 5 puede destruir permanentemente de un entorno de base de datos. Un repositorio suficientemente paranoico administrador va a hacer copias de seguridad fuera de las instalaciones de los datos del repositorio en cierto modo, pero no llame a su administrador del sistema para restaurar una cinta de copia de seguridad por el momento. En segundo lugar, use la siguiente receta para intentar "unwedge" su repositorio: 1. 2. Asegrese de que no hay procesos para acceder (o intentar acceder) al repositorio. Para repositorios red trabajadas, esto significa el cierre de la Apache HTTP Server, tambin. Convirtase en el usuario que posee y gestiona el repositorio. Esto es importante, ya que la recuperacin de un reposit-ria mientras se ejecuta el usuario errneo puede modificar los permisos de los archivos del repositorio de tal manera que su repositorio seguir siendo inaccesible incluso despus de que se "unwedged". Ejecute el comando svnadmin recover / ruta / al / repositorio. Deber as ver una salida como la siguiente: Bloqueo repositorio adquirido. Por favor espere, recuperar el repositorio puede llevar algn tiempo ... La recuperacin completa. La ltima revisin de repos es 19. Este comando puede tardar varios minutos en completarse. 4. Reinicie el Subversion. servidor de

3.

Este procedimiento corrige casi todos los casos de repositorio de lock-up. Asegrese de ejecutar este comando como el usuario que posee y gestiona la base de datos, no como root. Parte del proceso de recuperacin podra en-volve regeneracin de varios archivos de base cero (regiones de memoria compartida, por ejemplo). La recuperacin como root va a crear esos archivos de manera que sean propiedad de root, lo que significa que incluso despus de re-store conectividad al repositorio, los usuarios normales no podrn acceder a ella. Si el procedimiento anterior, por alguna razn, no unwedge xito su repositorio, usted debe hacer dos

cosas. En primer lugar, mueva su repositorio estropeado a la forma y restaurar la ltima copia de seguridad del mismo. Luego, enve un correo electrnico a la lista de usuarios de Subversion (en<users@subversion.tigris.org>) Describiendo ing el problema en detalle. La integridad de datos es una gran prioridad para los desarrolladores de Subversion.

Migrando un repositorio
Un sistema de ficheros de Subversion tiene sus datos repartidos por varias tablas de bases de datos de una manera general, enten-derse por (y de su inters) slo los propios desarrolladores de Subversion. Sin embargo, las circunstancias pueden surgir esa llamada para todos o un subconjunto, de los datos que han de recogerse en un formato de archivo nico, portable y plana. Subversion proporciona tal mecanismo, implementado en un par de subcomandos de svnadmin: dump y carga.

5E.g.: disco duro + gran electroimn = desastre.

89 Administracin del Repositorio La razn ms comn para volcar y la carga de un repositorio Subversion es por cambios en Subversion que-yo. Como Subversion madura, hay ocasiones en que ciertos cambios realizados en el back-end de base de datos de esquema causa Subversion incompatible con las versiones anteriores del repositorio. Otras razones para la existencia de dumping y de carga podra ser para migrar un repositorio Berkeley DB para un nuevo sistema operativo o la arquitectura de la CPU, o para cambiar entre Berkeley DB y FSFS back-ends. El curso de accin recomendado es relativamente simple: 1. 2. 3. 4. 5. Con la versin actual de svnadmin, vuelque su repositorio de archivos de volcado. Actualizacin a la nueva versin de Subversion. Mueva sus viejos repositorios de en medio, y crear nuevos vacos en su lugar utilizando el nuevo svnadmin. Una vez ms el uso de su nuevo svnadmin, cargar sus archivos de volcado en sus respectivos, recin creado repositor-s. Asegrese de copiar cualquier personalizacin de sus viejos repositorios a los nuevos, incluidos los archivos DB_CONFIG y scripts gancho. Usted tendr que prestar atencin a las notas de la versin para el nuevo re-arrendamiento de Subversion para ver si los cambios desde la ltima actualizacin afectan a los opciones con-figuracin o ganchos. Si el proceso de migracin hizo su repositorio accesible en una direccin URL diferente (por ejemplo, se traslad a un equipo diferente, o se est accediendo a travs de un esquema diferente), entonces es probable que desee decirle a sus usuarios para ejecutar svn switch - relocateen sus copias de trabajo existentes. Consulte svn switch.

6.

svnadmin dumpdar salida a una serie de revisiones del repositorio que se formatean utilizando custom formato de volcado del sistema de ficheros de Subversion. El formato de volcado se imprime en la salida estndar, mientras que los mensajes informat-ive se imprimen en la secuencia de error estndar. Esto le permite redirigir el flujo de salida en un archivo mientras se ve la salida de estado en la ventana de terminal. Por ejemplo: $ Svnlook myrepos jvenes 26 $ Svnadmin dump myrepos> dumpfile * Dumped revisin 0. * Dumped revisin 1. * Dumped revisin 2. .

. . * Objeto de de revisin * Objeto de de revisin

dumping 25. dumping 26.

Al final del proceso, tendr un solo archivo (fichero de volcado en el ejemplo anterior) que contiene todos los datos almacenados en el repositorio en el rango requerido de revisiones. Tenga en cuenta que svnadmin dump lee rboles de revisiones del repositorio al igual que cualquier otro proceso "lector" que (svn checkout, por ejemplo). As que es seguro para ejecutar este comando en cualquier momento. El otro subcomando de la pareja, svnadmin load, analiza el flujo de entrada estndar como un archivo de volcado de repositorio Subversion, y reproduce eficazmente esas revisiones volcadas en el repositorio de destino para que los opera-cin. Tambin proporciona informacin informativa, esta vez utilizando el flujo de salida estndar: $ Svnadmin carga nuevorepos <dumpfile <<< Iniciado nueva txn, basado en la revisin original de 1 * aadiendo ruta: A ... hecho. * aadiendo ruta: A / B ... hecho. ... 90 Administracin del Repositorio ------- Committed nueva rev 1 (cargado de rev 1 original) >>> <<< Iniciado nueva txn, basado en la revisin original de 2 * edicin de ruta: A / mu ... hecho. * edicin de ruta: A / D / G / rho ... hecho. ------- Committed nueva rev 2 (cargado de rev original 2) >>> . . . <<< Iniciado nueva txn, basado en la revisi n original de 25 * edicin de ruta: A / D / gamma ... hecho. ------- Committed nueva rev 25 (cargado de rev originales 25) >>> <<< Iniciado nueva txn, basado en la revisin original de 26 * aadiendo ruta: A / Z / zeta ... hecho. * edicin de ruta: A / mu ... hecho. ------- Committed nueva rev 26 (cargado de rev original, 26) >>> El resultado de una carga es aadido nuevas revisiones en un repositorio-lo mismo que se obtiene al hacer comete contra ese repositorio Subversion de un cliente regular. Y as como en una confirmacin, puede utilizar scripts gancho para llevar a cabo las acciones antes y despus de cada uno de los comete realizado durante el proceso de carga. Con la aprobacin de la - use-pre-commit-gancho y - Opciones uso post-commit-gancho de svnadmin load, puede indicar a Subversion para ejecutar los scripts gancho pre-commit y post-commit, respectivamente, para cada revisin con carga . Usted puede utilizar estos,

por ejemplo, para asegurar que las revisiones cargadas pasan por las mismas etapas de validacin que comete regularmente pasar. Por supuesto, usted debe utilizar estas opciones con cuidado, si su gancho post-commit enva mensajes de correo a una lista de correo para cada nuevo compromiso, es posible que no quieren arrojar cientos o miles de correos electrnicos de confirmacin en rpida sucesin en la lista de cada uno de los cargado re- visiones! Puede leer ms sobre el uso de scripts gancho en la seccin "Scripts de enganche". Tenga en cuenta que debido a que svnadmin usa la entrada estndar y flujos de salida para el volcado de repositorio y el proceso de carga, las personas que se sienten especialmente picantes puede tratar este tipo de cosas (incluso usando diferentes versiones de svnadmin a cada lado del tubo): $ Svnadmin create nuevorepos $ Svnadmin dump myrepos | nuevorepos svnadmin load Por defecto, el archivo de volcado ser bastante grande, mucho ms grande que el propio repositorio. Eso es porque cada versin de cada archivo se expresa como un texto completo en el archivo de volcado. Este es el comporta-miento ms rpido y sencillo, agradable y si ests canalizando los datos de volcado directamente en algn otro proceso (por ejemplo, un programa de compresin, el programa de filtrado, o en un proceso de carga). Pero si va a crear un archivo de volcado para el almacenamiento a largo plazo, es probable que desee para ahorrar espacio en disco utilizando la opcin - deltas. Con esta opcin, el xito-ive revisiones de archivos se emitirn como comprimido, binario diferencias-al igual que las revisiones de archivos se almacenan en un repositorio. Esta opcin es ms lenta, pero los resultados en un archivo de volcado mucho ms cerca en tamao a la reposit-ria inicial. Hemos mencionado anteriormente que svnadmin dump genera un rango de revisiones. Utilice el parmetro - revision op-cin para especificar una nica revisin de volcar, o un rango de revisiones. Si omite esta opcin, se volcarn todas las revisiones del repositorio existentes. $ Svnadmin dump myrepos - revisin 23> rev-23.dumpfile $ Svnadmin dump - myrepos revisin 100:200> revoluciones-100200.dumpfile

91 Administracin del Repositorio Como vertederos Subversion cada nueva revisin, imprime slo la informacin necesaria para permitir un futuro gestor de recrear esa revisin en base a la anterior. En otras palabras, para cualquier revisin dada en el archivo de volcado, slo los elementos que se han cambiado en esa revisin van a aparecer en el vertedero. La nica excepcin a esta regla es la primera revisin que se vierten en el comando actual svnadmin dump. Por defecto, Subversion no expresar la primera revisin volcada como meras diferencias aplicables a la revisin anterior. Por un lado, no hay revisin anterior en el archivo de volcado! Y en segundo lugar, Subversion no puede conocer el estado del repositorio en la que se cargarn los datos de volcado (si es que alguna vez, de hecho, se produce). Para asegurarse de que la salida de cada ejecucin de svnadmin dump es autosuficiente, la primera revisin volcada es por defecto una representacin completa de cada directorio, archivo, y la propiedad en que la revisin del repositorio. Sin embargo, puede cambiar este comportamiento predeterminado. Si agrega la opcin - incremental de cuando vuelque su repositorio, svnadmin comparar la primera revisin volcada en contra de la revisin anterior del repositorio, de la misma forma en que trata a cada revisin que se vierten. A continuacin, la salida de la primera revisin exactamente como lo hace el resto de las revisiones en el vertedero de rango mencionar slo los cambios que se produjeron en esa revisin. El beneficio de esto es que usted puede crear varios archivos pequeos de volcado que se pueden cargar en la serie, en lugar de uno grande, as: $ Svnadmin dump - myrepos revisin 0:1000> dumpfile1 $ Svnadmin dump myrepos - revision 1001:2000 dumpfile2 $ Svnadmin dump - myrepos revisin 2001:3000 incrementales> incrementales>

dumpfile3 Estos archivos de volcado podran ser cargados en un nuevo repositorio con la siguiente secuencia de comandos: Nuevorepos carga $ svnadmin <dumpfile1 $ Svnadmin nuevorepos carga <dumpfile2 $ Svnadmin nuevorepos carga <dumpfile3 Otro truco que puedes realizar con esta opcin - incrementales implica anexar a un archivo de volcado de exis-tente una nueva gama de revisiones volcadas. Por ejemplo, es posible que tenga un gancho postcommit que simplemente aade el volcado de repositorio de la revisin solo que desencaden el gancho. O usted podra tener un script que se ejecuta cada noche para aadir datos de archivos de volcado de todas las revisiones que se han aadido a la repos-itory desde la ltima vez que el guin corri. Utilizado de esta manera, comandos de carga y descarga de svnadmin pueden ser un medio valioso para copia de seguridad de los cambios en el repositorio en el tiempo en caso de una cada del sistema o algn otro evento catastrfico. El formato de volcado tambin se puede utilizar para combinar el contenido de varios depsitos diferentes en un repositorio nico. Mediante el uso de la opcin - parent-dir de svnadmin load, puede especificar un nuevo directorio raz virtual para el proceso de carga. Eso significa que si tiene archivos de volcado para tres repositorios, digamos calc-dumpfile, cal-dumpfile y ss-volcado, puede crear primero un nuevo repositorio para almacenarlos todos: $ Svnadmin create / path / to / projects $ A continuacin, hacer nuevos directorios en el repositorio que encapsular el contenido de cada uno de los tres repositorios anteriores: $ Svn mkdir-m "races iniciales del proyecto" \ file :/ / / ruta / al / projects / calc \ file :/ / / ruta / al / proyectos / calendario \ file :/ / / ruta / al / proyectos / hoja de clculo 92 Administracin del Repositorio Committed revision 1. $ Por ltimo, cargue los archivos de volcado individuales en sus respectivos lugares en el nuevo repositorio: $ Svnadmin / al / los proyectos de carga / path - parent-dir calc <calco-dumpfile . . . $ Svnadmin / al / los proyectos de carga / path - calendario parentdir <cal-dumpfile . . . $ Svnadmin / al / los proyectos de carga / path - parent-dir hoja <ssdumpfile . . . $

Vamos a mencionar una ltima forma de utilizar el repositorio Subversion volcado formato de conversin de un mecanismo de almacenamiento diferente o un sistema de control de versiones completo. Debido a que el formato de archivo de volcado es, en su mayor parte, legible por humanos, 6 debera ser relativamente fcil de describir conjuntos genricos de los cambios en cada uno de los cuales debe ser tratado como una nueva revisin-usando este formato de archivo. De hecho, la utilidad cvs2svn (ver laseccin llamado "Convirtiendo un repositorio de CVS a Subversion") Utiliza el formato de volcado para representar los conteni-dos de un repositorio CVS para que los contenidos se pueden copiar en un repositorio Subversion.

Backup Repositorio
A pesar de los numerosos avances en la tecnologa desde el nacimiento de la computadora moderna, una cosa anillos Desafortunadamente verdad con cristalina claridad, a veces, las cosas van muy, muy mal. Los apagones, fallos de conectividad de red, RAM corrupta y discos duros estropeados son slo una muestra del mal que el Destino puede desatar sobre incluso el administrador ms concienzudo. Y as llegamos a una muy importante parte superior-ic-how para hacer copias de seguridad de los datos del repositorio. En general, existen dos tipos de mtodos de copia de seguridad disponibles para Subversion repositorio administrat-ors-gradual y completa. Hemos discutido en una seccin anterior de este captulo cmo usar svnadmin dump - incremental de realizar una copia de seguridad incremental (consulte la seccinllamado "Migracin de un Repositorio "). Esencialmente, la idea es hacer copias de seguridad slo en un momento dado los cambios en el repositorio desde la ltima vez que hizo una copia de seguridad. Una copia de seguridad completa del repositorio es, literalmente, una duplicacin de la totalidad del directorio del repositorio (que in-cluye cualquier base de datos Berkeley o el medio ambiente FSFS). Ahora, a menos que deshabilite temporalmente todos los dems el acceso a su repositorio, slo tiene que hacer una copia del directorio recursivo corre el riesgo de generar una copia de seguridad falla, ya que alguien podra estar escribiendo actualmente a la base de datos. En el caso de Berkeley DB, documentos Sleepycat describen un cierto orden en el que los archivos de base de datos pueden ser copiados que garantizar una copia de seguridad vlida. Y existe un ordenamiento similar para los datos FSFS. Mejor an, usted no tiene que implementar estos algoritmos a ti mismo, ya que el equipo de desarrollo de Subversion ya lo ha hecho. El script hot-backup.py se encuentra en las herramientas de copia de seguridad / / directorio de la distribucin de cdigo fuente de Subversion. Dada una ruta de repositorio y una ubicacin backup en caliente backup.py-que en realidad es slo un envoltorio ms inteligente de todo el hotcopy comando svnadmin-llevar a cabo los pasos necesarios para realizar copias de seguridad en vivo repositorio-sin necesidad de tener que impedir el acceso al repositorio pblico en todo y luego va a limpiar los archivos de registro Berkeley muertos de su repositorio en vivo. Incluso si usted tambin tiene una copia de seguridad incremental, es posible que desee ejecutar este programa de forma regular. Por ejemplo, usted podra considerar la adicin en caliente backup.py a un planificador de programa (como cron en sistemas Unix). O, si lo prefiere soluciones de copia de seguridad de grano fino, usted podra tener su script gancho post-commit llame hot-backup.py (verla seccin "Scripts de enganche"), Que a su vez provocar una nueva copia de seguridad del repositorio de ocurrir con cada nueva revisin creada. Slo tienes que aadir lo siguiente a los ganchos / script postcommit en el directorio del repositorio en vivo:

Subversion formato de volcado del repositorio 6The se asemeja a un formato RFC-822, el mismo tipo de formato utilizado para la mayor a de correo electrnico.

93 Administracin del Repositorio (Cd / ruta / al / gancho / scripts,. / Hot-backup.py $ REPOS} {/ ruta / al / backups y) La copia de seguridad resultante es un repositorio Subversion completamente funcional, capaz de dejarse caer como un reemplazo para el depsito directo si algo sale horriblemente mal.

Hay beneficios para ambos tipos de mtodos de copia de seguridad. Lo ms fcil es, con mucho, la copia de seguridad completa, que ser siem-pre como resultado una reproduccin de trabajo perfecto de su repositorio. Esto significa que una vez ms que si algo malo suceder a su depsito directo, puede restaurar desde la copia de seguridad con un simple copiado recursivo de directorios. Desafortunadamente, si usted est manteniendo mltiples copias de seguridad de su repositorio, estas copias completas acabarn ocupando espacio en disco tanto como su repositorio en vivo. Copias de seguridad incrementales usando el formato de volcado del repositorio son excelentes para tener a mano si los cambios en el esquema de base de datos entre las sucesivas versiones del propio Subversion. Desde un volcado completo repositorio y carga general se requieren para actualizar su repositorio al nuevo esquema, que es muy conveniente ya que la mitad de ese proceso (la parte dump) termin. Por desgracia, la creacin de y restaura-cin de copias de seguridad incremental lleva ms tiempo, ya que cada cambio es reproducida en el archivo de volcado o el repositorio. En ambos escenarios, los administradores de repositorios tienen que ser conscientes de cmo las modificaciones a las propiedades de revisin unver-nados afectan a sus copias de seguridad. Dado que estos cambios no generan por s mismos re-visiones nuevas, no activarn ganchos post-commit, y no puede incluso provocar la pre-revprop-cambio y ganchos post-revprop de cambio. 7 Y ya que usted puede cambiar las propiedades de revisin sin respetar cronolgi-gica orden puede cambiar las propiedades de toda revisin en cualquier momento, una copia de seguridad incremental de las ltimas pocas revisiones quizs no coger una modificacin de la propiedad a una revisin que se incluye como parte de un copia de seguridad anterior. En trminos generales, slo el paranoico de verdad habra que hacer copias de seguridad de toda su repositorio, por ejemplo, cada vez que ocurri cometer. Sin embargo, en el supuesto de que un repositorio determinado tiene algn otro mecanismo de redundancia con granularidad relativamente fina (como mensajes de correo electrnico por cada confirmacin), una copia de seguridad en caliente de la base de datos puede ser algo que un administrador de repositorio querra incluir como parte de todo el sistema copia de seguridad nocturna. Para la mayora de los repositorios, los correos electrnicos archivados comprometerse solo proporciona redundancia suficiente como fuentes de restaura-cin, al menos para los ms ltimos cambios. Pero es tu datos protege tanto como le gustara. A menudo, la mejor manera de copias de seguridad es una diversificada. Usted puede aprovechar combinaciones de copias de seguridad completas e incrementales, y adicionalmente archivos de correo con los cambios. Los desarrolladores de Subversion, por ejemplo, copia de seguridad del repositorio de cdigo fuente de Subversion despus de crear cada nueva revisin, y mantener un archivo de todos los correos electrnicos de confirmacin y notificacin de cambio de propiedad. La solucin podra ser similar, pero debe ser atendido a sus necesidades y ese delicado equilibrio de conveniencia con paranoia. Y mientras todo esto no podra salvar a su hardware de la mano de hierro del Destino, 8 se debe sin duda ayudar a recuperarse de esos tiempos difciles.

Proyectos Adicin
Una vez creado y configurado su repositorio, lo nico que queda es comenzar a usarlo. Si usted tiene una colec-cin de los datos existentes, que est listo para ser puesto bajo control de versiones, es ms que probable que desee utilizar la importacin del programa cliente svn subcomando para lograrlo. Antes de hacer esto, sin embargo, usted debe considerar cuidadosamente sus planes a largo plazo para el depsito. En esta seccin, vamos a ofrecer algunos asesora-miento sobre cmo planificar el diseo de su repositorio, y cmo obtener los datos dispuestos en ese diseo.

Setlog 7svnadmin

puede ser llamado de una manera que no pasa por la interfaz de gancho por completo.

8You saber el trmino colectivo para todos sus "dedos volubles".

94 Administracin del Repositorio

Escogiendo el esquema de repositorio

Aunque Subversion le permite desplazar los ficheros y directorios versionados sin prdida de informacin, hacerlo todava puede interrumpir el flujo de trabajo de las personas que acceden al repositorio con frecuencia y llegar a las cosas ex-pecto a estar en ciertos lugares. Trate de mirar hacia el futuro un poco, planear con anticipacin antes de colocar sus datos bajo control de versiones. Por "trazar" el contenido de los repositorios de una manera efectiva la primera vez, puede evitar un montn de futuros dolores de cabeza. Hay algunas cosas a tener en cuenta al configurar repositorios de Subversion. Supongamos que, como administrador de reposit-ria, que ser responsable de apoyar el sistema de control de versiones para varios proyectos. La primera decisin es si se debe utilizar un nico repositorio para mltiples proyectos, o para dar a cada proyecto su propio repositorio, o algn tipo de compromiso de estos dos. Hay ventajas a usar un nico repositorio para mltiples proyectos, la mayora, obviamente, la falta de mantenimiento duplic-ATED. Un nico repositorio significa que hay un conjunto de scripts gancho, una cosa que hacer copias de seguridad de forma rutinaria, una cosa es volcado y recarga si Subversion lanza una nueva versin incompatible, y as sucesivamente. Adems, puede mover datos entre los proyectos con facilidad y sin perder infor-macin de versiones histricas. La desventaja de usar un repositorio nico es que los diferentes proyectos pueden tener diferentes listas de correo de confirmacin o de autenticacin diferente y los requisitos de autorizacin. Adems, recuerde que Subversion utiliza nmeros de revisin del repositorio globales. Algunas personas no les gusta el hecho de que a pesar de que no se han realizado cambios recientes en sus proyectos, el nmero de revisin menor del repositorio sigue subiendo porque los proyectos oth-er estn aadiendo revisiones de manera activa. Un enfoque trmino medio se puede tomar, tambin. Por ejemplo, los proyectos se pueden agrupar por qu tan bien el uno al otro de nuevo tarde. Es posible que tenga algunos repositorios con un puado de proyectos en cada repositorio. De esta manera, los proyectos que puedan querer compartir datos puede hacerlo fcilmente, y como nuevas revisiones se aaden al repositorio, al menos, los desarrolladores saben que las nuevas revisiones por lo menos remotamente relacionados con cada uno que usa ese repositorio. Despus de decidir cmo organizar sus proyectos con respecto a los depsitos, es probable que desee pensar en jerarquas de directorios almacenados en ellos. Dado que Subversion usa copias de directorio de ramificacin y etiquetado (vaseCaptulo 4, Crear ramas y fusionarlas), La comunidad Subversion recomienda que elija una ubicacin de repositorio para cada raz de la "de ms arriba" directorio que contiene los datos relacionados con el mismo-y luego crear tres subdirectorios debajo de esa raz del proyecto: tronco, es decir, el directorio en el que el principal se produce el desarrollo del proyecto, las ramas, que es un directorio en el que crear varias ramas nombradas de la lnea de desarrollo principal, etiquetas, lo que es un directorio de oficinas que se crean, y quizs destruidas, pero nunca cambiaron. 9 Por ejemplo, el repositorio puede ser como: / calc / trunk / tags / branches / calendario / trunk / tags / branches / hojas de clculo / trunk / tags / branches / ...

9El

trunk, tags y ramastrio se refiere a veces como "los directorios TTB".

95 Administracin del Repositorio Tenga en cuenta que no importa en qu parte del repositorio raz de cada proyecto es. Si slo tiene un proyecto por repositorio, el lugar lgico para poner cada raz del proyecto que est en la raz del repositorio respectivo proyecto. Si tiene varios proyectos, es posible que desee organizarlos en grupos dentro del guardamuebles, tal vez poniendo proyectos con objetivos similares o de cdigo compartido en el mismo subdirectorio, o tal vez slo agruparlos alfabticamente. Esta disposicin podra ser: / utils / calc / trunk / tags / branches / calendario / trunk / tags / branches / ... Office / hojas de clculo / trunk / tags / branches / . . .

Disee su repositorio en cualquier forma que estimen conveniente. Subversion no espera ni obliga un diseo de esquema en sus ojos, un directorio es un directorio es un directorio. En ltima instancia, usted debe elegir la disposicin reposit-ria que satisface las necesidades de las personas que trabajan en los proyectos que all habitan.

Creando el esquema, importando los datos iniciales


Despus de decidir la forma de organizar los proyectos en su repositorio, probablemente quiera poblarlo el repositorio con ese esquema y los datos iniciales del proyecto. Hay un par de maneras de hacer esto en Subversion. Usted puede utilizar el svn mkdircomandos (vase el Captulo 9, Referencia completa de Subversion) Para cre-ate cada directorio en su esquema esqueltico, uno por uno. Una manera ms rpida de realizar la misma tarea es usar el comando svn import (vea el"svn import"). Al crear la disposicin por primera vez en una ubicacin temporal en la unidad, puede importar todo el rbol de diseo en el repositorio en una nica confirmacin: $ Mkdir tmpdir $ Cd tmpdir $ Mkdir ProjectA $ Mkdir ProjectA / trunk $ Mkdir ProjectA / ramas $ Mkdir ProjectA / tags $ Mkdir ProjectB $ Mkdir ProjectB / trunk $ Mkdir / ProjectB ramas $ Mkdir ProjectB / tags . . . $ Svn import. file :/ / / ruta / al / repositorio - message 'inicial repositorio layout' Adicin ProjectA Adicin ProjectA / trunk

Adicin Adicin Adicin Adicin Adicin Adicin

ProjectA ProjectA ProjectB ProjectB ProjectB ProjectB

/ branches / tags / trunk / ramas / etiquetas

96 Administracin del Repositorio ... Committed revision 1. $ Cd .. $ Rm-rf tmpdir $ Puede verificar los resultados de la importacin mediante la ejecucin del comando svn list: Lista $ svn - verbose file :/ / / ruta / al / repositorio 1 harry 08 de mayo 21:48 Projecta / 1 harry 08 de mayo 21:48 ProjectB / . . . $ Una vez que tenga estructura de su esquema en su lugar, usted puede comenzar a importar los datos reales del proyecto en su repositorio, si alguno de estos datos existe todava. Una vez ms, hay varias maneras de hacer esto. Se puede usar el comando svn import. Podra obtener una copia de trabajo de su nuevo repositorio, mover y organizar los datos de los proyectos dentro de la copia de trabajo, y utiliza la propiedad svn add y svn mandatos de confirmacin. Pero una vez que empezamos a hablar de estas cosas, ya no estamos discutiendo la administracin del repositorio. Si usted no est familiarizado con el svnprograma cliente, consulte el Captulo 3, Recorrido guiado.

Resumen
Por ahora usted debe tener una comprensin bsica de cmo crear, configurar y mantener Subversion resupositorios. Te hemos introducido a las diversas herramientas que le ayudarn en esta tarea. A lo largo del captulo, hemos notado dificultades comunes de administracin, y sugerencias para evitarlos. Todo lo que queda es para que usted decida qu datos interesantes que guardan en su repositorio, y finalmente, cmo hacer que est disponible en la red. El siguiente captulo tiene que ver con la creacin de redes.

97

Captulo 6. Configuracin del servidor


Un repositorio Subversion se puede acceder de forma simultnea por parte de clientes que se ejecutan en la misma mquina en la que reside el repositorio utilizando el file :/ / / mtodo. Sin embargo, la configuracin tpica Subversion consiste en una mquina de un solo servidor que se accede desde los clientes en los equipos por toda la oficina, o, tal vez, en todo el mundo. En esta seccin se explica cmo obtener su repositorio Subversion expuesta fuera de su ordenador central para su uso por los clientes remotos. Cubriremos mecanismos servidores disponibles de Subversion, discutiendo la configuracin y el uso de cada uno. Despus de leer esta seccin, usted debera ser capaz de decidir qu configuracin de red es el adecuado para sus necesidades, y entender cmo habilitar una configuracin como en el equipo host.

Visin de conjunto
Subversion fue diseado con una capa de red abstracta. Esto significa que un repositorio puede ser programa-mente accesible por cualquier tipo de proceso de servidor y el cliente "acceso al repositorio" API permite a los programas-dores para escribir plugins que hablan protocolos de red correspondientes. En teora, Subversion puede utilizar un nmero infinito de implementaciones de red. En la prctica, slo hay dos servidores en el momento de la escritura. Apache es un servidor web muy popular, utilizando el mdulo mod_dav_svn, Apache puede acceder a un repositorio y ponerla a disposicin de los clientes a travs del protocolo WebDAV / DeltaV, que es una extensin de HTTP. En la otra esquina est svnserve: un programa de servidor pequeo, independiente que habla un protocolo propio con los clientes. La Tabla 6-1 presenta una comparacin de los dos servidores. Tenga en cuenta que Subversion, como un proyecto de cdigo abierto, no apoya oficialmente a ningn servidor como "primaria" u "oficial". Ni implementacin de la red es tratado como un ciudadano de segunda clase, cada servidor tiene advant y perjuicios e inconvenientes. De hecho, es posible que los diferentes servidores para ejecutar en paralelo, cada uno tiene acceso a sus depsitos a su manera, y cada uno sin afectar el otro (ver el"Ofrecer Mltiples mtodos de acceso al repositorio "). Tabla6.1, "Comparacin de servidor de red" da una breve pano-y la comparacin de los dos servidores de Subversion disponibles-como administrador, le toca a usted para elegir lo que funciona mejor para usted y sus usuarios.

Tabla 6.1. Comparacin de servidor de red


Caracterstica Opciones de autenticacin Apache + mod_dav_svn svnserve HTTP (S) de autenticacin bsica, CRAM-MD5 o SSH X.509 certific-ates, LDAP, NTLM, o cualquier otro mecanismo disponible para Apache httpd archivo de "usuarios" privados sistema de cuentas existentes (SSH) file 'usuarios' privada o manta de lectura / escritura, o por directorio de lectura / escritura de control a travs de SSL opcional parcialmente utilizable por otros clientes WebDAV manta de lectura / escritura o escritura por directorio (pero no leer) de control con un gancho pre-commit a travs del tnel SSH opcional No interoperable

Opciones de la cuenta de usuario Opciones de autorizacin

Encryption Interoperabilidad Visualizacin Web Acelerar Configuracin inicial

limitada compatibilidad incorporada, a travs de herramientas de tercera oa travs de las herramientas de persona tales como ViewVC tercera persona algo m s lento tales como ViewVC algo ms rpido algo compleja bastante simple

98 Configuracin del servidor

Modelo de la Red
Esta seccin es una discusin general de cmo un cliente de Subversion y el servidor interactan entre s, independiente-mente de la implementacin de la red que est utilizando. Despus de leerlo, usted tendr una buena comprensin de cmo se comporta un servidor y las diferentes formas en que un cliente puede ser configurado para responder.

Solicitudes y respuestas

El cliente de Subversion pasa la mayor parte de su tiempo a administrar las copias de trabajo. Cuando se necesita informacin de un depsito, sin embargo, se hace una solicitud de red, y el servidor responde con una adecuada res-puesta. Los detalles del protocolo de red estn ocultas para el usuario, el cliente intenta acceder a una URL, y dependiendo del esquema de URL, un protocolo especfico es utilizada para comunicarse con el servidor (ver URLs del repositorio). Los usuarios pueden ejecutar svn - version para ver que esquemas y protocolos URL que el cliente sabe cmo utilizar. Cuando el proceso de servidor recibe una peticin de cliente, que por lo general requiere que el cliente identifique a s mismo. Se-demanda a un desafo de autenticacin al cliente, y el cliente responde proporcionando las credenciales de nuevo al servidor. Una vez que se complete la autenticacin, el servidor responde con la informacin original que el cliente pidi. Tenga en cuenta que este sistema es diferente a los sistemas como CVS, donde el cliente de forma preventiva-cias de credenciales ("logs en") en el servidor incluso antes de hacer un pedido. En Subversion, el servidor "exige tomar" las credenciales a travs del cliente en el momento adecuado, en lugar de que el cliente "empuje" de ellos. Esto hace que ciertas operaciones ms elegante. Por ejemplo, si un servidor est configurado para permitir que cualquier persona en el mundo que lee el repositorio y, a continuacin, el servidor no emitir un desafo de autenticacin cuando un cliente intenta svn checkout. Si la peticin de la red del cliente escribe nuevos datos en el repositorio (por ejemplo svn commit), se crea un nuevo rbol de revisin. Si se ha autenticado la solicitud del cliente, a continuacin, el nombre del usuario es guardado como el valor de la propiedad svn: author en la nueva revisin (vase laseccin llamada "No versionado Prop- piedades "). Si el cliente no fue autenticado (en otras palabras, el servidor nunca emiti una autenticacin desafo), luego de la revisin svn: author propiedad est vaca. 1

Almacenamiento en cach de credenciales de cliente


Muchos servidores estn configurados para requerir autenticacin en cada solicitud. Esto puede convertirse en un gran molestar-cin a los usuarios, que se ven obligados a escribir sus contraseas una y otra vez. Afortunadamente, el cliente Subversion tiene un remedio para esto: un sistema integrado para el almacenamiento en cach de autenticacin de Credenciales en el disco. Por defecto, cada vez que el cliente de lnea de comandos responde con xito a la impugnacin de autenticacin de un servidor, se guarda las credenciales en la configuracin de tiempo de ejecucin privada del usuario en el rea de ~ / .subversion / Auth /en los sistemas Unix o% APPDATA% / Subversion / auth / en ventanales. (El rea de ejecucin se explica con ms detalle en la"rea de configuracin en tiempo de ejecucin".) Credenciales de xito se almacenan en cach en el disco, teclea en una combinacin de nombre de host, el puerto y realm de autenticacin. Cuando el cliente recibe un desafo de autenticacin, primero busca las credenciales apropiadas en el cach de disco del usuario, si no est presente, o si las credenciales almacenadas en cach fallan en la autenticacin, el cliente simplemente pregunta al usuario por la informacin. Personas preocupados por la seguridad pueden estar pensando a s mismos, "Almacenamiento en cach de contraseas en el disco? Eso es terrible! Nunca se debe hacer eso! "Por favor, mantengan la calma, no es tan peligroso como parece. El rea auth / caching es protegido por el permiso para que slo el usuario (dueo) puede leer datos de l, y no al mundo en general. Propios permisos de los archivos del sistema operativo son la proteccin de la contrasea.

1 Este problema es en realidad un FAQ, como resultado de una configuracin de servidor mal configurado.

99 Configuracin del servidor En Windows 2000 y versiones posteriores, el cliente Subversion utiliza los servicios de Windows estndar de criptografa para cifrar la contrasea en el disco. Debido a que la clave de cifrado es administrado por Windows y est ligada a las propias credenciales de inicio de sesin del usuario,

slo el usuario puede descifrar la contrasea almacenada en cach. (Nota:.. Si la contrasea cuenta de Win-dows del usuario se restablece por un administrador, todas las contraseas almacenadas en cach se vuelven undecipher-able, el cliente Subversion se comportar como si no existieran, lo que provoc las contraseas al volver requerido) El paranoico de verdad dispuestos a sacrificar todo la comodidad, es posible desactivar la cach de credenciales por completo.

Para deshabilitar el almacenamiento en cach para un nico comando, pase la opcin - no-auth-cache: $ Svn commit-F log_msg.txt - no-auth-cache Reino de autenticacin: <svn://host.example.com:3690> ejemplo reino Usuario: joe Contrasea para 'joe': Adicin newfile Transmisin de datos de archivo. Committed revision 2324. # Contrasea no se almacena en cach, por lo que un segundo compromiso an nos pide $ Svn $ Svn Reino reino ... delete newfile commit-F new_msg.txt de autenticacin: <svn://host.example.com:3690> ejemplo Usuario: joe

O bien, si desea deshabilitar el cach de credenciales de forma permanente, puede editar el archivo de configuracin de tiempo de ejecucin (que se encuentra al lado de la autenticacin / directorio). Basta con establecer store-auth-creds a no, y sin credenciales se almacenan en cach en el disco, nunca. [Auth] store-auth-creds = no A veces los usuarios quieren eliminar credenciales especficas de la cach de disco. Para ello, es necesario para navegar en el rea auth / y borrar manualmente el archivo de cach apropiado. Las credenciales se almacenan en archivos individuales, y si usted mira dentro de cada archivo, ver claves y valores. La clave svn: realmstreng describe el rea del servidor en particular que el archivo est asociado con: $ Ls ~ / .subversion / auth / svn.simple / 5671adf2865e267db74f09ba6f872c28 3893ed123b39500bca8a0b382839198e 5c3c22968347b390f349ff340196ed39 $ Cat ~ / .subversion/auth/svn.simple/5671adf2865e267db74f09ba6f872c28 K 8 Nombre de usuario V 3 joe K 8 Contrase a V 4 bla

100 Configuracin del servidor K 15 svn: realmstreng V 45

repositorio FIN del <https://svn.domain.com:443> Joe Una vez que haya localizado el archivo de cach adecuado, simplemente borrarla. Una ltima palabra sobre el comportamiento de autenticacin del cliente: un poco de explicacin sobre el - nombre de usuario y -Passwordse necesitan opciones. Muchos subcomandos del cliente aceptan estas opciones, sin embargo, es impor-tante para entender el uso de estas opciones no enva automticamente las credenciales al servidor. Como se seal anteriormente, el servidor "exige tomar" las credenciales del cliente cuando lo considere necesario, el cliente no puede "empujar" a voluntad. Si se pasa un nombre de usuario y / o contrasea como las opciones, slo se presentarn al servidor si el servidor los pedidos. 2 Por lo general, se utilizan estas opciones cuando: el usuario desea autenticarse como un usuario diferente de su sistema de nombres de inicio de sesin, o un guin desea autenticarse sin utilizar las credenciales almacenadas en cach.

He aqu un resumen final que describe cmo se comporta un cliente Subversion cuando recibe un desafo de autenticacin: 1. Compruebe si el usuario especifica ninguna credencial como opciones de lnea de comandos, mediante - nombre de usuario y / o - contrasea. Si no es as, o si estas opciones fallan en la autenticacin con xito, entonces Busque mbito del servidor en el rea auth / tiempo de ejecucin, para ver si el usuario ya tiene las credenciales adecuadas en cach. Si no es as, o si las credenciales fallan en la autenticacin, Recurrir usuario. a preguntar al

2. 3.

Si el cliente se autentica correctamente por cualquiera de los mtodos mencionados anteriormente, se tratar de almacenar en cach las credenciales en el disco (a menos que el usuario ha desactivado este comportamiento, como se mencion anteriormente).

svnserve, un servidor personalizado


El programa svnserve es un servidor ligero, capaz de hablar con los clientes a travs de TCP / IP con un cus-tom, el protocolo con estado. Clientes contacto con un servidor svnserve utilizando URLs que comienzan con la propiedad svn :/ / o svn + ssh :/ / esquema. Esta seccin explica las diferentes maneras de ejecutar svnserve, cmo los clientes se autentican con el servidor, y cmo configurar el control de acceso apropiado a su repositor-s.

Invocando el Servidor
Hay diferentes maneras de invocar el programa svnserve. Si se invoca sin opciones, vers nada ms que un mensaje de ayuda. Sin embargo, si usted est planeando para que inetd inicie el proceso, entonces se puede pasar la opcin-i (- inetd) opcin:
2Again,

un error comn es desconfigurar un servidor para que nunca emite un desafo de autenticacin. Cuando los usuarios pasan- Nombre de usuarioy-Passwordopciones para el cliente, son sorprendidos al ver que no estn acostumbrados, es decir, nuevas revisiones todava parecen haber sido cometidos anonym-mente!

101 Configuracin del servidor

$ Svnserve-i (xito (1 2 (ANNIMO) (edit-pipeline))) Cuando se invoca con la opcin - inetd, svnserve intenta hablar con un cliente de Subversion a travs de stdin y stdout utilizando un protocolo propio. Este es el comportamiento estndar de un programa que se ejecutar a travs de inetd. La IANA ha reservado el puerto 3690 para el protocolo Subversion, por lo que en un sistema de tipo Unix usted puede agregar lneas de / Etc / servicescomo los siguientes (si no existen): svn svn 3690/tcp 3690/udp # Subversion # Subversion

Y si el sistema utiliza un clsico demonio inetd tipo Unix, puede aadir esta lnea a / etc / inetd.conf: svn stream svnserve-i tcp nowait svnowner / usr / bin / svnserve

Asegrese de que "svnowner" es un usuario que tiene los permisos adecuados para acceder a los repositorios. Ahora, cuando una conexin cliente viene a su servidor en el puerto 3690, inetd disparar un proceso svnserve para dar servicio a l. En un sistema Windows, existen herramientas de terceros para ejecutar svnserve como un servicio. Busque en Subversion del sitio web para obtener una lista de estas herramientas. Una segunda opcin es ejecutar svnserve como un proceso "demonio" independiente. Utilice la opcin-d para esto: $ Svnserve-d $ # Svnserve se est ejecutando ahora, escuchando en el puerto 3690 Cuando se ejecuta en modo demonio svnserve, puede utilizar la opcin - listen-port = y -Listen-host =opciones para personalizar el puerto y nombre exacto de "atar" a. An hay una tercera forma de invocar svnserve, y eso es en "modo tnel", con la opcin-t. Este modo supone que un programa de servicio remoto como RSH o SSH ha autenticado correctamente el usuario y ahora est invocando un proceso privado svnserve como ese usuario. El programa svnserve se comporta normalmente (comunicacin a travs de entrada y salida estndar), y se supone que el trfico est siendo redirigido automticamente a travs de algn tipo de tnel de vuelta al cliente. Cuando svnserve es invocado por un agente tnel como ste, asegrese de que el usuario autenticado ha ledo completo y acceso de escritura a los archivos de base de datos del repositorio. (Ver Servidores y Permisos:. Una palabra de advertencia) es esencialmente la misma que un usuario local acceder al repositorio va file :/ / / URLs.

Servidores y Permisos: Una Palabra de Advertencia En primer lugar, recuerde que un repositorio Subversion es una coleccin de archivos de bases de datos,

cualquier proceso que accede directamente al repositorio necesita tener lectura correcta y escribir permisos en el repositorio completo. Si usted no es cuidadoso, esto puede llevar a una serie de dolores de cabeza, especialmente si usted est utilizando una base de datos Berkeley DB en vez de FSFS. Asegrese de leer la seccin "Ofrecer mltiples mtodos de acceso al repositorio". En segundo lugar, al configurar svnserve, Apache httpd, o cualquier otro proceso de servidor, tenga en cuenta que puede que no desee poner en marcha el proceso de servidor como usuario root (o como cualquier otro usuario con permis-siones ilimitado). En funcin de la propiedad y los permisos de los depsitos va a exportar, a menudo es prudente utilizar una diferente, tal vez a medida del usuario. Por ejemplo, muchos administradores crear un nuevo usuario llamado svn,

102 Configuracin del servidor

conceder a ese usuario exclusiva propiedad y derechos sobre los repositorios de Subversion exportados, y slo ejecutar sus procesos de servi-dor como ese usuario. Una vez que el programa svnserve se est ejecutando, hace que cada repositorio en su sistema a disposicin de la red. Un cliente necesita especificar una ruta absoluta en la URL del repositorio. Por ejemplo, si un repositorio se encuentra en / usr/local/repositories/project1, a continuacin, un cliente acceder a travs de svn :/ / host.example.com/usr/local/repositories/project1. Para aumentar la seguridad, se puede pasar la opcin-r para svnserve, que lo restringe para exportar slo los repositorios debajo de esa ruta: $ Svnserve-d-r repositorios . . . / usr / local /

Uso de la opcin-r efectivamente modifica la ubicacin que el programa trata como la raz del espacio de sistema de archivos remoto. Los clientes utilizarn URLs que tienen ese tramo de recorrido retirado de ellos, dejando mucho ms corto (y mucho menos revelador) URL: $ Svn checkout host.example.com/project1 . . . svn :/ /

Built-in de autenticacin y autorizacin


Cuando un cliente se conecta a un proceso svnserve, sucede lo siguiente: El cliente selecciona un repositorio especfico. El servidor procesa el archivo conf / svnserve.conf del repositorio, y comienza a imponer una poltica de autorizacin definidas en el mismo de autenticacin y. Dependiendo de la situacin y las polticas de autorizacin, el cliente puede permitir hacer pedidos de forma annima, sin haber recibido la demanda de autenticacin, O el cliente puede ser para la autenticacin en cualquier momento, O si la unidad funciona en "modo tnel", el cliente se declarar que ya autenticado externamente.

En el momento de escribir, el servidor slo sabe cmo enviar un 3 desafo de autenticacin CRAMMD5. En esencia, el servidor enva un bit de datos en el cliente. El cliente utiliza el algoritmo hash MD5 para crear una huella digital de los datos y la contrasea combinados, a continuacin, enva la huella digital como una respuesta. El servidor por-forma el mismo clculo con la contrasea almacenada para verificar que el resultado es idntico. En ningn momento el password real viaja a travs de la red. Tambin es posible, por supuesto, para que el cliente sea autenticado externamente a travs de un agente de tnel, como SSH. En ese caso, el servidor simplemente examina el usuario que est ejecutando, y lo utiliza como autenticado el usuario nombre. Para ms informacin sobre este tema, consulte la seccin "Autenticacin y autorizacin SSH". Como ya has adivinado, archivo svnserve.conf de un repositorio es el mecanismo central para la autenticacin con-trolling y las polticas de autorizacin. El archivo tiene el mismo formato que otros archivos de configuracin (verla seccin "rea de configuracin en tiempo de ejecucin"): Nombres de las secciones estn marcadas por plaza brack-

3 Vase el RFC 2195.

103 Configuracin del servidor ets ([y]), los comentarios comienzan con hash (#), y cada seccin contiene variables especficas que se pueden configurar (variable = valor). Vamos a caminar a travs de este archivo y aprender a usarlos.

Crear un archivo y el reino de los usuarios '


Por el momento, la seccin [general] del svnserve.conf cuenta todas las variables que necesita. Comience por definir un archivo que contiene los nombres de usuario y contraseas, y un dominio de autenticacin: [General] contrasea-db = userfile realm = ejemplo mbito El dominio es un nombre que defina. Se dice a los clientes qu tipo de "espacio de nombres de autenticacin" que se conecta a, el cliente Subversion lo muestra en la autentificacin del sistema, y la utiliza como una clave (junto con el servidor de nombre de host y puerto) para almacenar en cach las credenciales en disco (consulte laseccin llamada "Client Cre- ciales de almacenamiento en cach "). Las variables clave-db apunta a un archivo independiente que contiene una lista de nombres de usuario y contraseas, usando el mismo formato familiar. Por ejemplo: [Users] harry = foopassword salida = barpassword El valor de password-db puede ser una ruta absoluta o relativa al archivo de los usuarios. Para muchos administradores, es fcil de mantener el archivo correcto en el rea conf / del repositorio, junto svnserve.conf. Por otro lado, es posible que usted puede querer tener dos o ms repositorios comparten el mismo archivo de usuarios, en cuyo caso, el fichero probablemente debera vivir en un lugar ms pblico. Los repositorios que compartan el fichero los usuarios tambin deben ser configuradas con el mismo mbito, ya que la lista de usuarios define esencialmente un realm de autenticacin. Dondequiera que la vida de archivo, asegrese de ajustar la lectura del archivo y escribir permisos correctamente. Si usted sabe qu usuario (s) se ejecutar svnserve, restrinja el acceso de lectura al fichero correspondientemente.

Establecer controles de acceso


Hay dos variables ms que establecidos en el archivo svnserve.conf: determinan lo que los usuarios no

autenticados (annimo) y autenticados se les permite hacer. Las variables anon de acceso y autenticacin de acceso se pueden ajustar a los valores ninguno, leen o escriben. El ajuste a ninguno restringe el acceso de ningn tipo, leer permite acceso de slo lectura al repositorio, y escribir permite realizar lectura / escritura el acceso al repositorio. Por ejemplo: [General] contrasea-db = userfile realm = ejemplo mbito # Los usuarios annimos slo pueden leer el repositorio anon-access = read # Los usuarios autenticados pueden leer y escribir auth-access = write La configuracin de ejemplo son, de hecho, los valores por defecto de las variables, en caso de que se olvide de definirlos. Si desea ser ms conservador, se puede bloquear el acceso annimo completamente: [General] contrasea-db = userfile realm = ejemplo mbito

104 Configuracin del servidor # Los usuarios annimos no pueden anon-access = ninguno # Los usuarios autenticados pueden leer y escribir auth-access = write Observe que svnserve slo entiende de control de acceso "general". Un usuario disponga universal de lectura / escritura, el acceso universal de lectura o sin acceso. No hay control detallado sobre el acceso a rutas especficas dentro del repositorio. Para muchos proyectos y sitios, este nivel de control de acceso es ms que suficiente. Sin embargo, si usted necesita el control de acceso por directorio, tendr que utilizar el uso de Apache con mod_authz_svn (ver elseccin llamada "Control de acceso por directorio") O utilizar un script gancho pre-commit para controlar el acceso de escritura (vasela seccin "Scripts de enganche"). La distribucin de Subversion incluye compromiso de acceso control.pl y los guiones svnperms.py ms sofisticadas para su uso en scripts de pre-commit.

Autenticacin y autorizacin SSH


svnserve de incorporado en la autenticacin puede ser muy til, ya que evita la necesidad de crear sistema real cuen-tas. Por otro lado, algunos administradores ya han bien establecido de autenticacin SSH marco funciona en su lugar. En estas situaciones, todos los usuarios del proyecto ya tienen cuentas del sistema y la posibilidad de "SSH en" la mquina del servidor. Es fcil de usar SSH junto con svnserve. El cliente simplemente utiliza el esquema :/ / URL svn + ssh para conectar: $ Whoami harry $ Svn svn list password + ssh :/ / host.example.com / repositorio / proyecto harry@host.example.com 's: ***** foo bar baz . . .

En este ejemplo, el cliente de Subversion hace uso de un proceso local ssh, la conexin a host.example.com, autenticar como el usuario harry, entonces lanzando un proceso svnserve privado en la mquina remota se ejecuta como el usuario juan. El comando svnserve se invoca en modo tnel (-t) y su protocolo de red que se est "tnel" a travs de la conexin cifrada por ssh, el tnel-agent. svnserve es consciente de que se est ejecutando como el usuario juan, y si el cliente realiza una confirmacin, el nombre de usuario autenticado se atribuye como el autor de la nueva revisin. Lo importante aqu es entender que el cliente Subversion no se est conectando a un demonio que se ejecuta svn-servir. Este mtodo de acceso no requiere de un demonio, ni se not una si est presente. Se basa enteramente en la capacidad de ssh para generar un proceso svnserve temporal, que luego termina cuando se cierra la conexin de red. Al usar svn + ssh :/ / URLs para acceder a un repositorio, recuerde que es el programa ssh llev para la autenticacin, y no el programa cliente svn. Eso significa que no hay almacenamiento en cach automtico de contrasea pasando (verla seccin llamada "Client Credentials Caching"). El cliente de Subversion a menudo hace que las conexiones mul-tiple en el repositorio, aunque los usuarios normalmente no se percatan de ello, debido a la caracterstica de cach de contraseas. Al usar svn + ssh :/ / URLs, sin embargo, los usuarios pueden molestos por ssh preguntando repetidamente una contrasea para cada conexin saliente. La solucin es utilizar una herramienta independiente SSH contrasea de almacenamiento en cach como ssh-agent en un sistema Unix, o concurso en Windows. 105 Configuracin del servidor Cuando se usa un tnel, la autorizacin es controlada principalmente por permisos del sistema operativo a los archivos de base de datos del repositorio, es en gran medida el mismo que si Harry estuviera accediendo al repositorio directamente a travs de un file :/ / / URL. Si varios usuarios del sistema se van a acceder al repositorio directamente, es posible que desee colocar en un grupo comn, y usted tendr que tener cuidado con umasks. (Asegrese de leerla seccin "Ofrecer mltiples mtodos de acceso al repositorio".) Pero incluso en el caso de tun-neling, el archivo svnserve.conf todava puede ser usado para bloquear el acceso, simplemente usando auth-access = Leero auth-access = ninguno. Se podra pensar que la historia de un tnel SSH acabara aqu, pero no es as. Subversion le permite create comportamientos tnel personalizados en el archivo de configuracin en tiempo de ejecucin (vase elseccin llamada "Runtime Configuration- Area cin "). Por ejemplo, suponga que desea usar RSH en lugar de SSH. En la seccin [tunnels] de su archivo config, defina lo siguiente: [Tneles] = rsh rsh Y ahora, usted puede utilizar esta nueva definicin de tnel mediante el uso de un esquema de URL que coincide con el nombre de la nueva variable: svn + rsh :/ / host / path. Al utilizar el nuevo esquema URL, el cliente Subversion estar ejecutando realmente el comando rsh anfitrin svnserve-t tras bambalinas. Si incluye un nombre de usuario en la URL (por ejemplo, svn + rsh :/ / usuario @ host / path) el cliente tambin incluir que en su comando (rsh nombre de usuario @ host svnserve-t). Pero se puede definir nuevos esquemas de tneles a ser mucho ms inteligente que eso: [Tneles] joessh = $ JOESSH / opt / alternate / ssh-p 29934 Este ejemplo demuestra un par de cosas. Primero, muestra cmo hacer que el cliente Subversion lanzar un binario tnel muy especfico (el que se encuentra en / opt / alternate / ssh) con opciones especficas. En este caso, el acceso a una svn + joessh :/ / URL invocara el binario de SSH particular-p 29934 como argumentos de utilidad si desea que el programa de tnel para conectarse a un puerto no estndar. En segundo lugar, se muestra cmo definir una variable de entorno personalizada que puede reemplazar el nombre del pro-grama de tnel. Configuracin de la variable de entorno SVN_SSH es una manera conveniente de reemplazar el agente de tneles SSH por defecto. Pero si usted necesita tener diferentes reemplazos para servidores diferentes, cada uno quizs a un puerto diferente o usando un conjunto diferente de opciones para SSH, puede utilizar el mecanismo demostrado en este ejemplo. Ahora bien, si

tuviramos que definir la variable de entorno JOESSH, su valor reemplaza el valor total del tnel variable $ JOESSH sera ejecutado en lugar de / opt / alternate / ssh-p 29934.

Trucos de configuracin SSH


No slo es posible controlar la forma en la que el cliente invoca ssh, sino tambin para controlar el comportamiento de sshd en la mquina servidor. En esta seccin, mostraremos cmo controlar el comando svnserve exacta ejecutado por sshd, as como la forma de hacer que varios usuarios comparten una nica cuenta del sistema.

Configuracin inicial
Para empezar, busque el directorio principal de la cuenta que va a utilizar para iniciar svnserve. Asegrese de que la cuen-ta tiene un par de claves pblica / privada SSH instalado, y que el usuario puede acceder a travs de autenticacin de clave pblica. Autenticacin de contrasea no funcionar, ya que todos los siguientes trucos SSH giran en torno al uso del archivo authorized_keys SSH. Si no existe, cree el archivo authorized_keys (en Unix, por lo general ~ / .ssh / Authorized_keys). Cada lnea de este archivo describe una clave pblica que se permite la conexin.

106 Configuracin del servidor Las lneas son tpicamente de la forma: ssh-dsa AAAABtce9euch .... user@example.com El primer campo describe el tipo de clave, el segundo campo es la propia clave de codificacin uu, y el tercer campo es un comentario. Sin embargo, es un hecho menos conocido que toda la lnea puede estar precedida por un campo de comandos: command = "programa" ssh-dsa AAAABtce9euch .... user@example.com Cuando se establece el campo de comandos, el demonio SSH se ejecuta el programa llamado en lugar de la tpica invocacin svn-servicio-t que el cliente Subversion pide. Esto abre la puerta a una serie de trucos de servidor. En los siguientes ejemplos, que abreviar las lneas del archivo como: command = "programa" TIPO LLAVE COMENTARIO

Controlar el comando invocado


Porque podemos especificar el comando de servidor ejecutado, es fcil de nombrar un binario svnserve especfica para correr y hacerlo pasar argumentos adicionales: command = "/ path / to / svnserve-t-r / virtual / root" TIPO LLAVE COMENTARIO En este ejemplo, / path / to / svnserve puede ser un guin envoltorio personalizado alrededor svnserve que establece el umask (verla seccin "Ofrecer mltiples mtodos de acceso al repositorio"). Tambin muestra cmo anclar svnserve en un directorio raz virtual, como a menudo se hace al ejecutar svnserve como un servicio. Esto puede hacerse ya sea para restringir el acceso a las partes del sistema, o simplemente para aliviar al usuario de tener que escribir una ruta absoluta en el svn + ssh :/ / URL. Tambin es posible tener varios usuarios comparten una nica cuenta. En lugar de crear un sistema separado cuen-ta para cada usuario, generar un par de claves pblica / privada para cada persona. A continuacin, coloque cada clave pblica en el archivo authorized_users, uno por lnea, y utilice la opcin - tnel del usuario:

command = "svnserve-t - Tnel-user = harry" TYPE1 TECLA1 harry@example.com command = "svnserve-t - Tnel-user = sally" TYPE2 TECLA2 sally@example.com Este ejemplo permite que tanto Harry y Sally se conecten a la misma cuenta a travs de la autenticacin de clave pblica. Cada uno de ellos tiene un comando personalizado que se ejecuta, la opcin - tnel del usuario dice svnserve -Tsuponer que el argumento es el nombre del usuario autenticado. Sin - Tnel del usuario, parece como si todas las confirmaciones fueron provenientes de la cuenta del sistema compartido. Una ltima palabra de advertencia: dar a un usuario acceso al servidor a travs de clave pblica en una cuenta compartida an podra permitir a otras formas de acceso SSH, incluso si ha establecido el valor de comando en authorized_keys. Por ejemplo, el usuario todava puede tener acceso shell a travs de SSH, o ser capaz de realizar X11 o general reenvo de puertos a travs de su servidor. Para dar al usuario lo menos el permiso de lo posible, es posible que desee espe-cify una serie de opciones restrictivas inmediatamente despus del comando: command = "svnserve-t - Tnel-user = harry", no-portforwarding, \ no-agente de reenvo, no-X11forwarding, no-pty \ TYPE1 TECLA1 harry@example.com

107 Configuracin del servidor

httpd, el servidor HTTP Apache


El Apache HTTP Server es un "trabajo pesado" servidor de red que Subversion puede aprovechar. A travs de un mdulo personalizado, httpd hace repositorios Subversion disponibles para los clientes a travs del protocolo WebDAV / DeltaV, que es una extensin de HTTP 1.1 (vasehttp://www.webdav.org/ para ms informacin). Este protocolo tiene el protocolo HTTP omnipresente que es el ncleo de la World Wide Web, y aade auto-ing-en concreto, la escritura de capacidades versionados. El resultado es un sistema estandarizado y robusto que se envasan convenientemente como parte del software Apache 2.0, con el apoyo de numerosos sistemas operativos y productos de terceros, y no requiere que los administradores de red abran otro puerto personalizado. 4 Mientras que un servidor Apache-Subversion tiene ms caractersticas que svnserve, tambin es un poco ms difcil de configurar. Con la flexibilidad viene a menudo una mayor complejidad. Gran parte de la discusin siguiente incluye referencias a directivas de configuracin de Apache. Aunque se dan algunos ejemplos del uso de estas directivas, describirlas con todo detalle est fuera del alcance de este captulo. El equipo de Apache mantiene una excelente documentacin, a disposicin del pblico en su sitio web en ht- tp :/ / httpd.apache.org. Por ejemplo, una referencia general para las directivas de configuracin se encuentra en ht-tp :/ / httpd.apache.org/docs-2.0/mod/directives.html. Adems, a medida que realiza cambios en la configuracin de Apache, lo ms probable es que en algn lugar a lo largo del camino se cometi un error. Si usted no est familiarizado con el subsistema de registro de Apache, debe tomar conciencia de ello. En el archivo httpd.conf son directivas que especifican la ubicacin en disco del acceso y registros de error generados por Apache (el CustomLog y directivas ErrorLog, respectivamente). Mod_dav_svn de Subversion utiliza la interfaz de registro de errores de Apache tambin. Siempre se puede examinar el contenido de los archivos de informacin que podra revelar el origen de un problema que no es claramente perceptible de otro modo.

Por qu Apache 2? Si usted es un administrador del sistema, es muy probable que usted ya est ejecutando el servidor web Apache y tener algo de experiencia con l. En el momento de escribir esto, Apache 1.3 es, con mucho, la versin ms popular de Apache. El mundo ha sido un poco lento para actualizar a la serie Apache 2.X por varias razones: algunas personas temen el cambio, especialmente cambiar algo tan importante como un servidor Web. Otras personas dependen de los mdulos plug-in que slo funcionan en contra de la API de Apache 1.3, y esperan a un puerto 2.X. Cualquiera que sea la razn, muchas personas comienzan a preocuparse cuando descubren por primera vez que el mdulo de Apache Subversion ha sido escrito especficamente para la API de Apache 2. La respuesta adecuada a este problema es: no te preocupes por eso. Es fcil ejecutar Apache 1.3 y Apache 2 side-by-side, simplemente instlelos en lugares separados, y utilizar Apache 2 como servidor de Subversion dedicado que se ejecuta en un puerto que no sea 80. Los clientes pueden acceder al repositorio indicando el nmero de puerto en el URL: $ Svn http://host.example.com:7382/repos/project . . . checkout

Requisitos previos
Para interconectar el repositorio por HTTP, que bsicamente necesita cuatro componentes, disponibles en dos paquetes. Usted necesitar Apache httpd 2.0, el mdulo DAV mod_dav que viene con l, Subversion, y el mdulo mod_dav_svn proveedor de sistema de archivos distribuido con Subversion. Una vez que tenga todos los com-ponentes, el proceso de creacin de redes su repositorio es tan simple como: conseguir httpd 2.0 en funcionamiento con el mdulo de mod_dav,

4Y realmente odio hacer eso.

108 Configuracin del servidor instalar el plugin mod_dav_svn para mod_dav, que utiliza las bibliotecas de Subversion para acceder

al repositorio, y configurar el archivo httpd.conf para exportar (o exponer) el repositorio.

Puede llevar a cabo las dos primeras partidas, ya sea compilando httpd y Subversion a partir del cdigo fuente, o instalando paquetes binarios precompilados de ellos en el sistema. Para obtener informacin en l la informacin ms actualizada sobre cmo compilar Subversion para su uso con el servidor HTTP Apache, as como la forma de compilar y con-figura Apache s para ello, consulte el archivo INSTALL en el nivel superior de la fuente de Subversion rbol de cdigo.

Configuracin bsica de Apache


Una vez que tenga todos los componentes necesarios instalados en su sistema, lo nico que queda es la configura-cin de Apache a travs de su archivo httpd.conf. Instruir a Apache para cargar el mdulo mod_dav_svn usando la directiva LoadModule. Esta directiva debe preceder a cualquier otro elemento de configuracin de Subversion relacionadas. Si su Apache fue instalado utilizando el diseo predeterminado, el mdulo mod_dav_svn debera haber sido instalado en el subdirectorio modules de la ubicacin de instalacin de Apache (a menudo / usr/local/apache2). La directiva LoadModule tiene una sintaxis sencilla, la asignacin de un mdulo que se llama a la ubicacin de una biblioteca compartida en el disco: Mdulos dav_svn_module LoadModule / mod_dav_svn.so Tenga en cuenta que si mod_dav fue compilado como un objeto compartido (en lugar de estticamente ligado directamente al binario httpd), necesitar una declaracin LoadModule similar para l, tambin. Asegrese de que se trata antes de la lnea mod_dav_svn: Mdulos dav_module LoadModule / mdulos dav_svn_module LoadModule mod_dav.so / mod_dav_svn.so En un lugar ms adelante en el archivo de configuracin, ahora tiene que decirle a Apache donde guarda su repositorio Subversion (o repositorios). La directiva Location tiene una notacin tipo XML, comenzando con una etiqueta de apertura y terminando con una etiqueta de cierre, con varias otras directivas de configuracin en el centro. El propsito de la directiva Location es indicar a Apache que hacer algo especial al manejar peticiones que se dirigen a una URL o uno de sus hijos dado. En el caso de Subversion, quiere que Apache simplemente le pase a URLs que apuntan a recursos versionados a la capa DAV. Puede indicar a Apache para delegar el manejo de todas las URL cuyo camino porciones (la parte de la URL que sigue el nombre del servidor y el nmero de puerto opcional) comenzar con / repos / a un proveedor DAV cuyo repositorio se encuentra en / ruta / absoluta / al / repositorio utilizando la sintaxis de httpd.conf siguiente: <Location /repos> DAV svn SVNPath / absoluta / ruta / al / repositorio </ Location> Si usted planea soportar mltiples repositorios de Subversion que residirn en el mismo directorio padre en el disco local, puede utilizar una directiva alternativa, la directiva SVNParentPath, para indicar ese directorio padre comn. Por ejemplo, si sabes que vas a crear Subversion mltiples repositor-s en el directorio / usr / local / svn que se accede a travs de URLs como ht-tp :/ / my.server.com/svn/repos1,http://my.server.com/svn/repos2, y as sucesivamente, se puede utilizar la sintaxis de configuracin httpd.conf en el siguiente ejemplo:

109 Configuracin del servidor <Location /svn> DAV svn # Cualquier URL "/ svn / foo" se asignar a un repositorio / usr / local / svn / foo SVNParentPath / usr / local / svn

</ Location> Utilizando la sintaxis anterior, Apache delegar la gestin de todas las URLs cuyas porciones comiencen con la ruta / svn / al proveedor DAV de Subversion, quien asumir que los elementos en el directorio especificado por la directiva SVNParentPath son en realidad repositorios de Subversion. Esta es una sintaxis particularmente conveniente en que, a diferencia del uso de la directiva SVNPath, no es necesario reiniciar Apache para crear red y nuevos repositorios. Asegrese de que cuando defina su nuevo Location, no se solapa con otras ubicaciones exportadas. Por ejemplo, si su DocumentRoot principal es / www, no exporte un repositorio Subversion en /www/repos> <Location. Si llega una peticin para la URI / www / repos / foo.c, Apache no sabr si debe buscar un archivo repos / foo.c en DocumentRoot, o si se debe delegar en mod_dav_svn para volver foo.c del Subversion repositorio.

Nombres de servidor y solicitud de copia Subversion hace uso del tipo de solicitud de copia para realizar copias de servidor de archivos y directorios. Como parte de los chequeos de seguridad realizados por los mdulos de Apache, se espera que la fuente de la copia que se encuentra en la misma mquina que el destino de la copia. Para satisfacer este requisito, puede que tenga que decirle mod_dav el nombre que utiliza como el nombre de host de su servidor. En general, usted puede utilizar la directiva ServerName en ht-tpd.conf para lograr esto. ServerName svn.example.com Si est utilizando el soporte de hosting virtual de Apache a travs de la directiva NameVirtualHost, puede que tenga que utilizar la directiva ServerAlias para especificar nombres adicionales que el servidor es conocido por. Una vez ms, consulte la documentacin de Apache para ms detalles. En esta etapa, usted debe considerar seriamente la cuestin de los permisos. Si usted ha estado ejecutando Apache durante algn tiempo que el servidor web normal, usted probablemente ya tiene una coleccin de pginas de contenido web, scripts y dems. Estos elementos ya se han configurado con un conjunto de permisos que les permite trabajar con Apache, o mejor dicho, que permite Apache para trabajar con esos archivos. Apache, cuando se utiliza como un servidor de Subversion, tambin necesitar los permisos adecuados de lectura y escritura a su repositorio Subversion. (Ver Servidores y Permisos:. Una palabra de advertencia) Usted tendr que determinar una configuracin de sistema de permisos que satisfaga los requisitos de Subversion sin estropear cualquier pgina web ya existente o de las instalaciones de script. Esto puede significar cambiar los per-misiones en su repositorio Subversion para que coincida con los utilizados por otras cosas que Apache sirve para usted, o podra significar usar el usuario y las directivas de grupo en httpd.conf para especificar que Apache debe ejecutarse como el usuario y grupo al que pertenece su repositorio Subversion. No hay una nica manera correcta de configurar sus permisos, y cada administrador tendr diferentes razones para hacer las cosas de cierta manera. Slo ten en cuenta que los problemas relacionados con permisos son quizs el fallo ms comn cuando con-calcular un repositorio Subversion para su uso con Apache.

Opciones de autenticacin
En este punto, si ha configurado httpd.conf para que contenga algo como

110 Configuracin del servidor <Location /svn> DAV svn SVNParentPath / usr / local / svn </ Location> ... Entonces su repositorio es "annima" accesible al mundo. Hasta que configure algunas polticas de autenticacin y autorizacin, los repositorios Subversion que haga disponible a travs de la ubicacin de dir-ective ser generalmente accesible a todos. En otras palabras, cualquier persona puede utilizar su cliente de Subversion para obtener una copia local de un repositorio de URL (o cualquiera de sus subdirectorios), cualquier persona puede navegar interactivamente ltima revisin del repositorio simplemente apuntando el navegador web a la URL del repositorio, y cualquier persona puede cometer en el repositorio.

Autenticacin HTTP Basic


La forma ms fcil para autenticar un cliente es a travs del mecanismo de autenticacin bsica HTTP, que simplemente utiliza un nombre de usuario y contrasea para verificar que el usuario es quien dice ser. Apache proporciona una utilidad htpasswd para gestionar la lista de nombres de usuario y contraseas aceptables, aquellos a los que desea otorgar acceso especial a su repositorio Subversion. Vamos a conceder comprometer el acceso a Sally y Harry. En primer lugar, tenemos que aadir que el archivo de contraseas. $ # # # Primera vez: use-c para crear el archivo $ # # # Usar-m para utilizar el cifrado MD5 de la contrasea, que es ms seguro $ Htpasswd-cm / etc / svn-auth-file harry Nueva contrasea: ***** Vuelva a escribir la contrasea nueva: ***** contrasea Adicin de usuario harry $ Htpasswd-m / etc / svn-auth-file Sally Nueva contrasea: ******* Vuelva a escribir la contrasea nueva: ******* contrasea Adicin de usuario carmen $ Despus, usted necesita para aadir algunas directivas httpd.conf ms dentro de su bloque Location para decirle a Apache qu hacer con su nuevo archivo de contrasea. La directiva AuthType especifica el tipo de sistema de autenticacin que se utilizar. En este caso, queremos especificar el sistema de autenticacin bsica. AuthName es un nombre arbit-ral que usted da para el dominio de autenticacin. La mayora de los navegadores mostrarn este nombre en el cuadro de dilogo pop-up cuando el navegador est consultando al usuario por su nombre y contrasea. Por ltimo, utilice la directiva AuthUserFile para especificar la ubicacin del archivo de la contrasea que usted cre usando htpasswd.

Despus de aadir estas tres directivas, su bloque <Location> debera ser algo como esto: <Location /svn> DAV svn SVNParentPath / usr / local / svn AuthType Basic AuthName "repositorio Subversion" svnauth-file AuthUserFile / etc / </ Location>

111 Configuracin del servidor Este bloque <Location> todava no est completo, y no hacer nada til. Es simplemente decirle a Apache que siempre que se requiera autorizacin, Apache debe cosechar un nombre de usuario y la contrasea desde el cliente de Subversion. Lo que falta aqu, sin embargo, son las directivas que le dicen a Apache qu tipos de solicitudes de los clientes requieren autorizacin. Donde se requiera autorizacin, Apache demandar tambin autenticacin. Lo ms sencillo es proteger a todas las solicitudes. Adicin Requerir valid-user indica a Apache que todas las peticiones requieren un usuario autenticado: <Location /svn> DAV svn SVNParentPath / usr / local / svn AuthType Basic AuthName svn-auth-file "Subversion repositorio" AuthUserFile / etc / Require valid-user </ Location> Asegrese de leer la siguiente seccin(La seccin "Opciones de autorizacin") Para obtener ms informacin sobre la directiva de Re-quieren y otras formas de establecer las polticas de autorizacin. Una palabra de advertencia: las contraseas de autenticacin bsica HTTP pasan en texto plano casi en la red, y por lo tanto son muy inseguros. Si usted est preocupado acerca de espionaje contrasea, puede ser mejor usar algn tipo de encriptacin SSL, por lo que los clientes se autentican a travs de https:// en lugar de http://, en un mnimo, puede configurar Apache para utilizar un auto certificado firmado por servidor. 5 Consulte la documentacin de Apache (y documentacin de OpenSSL) acerca de cmo hacer eso.

Gestin de certificados SSL


Empresas que necesitan para exponer sus repositorios de acceso fuera del firewall de la empresa deben ser cons-ciente de la posibilidad de que terceros no autorizados podran "olfateando" el trfico de la red. SSL hace ese tipo de atencin no deseada menos probabilidades de resultar en fugas de datos sensibles. Si un cliente de Subversion est compilado para usar OpenSSL, entonces gana la habilidad de hablar con un servidor Apache va URLs https://. La librera Neon usada por el cliente Subversion no slo es capaz de verificar los certificados de servidor, pero tambin puede suministrar certificados de cliente cuando son desafiados. Cuando el cliente y el servidor tienen certificados SSL ex-modificados y autenticado correctamente entre s, toda nueva comunicacin es en-encriptada a travs de una clave de sesin. Est ms all del alcance de este libro para describir cmo generar certificados de cliente y servidor, y cmo configurar Apache para usarlos. Muchos otros libros, entre ellos la propia documentacin de Apache, describen esta tarea. Pero lo que puede ser tratado aqu es cmo gestionar los certificados de cliente y servidor de un cliente Subversion ordinario. Cuando se habla de Apache va https://, un cliente Subversion puede recibir dos tipos de in-formacin: un certificado de servidor

una demanda de un certificado de cliente

Si el cliente recibe un certificado de servidor, es necesario verificar que confa en el certificado: es el servidor realmente quien dice ser? La biblioteca OpenSSL hace esto examinando al firmante del certificado de servidor, o autoridad de certificacin (CA). Si OpenSSL no es capaz de confiar automticamente en la CA, o si se produce algn otro problema (como un certificado vencido o desajuste nombre de host), el cliente de lnea de comando de Subversion
5 Mientras

certificados de servidor firmados siguen siendo vulnerables a un "hombre en el medio" ataque, un ataque es todava mucho ms difcil para un observador casual de lograr, en comparacin con oler contraseas desprotegidas.

112 Configuracin del servidor preguntar si desea confiar en el certificado de servidor de todos modos: $ Svn list https://host.example.com/repos/project Error de validacin de certificados del servidor "https://host.example.com:443 ': - El certificado no emitido por una autoridad de confianza. Utilice la huella digital para validar el certificado manualmente! Informacin del certificado: - Hostname: host.example.com - Validez: del 30 de enero 2004 19:23:56 GMT hasta 30 19:23:56 2006 GMT Ene - Emisor: CA, example.com, Sometown, California, EE.UU. - Huellas dactilares: 7d: e1: a9: 34:33:39: ba: 6a: e9: a5: c4: 22:98:7 b: 76:5 c: 92: A0: 9c: 7b (R) expulsar, aceptar (t) emporarily o aceptar (p) ermanently?

Este dilogo debe ser familiar, es en esencia la misma pregunta de lo que has visto venir desde el navegador web (que es slo otro cliente HTTP como Subversion!). Si se elige la opcin ermanente (p), el certificado de servidor se almacenan en cach en el tiempo de ejecucin privada auth / rea de la misma forma su nombre de usuario y contrasea se almacenan en cach (vase la seccin "Client Credentials Caching"). Si en cach, Subversion recordar automticamente a confiar en este certificado en futuras negociaciones. El archivo de los servidores de tiempo de ejecucin tambin le da la posibilidad de hacer que su cliente de Subversion automticamente confiar CAs especficos, ya sea a nivel mundial o en funcin de cada husped. Basta con establecer las ssl-authority-files variables a una lista separada por comas de los certificados de CA con codificacin PEM: [Global] ssl-authority-files path/to/CAcert2.pem = / path/to/CAcert1.pem ;/

Muchas instalaciones de OpenSSL tambin tienen un conjunto predefinido de entidades emisoras de certificados "por defecto" que son casi universalmente de confianza. Para que el cliente Subversion confe de forma automtica estas autoridades estndar, establezca la variable ssl-trust-default-ca a true. Al hablar con Apache, un cliente Subversion tambin podra recibir un reto para un certificado de cliente. Apache est pidiendo al cliente que se identifique: es el cliente realmente quien dice ser? Si todo va bien, el cliente Subversion devuelve un certificado privado firmado por una CA que confa Apache. Un certificado de cliente normalmente se almacena en el disco en formato cifrado, protegido por una

contrasea local. Cuando Subversion recibe este desafo, se le preguntar por tanto un camino para el certificado y la contrasea que lo protege: $ Svn lista https://host.example.com/repos/project autenticacin reino: https://host.example.com:443 Certificado de cliente del archivo: / path/to/my/cert.p12 Frase de '/ path/to/my/cert.p12': ******** . . . Tenga en cuenta que el certificado de cliente es un fichero "p12". Para usar un certificado de cliente con Subversion, debe ser en formato PKCS # 12, que es un estndar porttil. La mayora de los navegadores web ya se pueden importar y exportar certificados en ese formato. Otra opcin es utilizar las herramientas de lnea de comandos OpenSSL para convertir certificados existentes a PKCS # 12. Una vez ms, el archivo de los servidores de tiempo de ejecucin permite automatizar este desafo en una base por-host. Una o ambas piezas de informacin pueden ser descritos en las variables de tiempo de ejecucin: [Grupos] examplehost = host.example.com

113 Configuracin del servidor [Examplehost] ssl-client-cert-file = / path/to/my/cert.p12 ssl-client-certpassword = somepassword Una vez que haya configurado las variables-client-cert-password ssl-client-cert-ssl archivo y, el cliente Subversion puede responder automticamente a un desafo certificado de cliente sin preguntarle. 6

Opciones de autorizacin
En este punto, se ha configurado la autenticacin, pero no la autorizacin. Apache es capaz de desafiar a los clientes y confirmar las identidades, pero no ha dicho cmo va a permitir o restringir el acceso a los clientes que llevan esas identidades. En esta seccin se describen dos estrategias para el control del acceso a los repositorios.

Control de acceso a Manta


La forma ms simple de control de acceso es autorizar a ciertos usuarios, ya sea para acceso de slo lectura a un reposit-ria, o de lectura / escritura en un repositorio. Puede restringir el acceso de todas las operaciones del repositorio aadiendo la directiva Requerir validuser al bloque <Location>. Utilizando el ejemplo anterior, esto significara que slo los clientes que afirmaban ser Harry o Sally, y siempre la contrasea correcta para su respectivo nombre de usuario, se les permite hacer cualquier cosa con el repositorio Subversion: <Location /svn> DAV svn SVNParentPath / usr / local / svn # Cmo autenticar a un usuario AuthType Basic AuthName "repositorio Subversion" AuthUserFile / ruta / al / users / archivo

# Slo los usuarios autenticados pueden acceder al repositorio Require valid-user </ Location> A veces no es necesario para ejecutar una nave tan apretado. Por ejemplo, el propio cdigo fuente de Subversion reposit-ria enhttp://svn.collab.net/repos/svn permite a cualquier persona en el mundo para llevar a cabo tareas de slo lectura del repositorio (como el control de las copias de trabajo y la navegacin de repositorios con un navegador web), pero restringe todas las operaciones de escritura a los usuarios autenticados. Para hacer este tipo de restriccin selectiva, puede utilizar el Lmite y LimitExcept directivas de configuracin. Al igual que la directiva Location, estos bloques han comenzando y terminando las etiquetas, y que le anidar dentro de su bloque <Location>. Los parmetros presentes en el lmite y las directivas LimitExcept son tipos de peticiones HTTP que se ven afectados por ese bloque. Por ejemplo, si desea denegar el acceso a su repositorio excepto las operaciones de slo lectura compatibles actualmente, se utiliza la directiva LimitExcept, pasando por el GET, PROPFIND, OPCIONES, y el informe de los parmetros de tipo de solicitud. Entonces la directiva valid-user Re-quieren mencionado anteriormente se puede colocar dentro del bloque <LimitExcept> en lugar de dentro del bloque <Location>. <Location /svn> DAV svn SVNParentPath / usr / local / svn
6Ms gente consciente de la seguridad no quiera almacenar la contrasea de certificado de cliente en el tiempo de ejecucin

servidoresarchivo.

114 Configuracin del servidor # Cmo autenticar a un usuario AuthType Basic AuthName "repositorio Subversion" AuthUserFile / ruta / al / users / archivo # Para las operaciones que no sean estos, requieren un usuario autenticado. <LimitExcept Ver Opciones PROPFIND report> Requerir valid-user </ LimitExcept> </ Location> Estos son slo algunos ejemplos sencillos. Para obtener ms informacin detallada acerca del control de acceso de Apache y la directiva Require, echar un vistazo a la seccin de Seguridad de tutoriales de la documentacin de Apachecoleccin en http://httpd.apache.org/docs-2.0/misc/tutorials.html.

Control de acceso por directorio


Es posible establecer permisos de grano ms fino con un segundo mdulo de Apache httpd, mod_authz_svn. En este mdulo se agarra los diferentes URLs opacas que pasa del cliente al servidor, pide mod_dav_svn para decodificar, y entonces posiblemente veta las solicitudes en funcin de las polticas de acceso definidas en un archivo de configuracin. Si ha creado Subversion a partir del cdigo fuente, mod_authz_svn se construye e instala automticamente mod_dav_svn largo del lado. Muchas distribuciones binarias instalarlo automticamente. Para comprobar que se ha instalado correctamente, asegrese de que viene justo despus de directiva LoadModule de mod_dav_svn en httpd.conf: Mdulos LoadModule dav_module / mdulos dav_svn_module

LoadModule mod_dav.so / mdulos authz_svn_module LoadModule mod_dav_svn.so / mod_authz_svn.so Para activar este mdulo, deber configurar su bloque Location para usar la directiva AuthzSVNAccessFile, que especifica un archivo que contiene la poltica de permisos para rutas dentro de su repositor-s. (En un momento, vamos a discutir el formato de dicho archivo.) Apache es flexible, por lo que tiene la posibilidad de configurar su bloque en uno de los tres patrones generales. Para empezar, elija una de estas pautas bsicas de configuracin. (Los siguientes ejemplos son muy simples; mirar la propia documentacin de Apache para ms detalles sobre la autenticacin de Apache y opciones de autorizacin.) El bloque ms simple es permitir el acceso abierto a todos. En este escenario, Apache nunca enva desafos de autenticacin, por lo que todos los usuarios son tratados como "annimo".

Ejemplo 6.1. Un ejemplo de configuracin para el acceso annimo.


<Location /repos> DAV svn SVNParentPath / usr / local / svn # Nuestra poltica de control de acceso AuthzSVNAccessFile / path / to / acceso / archivo </ Location> En el extremo opuesto de la escala de paranoia, puede configurar su bloque para exigir la autenticacin de

115 Configuracin del servidor todos. Todos los clientes deben proporcionar credenciales para identificarse. Su bloque incondicional autenticacin re-quiere a travs de la directiva Require valid-user, y define un medio de autenticacin.

Ejemplo 6.2. Un ejemplo de configuracin para el acceso autenticado.


<Location /repos> DAV svn SVNParentPath / usr / local / svn # Nuestra poltica de control de acceso AuthzSVNAccessFile / path / to / acceso / archivo # Slo los usuarios autenticados pueden acceder al repositorio Require valid-user # Cmo autenticar a un usuario AuthType Basic AuthName "repositorio Subversion" AuthUserFile / ruta / al / users / archivo </ Location> Un tercer patrn muy popular es la de permitir una combinacin de acceso autenticado y annimo. Por ejemplo, muchos administradores quieren que los usuarios annimos leer ciertos directorios del repositorio, pero quieren que slo los usuarios autenticados a leer (o escribir) las zonas ms sensibles. En esta configuracin, todos los usuarios comienzan ac-samiento el repositorio annima. Si su poltica de control de acceso requiere un nombre de usuario real en cualquier punto, Apache demandar la autenticacin del cliente. Para ello, se utiliza tanto el adaptarse a cualquier y Exigir directivas vlidas de

usuario juntos.

Ejemplo 6.3. Un ejemplo de configuracin para el acceso autenticado / annima mixta.


<Location /repos> DAV svn SVNParentPath / usr / local / svn # Nuestra poltica de control de acceso AuthzSVNAccessFile / path / to / acceso / archivo # Intentar el acceso annimo en primer lugar, recurrir a bienes # La autenticacin si es necesario. Adaptarse a cualquier Requerir valid-user # Cmo autenticar a un usuario AuthType Basic AuthName "repositorio Subversion" AuthUserFile / ruta / al / users / archivo </ Location> Una vez configurado su bloque Location bsica, se puede crear un archivo de acceso y definir algunas reglas auto-rizacin en ella. 116 Configuracin del servidor La sintaxis del archivo de acceso es el mismo familiar usado por svnserve.conf y los archivos de configura-cin de tiempo de ejecucin. Se ignoran las lneas que comienzan con una almohadilla (#). En su forma ms simple, cada seccin nombra una reposit-ria y la ruta dentro de ella, y los nombres de usuarios autenticados son los nombres de las opciones dentro de cada seccin. El valor de cada opcin describe el nivel de acceso del usuario a la ruta de repositorio: ya sea r (slo lectura) o rw (lecturaescritura). Si el usuario no se menciona en absoluto, no se permite el acceso. Para ser ms especfico: el valor de la seccin de los nombres son o de la forma [repos-name: ruta] o la forma [ruta]. Si usted est usando la directiva SVNParentPath, entonces es importante especificar los nombres de repositorio en sus secciones. Si los omite, una seccin como [/ algn / directorio] coincidir con la ruta / some / dir en cada repositorio. Si usted est usando la directiva SVNPath, sin embargo, entonces est bien definir rutas en sus secciones-despus de todo, slo hay un repositorio. [Calc :/ branches/calc/bug-142] harry = rw Sally = r En este primer ejemplo, el usuario juan tiene acceso total de lectura y escritura en el directorio / branches/calc/bug-142 en el repositorio calc, pero el usuario tiene salida de slo lectura el acceso. Todos aquellos usuarios que tienen bloqueado el acceso a este directorio. Por supuesto, los permisos se heredan de padres a directorio secundario. Eso quiere decir que podemos especificar un subdirectorio de una poltica de acceso diferente para Sally: [Calc :/ branches/calc/bug-142] harry = rw Sally = r # Darle Sally acceso de escritura slo para el subdirectorio 'testing' [calc :/ branches/calc/bug142/testing] Sally = rw

Ahora Sally puede escribir en el subdirectorio prueba del poder, pero an as slo puede leer otras partes. Harry, por su parte, sigue teniendo completa de lectura-escritura a toda la rama. Tambin es posible negar explcitamente el permiso a otra a travs de las reglas de herencia, mediante el establecimiento de la variable de nombre de usuario para nada: [Calc :/ branches/calc/bug-142] harry = rw Sally = r [Calc :/ branches/calc/bug142/secret] harry = En este ejemplo, Harry tiene lectura y escritura a la totalidad bug-142 rbol, pero no tiene absolutamente ningn acceso en absoluto al subdirectorio secreto en su interior. Lo que hay que recordar es que la ruta ms especfica siempre coincide con primero. El mdulo de mod_authz_svn intenta hacer coincidir la propia ruta, y entonces el padre de la ruta de acceso, entonces el padre de la que, y as sucesivamente. El efecto neto es que la mencin de una ruta especfica en el AccessFile siempre prevalecer sobre los permisos heredados de los directorios padre. Por omisin, nadie tiene acceso al repositorio en absoluto. Eso significa que si usted est comenzando con un archivo vaco, probablemente querr darle por lo menos permiso de lectura para todos los usuarios en la raz del repositorio. Usted puede hacer esto mediante el uso de la variable asterisco (*), que significa "todos los usuarios":

117 Configuracin del servidor [/] * = R Esta es una configuracin comn, anuncio que no hay nombre del depsito mencionado en el nombre de la seccin. Esto hace que todos los repositorios mundo legible para todos los usuarios, ya sea que est usando SVNPath o SVNParentPath. Una vez que todos los usuarios tienen acceso de lectura a los repositorios, se puede dar permiso rw explcita a determinados usuarios en subdirectorios especficos dentro de repositorios especficos. La variable asterisco (*) Tambin vale la pena una mencin especial: es el nico patrn que coincide con un usuario an-nimo. Si ha configurado su bloque Location para permitir una mezcla de acceso annimo y autenticado, todos los usuarios comienzan accediendo a Apache annima. mod_authz_svn busca un valor * definido para la ruta de acceso que se tiene acceso, si no puede encontrar uno, entonces Apache requiere autenticacin reales del cliente. El fichero de acceso tambin le permite definir grupos enteros de usuarios, al igual que el Unix / etc / group: [Grupos] calc-developers = harry, sally, joe pintura-developers = franca, sally, jane todos = harry, sally, joe, franco, sally, jane Los grupos se pueden conceder el control de acceso como usuarios. Distinguir con una "arroba" (@) Prefijo: [Calc :/ proyectos / Calc] @ Calc-developers = rw [Paint :/ pintura] proyectos /

@ Pintar-developers = rw jane = r Los grupos tambin se pueden definir para contener otros grupos: [Grupos] calc-developers = harry, sally, joe pintura-developers = franca, sally, jane Todos = @ calco-desarrolladores, @ pinturadesarrolladores ... Y eso es todo lo que hay que hacer.

Cheques Desactivacin basada en rutas


El mdulo mod_dav_svn pasa por un montn de trabajo para asegurarse de que los datos que usted ha marcado "ilegible" No hay accidentalmente se filtr. Esto significa que es necesario seguir de cerca todos los caminos y de archivos contenidos devueltos por comandos como svn update comandos svn checkout o. Si stos los comandos de encontrar un camino que no es legible segn algunas polticas de autorizacin, entonces el camino es typic-mente omite por completo. En el caso de la historia o cambiar el nombre de rastreo-v.g.. ejecutar un comando como svn cat-r foo.c OLD en un archivo cuyo nombre ha cambiado hace mucho tiempo, el seguimiento de cambio de nombre ser simplemente detener si uno de los antiguos nombres de los ob-yecto est decidido a ser de lectura restringida. Todo este camino de comprobacin a veces puede ser bastante caro, especialmente en el caso de registro de SVN. Al volver a trieving una lista revisiones, el servidor busca en cada ruta cambiada en cada revisin y comprueba si se readab-ilidad. Si se descubre una ruta ilegible, entonces se omite de la lista de rutas modificadas de la revisin

118 Configuracin del servidor (Normalmente visto con la opcin - verbose), y todo el mensaje de registro se suprime. Ni que decir tiene, esto puede llevar mucho tiempo sobre las revisiones que afectan a un gran nmero de archivos. Este es el costo de la se-guridad: incluso si no se ha configurado ningn mdulo como mod_authz_svn en absoluto, el mdulo mod_dav_svn sigue pidiendo Apache httpd para ejecutar comprobaciones de autorizacin en cada ruta. El mdulo mod_dav_svn no sabe qu mdulos de autorizacin se han instalado, por lo que lo nico que puede hacer es preguntar Apache para invocar lo que pudiera estar presente. Por otro lado, tambin hay un escape de la eclosin de las clases, una que le permite operar las funciones de seguridad para la velocidad. Si usted no est en ejecucin cualquier tipo de autorizacin por directorio (es decir, no utilizando mod_authz_svn o mdulo similar), entonces usted puede desactivar todo este camino de comprobacin. En el archivo httpd.conf, utilice la directiva SVNPathAuthz:

Ejemplo 6.4. Desactivacin comprueba completo

camino

<Location /repos> DAV svn SVNParentPath / usr / local / svn SVNPathAuthz off </ Location> La directiva SVNPathAuthz es "on" por defecto. Cuando se establece en "off", toda autorizacin checkcin basada en rutas se desactiva; mod_dav_svn deja de invocar las comprobaciones de autorizacin en cada ruta que descubre.

Extras adicionales
Hemos cubierto la mayor parte de las opciones de autenticacin y autorizacin para Apache y mod_dav_svn. Pero hay algunas otras caractersticas interesantes que ofrece Apache.

Browsing Repositorio
Una de las ventajas ms tiles de una configuracin de Apache / WebDAV de su repositorio Subversion es que las revisiones ms recientes de sus archivos y directorios versionados estn inmediatamente disponibles para su visualizacin a travs de un navegador web normal. Dado que Subversion usa URLs para identificar recursos versionados, aquellas URLs utilizadas para acceso al repositorio basado en HTTP se puede escribir directamente en un navegador Web. El navegador se-demandar a una solicitud GET para esa URL, y en funcin de si esa URL representa un directorio o fichero versionado, mod_dav_svn responder con un listado de directorio o el contenido del archivo. Dado que las URLs no contienen ninguna informacin sobre qu versin del recurso desea ver, mod_dav_svn responder siempre con la versin ms joven. Esta funcionalidad tiene el maravilloso efecto secundario que puede pasar alrededor de URLs de Subversion a sus compaeros como referencias a los documentos y los URLs siempre apuntar a la ltima manifestacin de ese documento. Por supuesto, usted puede incluso utilizar las URL como hipervnculos de otros sitios web, tambin. En general, usted conseguir ms uso de URLs a ficheros versionados-despus de todo, ah es donde el contenido interesante tiende a mentir. Sin embargo, es posible que tenga ocasin de examinar un listado de directorios Subversion, donde se le nota rpidamente que el HTML generado utiliza para mostrar que la inclusin es muy bsico, y desde luego no inten-ded ser estticamente agradable (o interesantes). Para permitir la personalizacin de estos directorios panta-llas, Subversion proporciona una funcin de ndice XML. Una directiva SVNIndexXSLT sola en su teora de reposit-bloque Location de httpd.conf instruir mod_dav_svn para generar la salida XML cuando dis-juega un listado de directorios, y para hacer referencia a la hoja de estilo XSLT de su eleccin: 119 Configuracin del servidor <Location /svn> DAV svn SVNParentPath / usr / local / svn SVNIndexXSLT "/ svnindex.xsl" ... </ Location> Uso de la directiva SVNIndexXSLT y creativa hoja de estilo XSLT, puede hacer que el directorio de la lista-nes coinciden con los colores y las imgenes utilizadas en otras partes de su sitio web. O, si lo prefiere, puede utilizar las hojas de estilo de muestra proporcionados en tools / xslt / direct-teora de la distribucin de cdigo fuente de Subversion. Tenga en cuenta que la ruta proporcionada para el directorio SVNIndexXSLT es en realidad una URL a la ruta navegadores tienen que ser capaces de leer sus hojas de estilo con el fin de hacer uso de ellos!

Puedo ver las revisiones anteriores? Con un navegador web normal? En una palabra: pues no. Al menos, no con mod_dav_svn como su nica herramienta. Su navegador web slo habla HTTP normal. Eso significa que slo sabe GET URLs pblicas, que representan las ltimas versiones de los archivos y directorios. De acuerdo con el WebDAV / DeltaV, cada servidor define una sintaxis URL privada para las versiones anteriores de los recursos, y que la sintaxis es opaca a los clientes. Para obtener una versin anterior de un archivo, el cliente debe seguir un procedimiento especfico para "descubrir" la direccin correcta, el procedimiento consiste en la emisin de una serie de peticiones WebDAV PROPFIND y entender conceptos DeltaV. Esto es algo que su navegador web, simplemente no puede hacer. As que para responder a la pregunta de una manera obvia para ver revisiones anteriores de los archivos y directorios es pasando el -Revisionargumento de los comandos svn cat lista de svn y. Para ver revisiones antiguas con su navegador web, sin embargo, puede utilizar software de terceros. Un buen ejemplo de esto es ViewVC (ht- tp :/ / viewvc.tigris.org /). ViewVC fue originalmente escrito para mostrar repositorios CVS a travs de la web, 7 y el ltimas versiones de ltima generacin como Doom (en el momento de la escritura) son capaces de comprender los repositorios de Subversion tambin.

Otras caractersticas
Varias de las caractersticas ya proporcionadas por Apache en su funcin como servidor Web robustas se pueden aprovechar para incrementar la funcionalidad o la seguridad en Subversion tambin. Subversion se comunica con Apache nosotros-cin de nen, que es un genrico HTTP / WebDAV biblioteca con soporte para mecanismos tales como SSL (Capa de Conexin de la Se-cura, se discuti anteriormente) y de compresin deflate (el mismo algoritmo utilizado por los programas gzip y PKZIP a archivos "contraccin" en trozos ms pequeos de datos). Slo tiene que compilar el soporte para las caractersticas que usted desea en Subversion y Apache, y configurar adecuadamente los programas para usar estas caractersticas. De compresin deflate coloca una pequea carga sobre el cliente y el servidor para comprimir y descomprimir transmisiones de red como una forma para reducir al mnimo el tamao de la transmisin real. En los casos en que la red de ancho de banda es escaso, este tipo de compresin puede aumentar en gran medida la velocidad de comunica-ciones entre el servidor y el cliente se pueden enviar. En casos extremos, esta transmisin de red minimiza podra ser la diferencia entre un tiempo de operacin o se realicen con xito. Menos interesante, pero igualmente tiles, son otras caractersticas de la relacin Apache y Subversion, como la posibilidad de especificar un puerto personalizado (en lugar del puerto HTTP por defecto 80) o un nombre de dominio virtual mediante el cual se puede acceder al repositorio Subversion o la posibilidad de acceder al repositorio a travs de un proxy. Estas cosas son todas soportadas por Neon, as que Subversion obtiene que el apoyo de forma gratuita.

Finalmente, debido a mod_dav_svn habla un dialecto semi completo de WebDAV / DeltaV, es posible acceder al repositorio mediante clientes DAV de terceros. La mayora de los sistemas operativos modernos (Win32, OS X, y Linux) tienen la capacidad integrada para montar un servidor DAV como una red "compartir" estndar. Esta es una complicidad-

7Back entonces, se llamaba "ViewCVS".

120 Configuracin del servidor tema ATED; para ms detalles, lea el Apndice C, WebDAV y autoversionado.

Apoyo Mltiple acceso al repositorio los Mtodos


Ya has visto cmo se puede acceder a un repositorio de muchas maneras diferentes. Pero es posible o seguro para el depsito que se accede por varios mtodos a la vez? La respuesta es s, siempre y cuando se utiliza un poco de previsin. En un momento dado, estos procesos pueden requerir de lectura y escritura a su repositorio: usuarios normales del sistema utilizando un cliente de Subversion (como ellos mismos) para acceder al repositorio directamente va file :/ / /URLs; usuarios normales del sistema de conexin a los procesos svnserve privados SSH-generados (correr como ellos mismos) que acceden al repositorio; un proceso svnserve-ya sea un demonio o una marcha por inetd-ejecutndose como un usuario particular invariable; un proceso httpd Apache, ejecutndose como un usuario particular invariable.

Los administradores problema ms comn que se es propiedad de repositorio y permisos. Cada proceso (o usuario) en la lista anterior permisos para leer y escribir los archivos de base de datos Berkeley? Asumiendo que tiene un sistema operativo similar a Unix, un enfoque sencillo sera colocar a cada usuario potencial repositorio en un nuevo grupo svn, y hacer que el repositorio de propiedad total de ese grupo. Pero incluso eso no es suficiente, porque un proceso puede escribir en los archivos de base de datos utilizando una mscara de permisos hostil-que impide el acceso de otros usuarios. As que el siguiente paso ms all de la creacin de un grupo comn para usuarios del repositorio es forzar a todos los procesos de depsito-ac-samiento de usar una mscara de permisos aceptable. Para los usuarios que acceden al repositorio directamente, puede hacer que el programa svn en un script envoltorio que los primeros juegos de umask 002 y luego ejecuta el programa cliente svn real. Usted puede escribir un script de envoltorio similar para el programa svnserve, y agregar un comando umask 002 al propio fichero de arranque de Apache, apachectl. Por ejemplo: $ Cat / usr / bin / svn ! # / Bin / sh umask 002 / Usr / bin / svn-real "$ @"

Otro problema comn se encuentra a menudo en los sistemas de tipo Unix. Como se utiliza un repositorio Berkeley DB en ocasiones crea nuevos archivos de registro en el diario de sus acciones. Incluso si el depsito es propiedad del grupo svn, estos nuevos ficheros no necesariamente estar en manos de ese mismo grupo, que a su vez crea-ates problemas ms permisos para sus usuarios. Una buena solucin consiste en establecer el bit SUID grupo en el directorio db del repositorio. Esto hace que todos los archivos de registro de nueva creacin que tienen el mismo propietario del grupo que el directorio padre. Una vez que haya saltado por estos aros, el repositorio debe ser accesible para todos los pro-cesos necesarios. Puede parecer un poco desordenado y complicado, pero los problemas de tener mltiples usuarios compartiendo acceso de escritura a los archivos comunes son los clsicos que a menudo no estn elegantemente resueltos. Afortunadamente, la mayora de los administradores de repositorios no tendrn que tener una configuracin tan compleja. Usuarios 121 Configuracin del servidor que deseen acceder a los repositorios que viven en la misma mquina no se limitan al uso de acceso file :/ / URLs-por lo general pueden ponerse en contacto con el servidor HTTP Apache o svnserve utilizando localhost para el nombre del servidor en el http:// o svn :/ / URLs. Y para mantener varios procesos de servidor para sus repositorios de Subversion es probable que sea ms de un dolor de cabeza ms de lo necesario. Le recomendamos que elija el servidor que mejor se adapte a sus necesidades y se adhieren a ella!

El + ssh :/ / servidor lista svn Puede ser bastante difcil de conseguir un montn de usuarios con cuentas SSH existentes para compartir un repositorio sin problemas permis-siones. Si usted est confundido acerca de todas las cosas que usted (como administrador) tiene que hacer en un sistema Unix, aqu est una lista de tareas que resumen algunas de las cosas que se discute en esta seccin: Todos sus usuarios SSH necesidad de ser capaz de leer y escribir en el repositorio. Ponga todos los usuarios de SSH en un solo grupo. Hacer el repositorio de propiedad total de ese grupo, y establecer los permisos de grupo de lectura / escritura. Los usuarios necesitan usar una mscara de permisos aceptable al acceder al repositorio. Asegrese de que svnserve (/ usr / bin / svnserve, o donde vive en $ PATH) es en realidad un script envoltorio que establece umask 002 y ejecuta el binario svnserve real. Tome medidas similares cuando se utiliza svnlook y svnadmin. Cualquiera de ellos correr con una mscara de permisos aceptable, o envolverlos como se ha descrito anteriormente.

122

Captulo 7. Temas avanzados


Si usted ha estado leyendo este libro captulo por captulo, de principio a fin, usted debe ahora tener un conocimiento suficiente ac-requerida para utilizar el cliente de Subversion para realizar el control de versiones ms comn opera-ciones. Usted Entiende cmo obtener una copia de trabajo de un repositorio Subversion. Ests cmodos con la presentacin y recepcin de los cambios usando las funciones svn update y svn commit. Usted probablemente incluso desarrollado un reflejo que hace que se ejecute el comando svn status casi inconscientemente. Para todos los efectos, ya est listo para usar Subversion en un entorno tpico. Pero el conjunto de caractersticas de Subversion no se detiene en las "operaciones de control de versiones comunes". En este captulo se destacan algunas de las caractersticas de Subversion que no son tan utilizados regularmente. En l, vamos a discutir la propiedad de Subversion (o "metadatos") de apoyo, y cmo modificar defecto behavi-ors de Subversion alterando su rea de configuracin en tiempo de ejecucin. Vamos a describir cmo se puede usar definiciones externas para instruir a Subversion que obtenga datos de mltiples repositorios. Cubriremos con detalle algunas de las herramientas de cliente y de servidor adicionales que son parte de la distribucin de Subversion. Antes de leer este captulo, usted debe estar familiarizado con el archivo de base y el directorio de versiones capabilit-dios de Subversion. Si an no lo ha ledo acerca de ellos, o si necesita una actualizacin, le recomendamos que consulteCaptulo 2, Conceptos bsicos yCaptulo 3, Recorrido guiado. Una vez que hayas dominado los fundamentos y consumido este captulo, usted ser un usuario avanzado de Subversion!

rea de configuracin en tiempo de ejecucin


Subversion proporciona muchos comportamientos opcionales que pueden ser controlados por el usuario. Muchas de estas opciones son del tipo que un usuario querra aplicar a todas las operaciones de Subversion. As, en lugar de forzar a los usuarios a recordar los argumentos de lnea de comandos para especificar estas opciones, y para usarlos para cada operacin que realizan, Subversion usa archivos de configuracin, segregados en un rea de configuracin de Subversion. El rea de configuracin de Subversion es una jerarqua de dos niveles de los nombres de las opciones y sus valores. Por lo general, esto se reduce a un directorio especial que contiene los archivos de configuracin (el primer nivel), que son slo archivos de texto en formato INI estndar (con "secciones", el segundo nivel). Estos archivos se pueden editar fcilmente utilizando su editor de texto favorito (como Emacs o vi), y contienen directivas ledas por el cliente para determ ine-cul de los diferentes comportamientos opcionales prefiere el usuario.

Configuracin Estructura del rea de


La primera vez que el cliente de lnea de comandos svn es ejecutado, crea un rea de configuracin de cada usuario. En los sistemas Unix, esta zona aparece como un directorio llamado. Subversion en el directorio home del usuario. En sistemas Win32, Subversion crea una carpeta llamada Subversion, por lo general dentro del rea de datos de Aplicacin de directorio del perfil del usuario (que, por cierto, suele ser un directorio oculto). Sin embargo, en esta plataforma la ubicacin exacta difiere de sistema a sistema, y es dictado por el Winventanas de registro. 1 Nos referiremos al rea de configuracin de cada usuario usando su nombre Unix,. Subversin. Adems del rea de configuracin de cada usuario, Subversion tambin reconoce la existencia de un rea de configuracin de todo el sistema. Esto proporciona a los administradores del sistema la capacidad de establecer los valores predeterminados para todos los usuarios en un equipo determinado. Tenga en cuenta que el rea de configuracin de todo el sistema no solo dicta reglas obligatorias-los ajustes en el rea de configuracin de cada usuario tienen prioridad los de todo el sistema de uno, y los

argumentos de comando de lnea suministrados con el programa svn tienen la palabra final sobre comportamiento. En Unix-como plata-formas, se espera que el rea de configuracin de todo el sistema que el directorio / etc / subversion, en las mquinas de Windows, busca un directorio Subversion dentro de los datos de aplicacin comunes

1El

APPDATAvariable de entorno apunta a la Datos de programazona, por lo que siempre puede hacer referencia a esta carpeta como

% APPDATA% \ Subversion.

123 Temas avanzados ubicacin (de nuevo, como se especifica en el Registro de Windows). A diferencia del caso de cada usuario, el programa svn no trata de crear el rea de configuracin de todo el sistema. El rea de configuracin actualmente contiene tres archivos, dos archivos de configuracin (config y servidores), y un archivo readme.txt que describe el formato INI. En el momento de su creacin, los ficheros contienen los valores por defecto para cada una de las opciones soportadas por Subversion, en su mayora comentarios y agrupadas con descripciones textuales de cmo los valores de la clave afectan el comportamiento de Subversion. Para cambiar un comportamiento dado, slo tienes que cargar el archivo de configuracin adecuado en su editor de texto y modifique el valor de la opcin deseada. Si en cualquier momento usted desea que los valores de configuracin predeterminados restaurados, se puede simplemente eliminar (o renombrar) el directorio de configuracin y ejecute algn comando svn inocuo, como svn - version. Se crear un nuevo directorio de configuracin con el contenido predeterminado. El rea de configuracin de cada usuario tambin contiene un cach de datos de autenticacin. El directorio auth agrupa una serie de subdirectorios que contienen trozos de informacin almacenada en cach que utiliza varios mtodos de autenticacin soportados por Subversion. Este directorio es creado de tal manera que slo su usuario tiene permiso para leer su contenido.

Configuracin y el registro de Windows


Adems del rea de configuracin INI basado siempre, los clientes de Subversion que se ejecutan en plataformas Windows tambin pueden usar el registro de Windows para almacenar los datos de configuracin. Los nombres de las opciones y sus valores son los mismos que en los archivos INI. La jerarqua "fichero / seccin" se conserva tambin, aunque abordado de una manera, en este esquema un poco diferente, archivos y secciones son los niveles en el rbol de la clave del Registro. Subversion busca valores de configuracin de todo el sistema bajo la clave HKEY_LOCAL_MACHINE \ Software \ Tigris.org \ Subversion. Por ejemplo, el al-ignora glob opcin, que est en la seccin miscelnea del archivo de configuracin, se puede encontrar en HKEY_LOCAL_MACHINE \ Software \ Tigris.org \ Subversion \ Config \ Miscelnea \ gl obal-ignora. Los valores de configuracin de cada usuario debern almacenarse en HKEY_CURRENT_USER \ Software \ Tigris.org \ Subversion. Opciones de configuracin de registro son analizados antes de que sus homlogos basados en archivos, por lo que son anulados por los valores que se encuentran en los archivos de configuracin. En otras palabras, se concede prioridad a la configuracin en el orden si-guiente en un sistema Windows: 1. 2. 3. 4. 5. Opciones de lnea de comandos Los archivos INI por usuario Los valores del registro de cada usuario INI de todo el sistema Los valores del registro de todo

el sistema Adems, el Registro de Windows no es compatible con el concepto de que algo est "comentada". Sin embargo, Subversion ignorar cualquier opcin cuyo nombre comienza con un carcter de almohadilla (#). Esto per-mite a comentar efectiva una opcin de Subversion sin eliminar toda la clave de la Registry, obviamente simplificando el proceso de recuperacin de esta opcin. El cliente de lnea de comandos svn nunca intenta escribir en el registro de Windows, y no tratar de crear un rea de configuracin default all. Puede crear las claves que necesita usando el programa REGEDIT. Como alternativa, puede crear un archivo. Reg y, a continuacin, haga doble clic en ese archivo desde el shell Explorer, lo que har que los datos que se combinan en su registro.

Ejemplo 7.1. Fichero ejemplo de registro (. Reg).


124 Temas avanzados REGEDIT4 [HKEY_LOCAL_MACHINE \ Software \ Tigris.org \ Subversion \ Servers \ grupo] [HKEY_LOCAL_MACHINE \ Software \ Tigris.org \ Subversion \ Servers \ global] "# Http-proxy-host" = "" "# Http-proxy-port" = "" "# httpproxy-usuario" = "" "# http-proxypassword" = "" "# http-proxyexcepciones" = "" "# http-timeout" = "0" "# Http-compression" = "yes" "# neondebug-mask" = "" "# ssl-authorityfiles" = "" "# ssl-trust-default-ca" = "" "# ssl-cliente -cert-file "=" " "# Ssl-client-cert-password" = "" [HKEY_CURRENT_USER \ Software \ Tigris.org \ Subversion \ Config \ auth] "# store-auth-creds" = "no" [HKEY_CURRENT_USER \ Software \ Tigris.org \ Subversion \ Config \ helpers] "# editor-cmd" = "notepad" "# Diff-cmd" = "" "# Diff3-cmd" = "" "# Diff3-tiene-program-arg" = "" [HKEY_CURRENT_USER \ Software \ Tigris.org \ Subversion \ Config \ miscelnea] "# global-ignores" = "*. O *. * Lo. La # * #. *. Rej *. Rej. * ~ * ~. # * . DS_Store "" # log-encoding "=" " "# Use-commit-times" = "" "# plantilla-root" = "" "# enable-autoprops" = "" [HKEY_CURRENT_USER \ Software \ Tigris.org \ Subversion \ Config \ tneles] [HKEY_CURRENT_USER \ Software \ Tigris.org \ Subversion \ Config \ auto-props] El ejemplo anterior muestra el contenido de un archivo. Reg que contiene algunas de las opciones de configuracin ms usadas y sus valores predeterminados. Cabe destacar la presencia de los dos valores de todo el sistema (para la red opciones relacionadas con el proxy) y por usuario (programas de edicin y almacenamiento de contraseas, entre otros). Tambin tenga en cuenta que todas las opciones estn efectivamente comentadas. Slo tiene que eliminar el carcter almohadilla (#) del comienzo de los nombres de las opciones, y establecer los valores como desee.

Opciones de configuracin
En esta seccin, vamos a hablar de las opciones de configuracin en tiempo de ejecucin especficas que son soportados actualmente por Subversion.

Servidores
El fichero servers contiene opciones de configuracin de Subversion relacionadas con las capas de red. Hay dos nombres de seccin especiales en este archivo-grupos y globales. La seccin de grupos es esencialmente una tabla de referencias cruzadas. Las claves en esta seccin son los nombres de otras secciones en el archivo, y sus valores son mscaras-palabras textuales que posiblemente contienen caracteres comodines-que son comparadas contra los nombres de host de la mquina a la que se envan peticiones Subversion.

125 Temas avanzados [Grupos] beanie-babies = *. red-bean.com collabnet = svn.collab.net [Beanie-babies] . . . [Collabnet] . . . Cuando se utiliza Subversion sobre una red, intenta coincidir con el nombre del servidor que est tratando de alcanzar con un nombre de grupo en la seccin de grupos. Si se produce una coincidencia, Subversion busca entonces una seccin en el fichero servers cuyo nombre es el nombre del grupo de referencia. De esta seccin obtendr los valores de configuracin de red de trabajo reales. La seccin global contiene la configuracin que son para todos los servidores que no coincidan con ninguna de las mscaras de la seccin groups. Las opciones disponibles en esta seccin son exactamente los mismos que los val-id para las otras secciones del servidor en el archivo (excepto, por supuesto, la seccin de grupos especiales), y son como sigue: http-proxy-host Especifica el nombre de host del equipo proxy a travs del cual sus peticiones Subversion basadas en HTTP debe pasar. Por defecto es un valor vaco, lo que significa que Subversion no intentar enrutar peticiones HTTP a travs de un ordenador proxy, y en su lugar intentar contactar la mquina destino directamente. http-proxy-port Especifica el nmero de puerto en el host proxy para usar. Por defecto es un valor vaco. http-proxy-nombre de usuario Especifica el nombre de usuario para la alimentacin de la mquina de proxy. Por defecto es un valor vaco. http-proxy-password Especifica la contrasea para el suministro a la mquina proxy. Por defecto es un valor vaco.

http-timeout Especifica la cantidad de tiempo, en segundos, para esperar una respuesta del servidor. Si experimenta problemas con un conexin de red lenta causando operaciones de Subversion al tiempo de espera, se debe aumentar el valor de esta op-cin. El valor por defecto es 0, que indica a la librera HTTP subyacente, Neon, de utilizar su tiempo de espera predeterminado ajuste. http-compresin Especifica si Subversion debera o no intentar comprimir las peticiones de red realizadas a DAV-ready servidores. El valor predeterminado es yes (aunque la compresin slo ocurrir si esta caracterstica fue compilada en la capa de red). Cambie esto a no para desactivar la compresin, por ejemplo para depurar transmisiones de red. neon-debug-mask Esta es una mscara de bits que la librera HTTP subyacente, Neon, usa para determinar el tipo de depuracin fuera poner a ceder. El valor por defecto es 0, lo que elimina cualquier informacin de depuracin. Para obtener ms informacin acerca de cmo Subversion usa Neon, vea el Captulo 8, Informacin para desarrolladores. ssl-authority-files Esta es una lista delimitada por punto y coma de rutas a los archivos que contienen los certificados de las autoridades de certificacin (o CA) que son aceptados por el cliente Subversion cuando se accede a un repositorio sobre HTTPS. ssl-trust-default-ca Establezca esta variable a yes si quiere que Subversion confe de forma automtica el conjunto de CAs por defecto que se distribuyen con OpenSSL.

126 Temas avanzados ssl-client-cert-file Si un host (o grupo de hosts) requiere un certificado de cliente SSL, normalmente se le preguntar por la ruta a los certificado. Al establecer esta variable a esta misma ruta, Subversion ser capaz de encontrar su certificado de cliente automtica-mente sin preguntarle. No hay un lugar estndar para almacenar certificados en disco; Subversion se agarra de cualquier ruta que especifique. ssl-client-cert-password Si el archivo de certificado de cliente SSL est cifrado con una frase, Subversion le preguntar por la contrasea cada vez que se utiliza el certificado. Si usted considera esto un inconveniente (y no le importa almacenar la contrasea en el archivo de servi-dores), entonces se puede establecer esta variable para el certificado de contrasea. No se le pedir ms.

Config
El archivo de configuracin contiene el resto de los parmetros de ejecucin actualmente disponibles con Subversion, aquellos no relaciona-dos con la creacin de redes. Slo hay unas pocas opciones en uso en este momento, pero de nuevo estn agrupadas en secciones a la espera de futuras incorporaciones. La seccin auth contiene parmetros relacionados con autenticacin y autorizacin en el repositorio de Subversion. Contiene: almacenes contraseas Esto indica a Subversion a la cach, o no cach, contraseas que le sean suministradas por el usuario en respuesta a un servidor desafos de autenticacin. El valor predeterminado es yes. Cambie esto a no para desactivar la contrasea en el

disco de almacenamiento en cach. Puede anular esta opcin en invocaciones individuales del comando svn usando el parmetro - comando-line no-auth-cache (para los subcomandos que lo apoyan). Para obtener ms informacin, consulte laseccin llamada "Client Credentials Caching". store-auth-creds Este ajuste es el mismo que en tiendas contraseas, excepto que activa o desactiva el almacenamiento en cach de disco de toda la informacin de autenticacin: nombres de usuario, contraseas, certificados del servidor, as como cualquier otro tipo de credenciales cacheables. La seccin helpers controla qu aplicaciones externas Subversion utiliza para llevar a cabo sus tareas. Las opciones vlidas en esta seccin son: editor-cmd Especifica el programa que Subversion usar para solicitar al usuario un mensaje de registro durante una operacin de confirmacin, como cuando se utiliza svn commit sin las opciones - message (-m) o - file (-F) opciones. Este programa tambin se utiliza con el comando svn propedit un archivo temporal se rellena con el valor actual de la propiedad el usuario desea editar, y cambios toman forma en el programa editor (vea la seccinllamado "Propiedades"). Valor predeterminado de esta opcin est vaca. El orden de prioridad para la determinacin del orden del editor es: 1. 2. 3. 4. 5. 6. Opcin de lnea de comandos - editorcmd Variable de entorno SVN_EDITOR Opcin Configuracin editor-cmd Variable de entorno VISUAL Variable de entorno EDITOR Posiblemente, un valor por defecto integrado en Subversion (no presente en las compilaciones oficiales)

El valor de cualquiera de estas opciones o variables es (a diferencia de diff-cmd) el inicio de una lnea de comandos para ser ex-ecuted por el shell. Subversion aade un espacio y el nombre de ruta del archivo temporal para ser editado. El editor

127 Temas avanzados debe modificar el archivo temporal y devolver un cdigo de salida de cero para indicar el xito. diff-cmd Especifica la ruta de acceso absoluta de un programa de diferenciacin, usado cuando Subversion genera salida "diff" (como como cuando se utiliza el comando svn diff). Por defecto Subversion usa una librera de diferenciacin interna de establecimiento de esta opcin har que se realice esta tarea utilizando un programa externo. Consulte laseccin titulada "Uso Dif-externa Herramientas ferencing " para ms detalles sobre el uso de este tipo de programas. diff3-cmd Especifica la ruta de acceso absoluta de un programa de diferenciacin de tres vas. Subversion usa este programa para fusionar los cambios realizados por el usuario con los recibidos desde el repositorio. Por defecto Subversion usa un interior diferente-ferencias biblioteca configurar esta opcin har que se realice esta tarea utilizando un programa externo. Consulte laseccin llamado "Uso de las herramientas de diferenciacin externos" para ms detalles sobre el uso de este tipo de programas. diff3-tiene-program-arg

Este parmetro debe ajustarse a true si el programa especificado por la opcin diff3-cmd acepta a -Diff-programparmetro de lnea de comandos. La seccin de tneles permite definir nuevos esquemas de tneles a usar con svnserve y svn :/ / cliconexiones ENT. Para ms detalles, consulte la seccin "Autenticacin y autorizacin SSH". La seccin miscelnea es donde todo lo que no encaja en otra parte. 2 En esta seccin, usted puede encontrar: global-ignores Cuando se ejecuta el comando svn status, Subversion muestra los archivos y directorios no versionados junto con la verlos Sioned, anotar con una? carcter (vase laseccin "svn status"). A veces, puede ser un-noying para ver elementos no versionados-por ejemplo, archivos sin inters, objetos que resultan de un programa de compilacin-cin en esta pantalla. La opcin global-ignores es una lista de mscaras delimitadas por espacio que describen los nombres de archivos y directorios que Subversion no debe mostrar a no ser que estn versionados. El valor predeterminado es *. O *. * Lo. La # * #. *. Rej *. Rej. * ~ * ~. # *. DS_Store. Al igual que svn status, los comandos svn import y svn add tambin ignoran los archivos que coinciden con la lista cuando se estn escaneando un directorio. Usted puede modificar este comportamiento para una sola instancia de cualquiera de estos comandos Expli-citly especificando el nombre del archivo o utilizando la opcin - no-ignore opcin de lnea de comandos. Para obtener informacin sobre el control ms preciso de los elementos ignorados, vea la seccin "svn: ignore". enable-auto-props Esto indica a Subversion para establecer automticamente propiedades en ficheros nuevos o importados. El valor predeterminado es no, para definir este valor yes para activar auto-props. La seccin auto-props del fichero especifica qu propiedades se deben establecer en los archivos. registro de-codificacin Esta variable establece la codificacin del juego de caracteres por defecto para los mensajes de registro de las confirmaciones. Es una forma permanente de la -Codificacinopcin (verla seccin "Interruptores svn"). El repositorio Subversion almacena los mensajes en UTF-8, y asume que su mensaje es escrito usando las locales nativas de su sistema operativo. Debe especificar una codificacin diferente si sus mensajes son escritos con otra codificacin. use-commit-times Normalmente, los archivos de la copia de trabajo tienen marcas de tiempo que reflejan el ltimo momento en que fueron tocados por cualquier proceso, ya sea que sea su propio editor, o por los subcomandos svn. Esto es generalmente conveniente para la gente-ing desarrollar software, ya construir sistemas a menudo se ven en las marcas de tiempo como una manera de decidir qu archivos necesitan ser re-compilado. En otras situaciones, sin embargo, a veces es agradable para los archivos de la copia de trabajo para que las marcas de tiempo que reflejan la

2Anyone de cena compartida?

128 Temas avanzados ltima vez que se cambi en el repositorio. El comando svn export siempre pone estas "marcas de tiempo de ltima modificacin" en los rboles que produce. Al establecer esta variable de configuracin a yes, el svn checkout, svn update, svn switch y svn revert comandos tambin fijarn las marcas de tiempo de ltima modificacin de los archivos que se tocan.

La seccin auto-props controla la capacidad del cliente de Subversion para establecer automticamente las propiedades de los archivos cuando se agregan o se importen. Contiene un nmero de pares clavevalor en el modelo de formato = PROPNAME = PROPVALUE donde PATRN es un patrn de archivo que coincide con una serie de nombres de archivo y el resto de la lnea es la propiedad y su valor. Varios partidos en un archivo se traducir en mltiples propsets para ese archivo, sin embargo, no hay garanta de que las auto-props se aplican en el orden en el que estn lis-dos en el fichero de configuracin, por lo que no puede tener una regla "reemplazar" otro. Usted puede encontrar varios ejemplos del uso de auto-props del fichero config. Por ltimo, no olvides poner enable-auto-props a yes en la seccin miscelnea, si desea habilitar la auto-props.

Propiedades
Ya hemos cubierto en detalle cmo Subversion almacena y recupera varias versiones de archivos y directo-sorios en su repositorio. Captulos enteros han sido dedicados a esta pieza fundamental de la funcionalidad proporcionada por la herramienta. Y si el apoyo versionado acabase aqu, Subversion seguira estando completo desde el punto de vista de control de versiones. Pero no se detiene all. Adems de versionar sus directorios y ficheros, Subversion proporciona interfaces para agregar, modificar-cin, y la eliminacin de metadatos versionado en cada uno de sus directorios y ficheros versionados. Nos referimos a estos metadatos como propiedades, y se puede considerar como tablas de dos columnas que se asignan nombres de propiedades con valores ar-bitrary unidos a cada elemento en su copia de trabajo. En trminos generales, los nombres y los valores de las propiedades pueden ser lo que usted quisiera que fueran, con la restriccin de que los nombres sean texto legible. Y la mejor parte de estas propiedades es que ellos tambin estn versionadas, igual que el contenido textual de los archivos. Puede modificar, confirmar y revertir los cambios de propiedades tan fcilmente como confirmar los cambios textuales. Y recibir los cambios de propiedad de otras personas como de actualizar su copia de trabajo.

Otras propiedades Subversion

en

Propiedades aparecen en Subversion en otros lugares, tambin. Al igual que los archivos y directorios pueden tener nombres de propiedades arbitrarias y valores vinculados a ellos, cada revisin en su conjunto puede tener propiedades arbitrarias anexas. Las mismas restricciones se aplican, legibles, los nombres del texto y nada-que-quieras, binarios en valores, excepto que las propiedades re-visin no estn versionadas. Consulte la"Propiedades no versionadas" para ms informacin sobre estas propiedades no versionadas. En esta seccin, examinaremos la utilidad, tanto para los usuarios de Subversion, y para Subversion propia de Apoyo a la Propiedad. Usted aprender acerca de los subcomandos svn relacionados con propiedades, y como propiedad modifica-ciones afectan a su flujo de trabajo normal de Subversion. Con suerte, estar convencido de que la subversin pro-piedades pueden mejorar su experiencia en el control de versiones.

Por qu caractersticas?
Las propiedades pueden ser adiciones muy tiles a su copia de trabajo. De hecho, el propio Subversion utiliza las propiedades a la casa informacin especial, y como podra ser necesaria una forma de indicar que cierto procesamiento especial. De igual modo, puede utilizar las propiedades para sus propios fines. Por supuesto, todo lo que puedes hacer con las propiedades tambin se puede hacer usando ficheros versionados regulares, pero considere el siguiente ejemplo de uso de propiedades de Subversion. Digamos que desea disear un sitio web que alberga muchas fotos digitales, y los muestra con subttulos y una marca de fecha. Ahora, el conjunto de fotos cambia constantemente, por lo que le gustara tener la

mayor cantidad de este sitio automatizado posible. Estas fotos pueden ser bastante grandes, por lo que es comn con los sitios de esta naturaleza, 129 Temas avanzados desea proporcionar miniaturas de las imgenes que los visitantes del sitio. Usted puede hacer esto con ficheros tradicionales. Es decir, usted puede tener su imagen123.jpg y un lado-a-lado imagen123thumbnail.jpg en un directorio. O si desea mantener los nombres de archivo de la misma, es posible que las miniaturas en un directorio diferente, como thumbnails/image123.jpg. Tambin puede guardar sus ttulos y marcas de fechas de una manera similar, una vez ms separado de la imagen del original. Pronto, su rbol de archivos es un desastre, y crece en mltiplos con cada nueva foto que agregamos al sitio. Ahora considere la misma configuracin utilizando propiedades de los archivos de Subversion. Imagine tener un solo archivo de imagen, im-age123.jpg, y luego las propiedades establecidas en ese archivo llamado leyenda, marca de fecha, e incluso en miniatura. Ahora el directorio de copia de trabajo se ve mucho ms hecho manejable-in, parece que no son ms que archivos de imagen en ella. Pero sus scripts de automatizacin saben mejor. Saben que pueden usar svn (o mejor an, pueden utilizar el lenguaje de Subversion enlaces-ver la seccin titulada "Uso de Idiomas Aparte de C y C + + ") Para extraer la informacin adicional que su sitio necesita para mostrar sin tener que leer un archivo de ndice o jugar juegos de manipulacin de rutas. Cmo (y si) se utiliza propiedades de Subversion depende de usted. Como hemos mencionado, Subversion usa las propias de las propiedades, que discutiremos ms adelante en este captulo. Pero primero, vamos a discutir la forma de manipular el inmueble con el programa svn.

Manipulando propiedades
El comando svn proporciona varias maneras de agregar o modificar las propiedades del archivo y de directorio. Para las propiedades con valores cortos y legibles, tal vez la forma ms sencilla de aadir una nueva propiedad es especificar el nombre de la propiedad y el valor en la lnea de mando de la propset subcomando. $ Svn propset copyright '(c) 2003 Red-Bean Software' calc / conjunto de propiedades button.c 'copyright' on 'calc / button.c' $ Pero hemos estado alabando la flexibilidad que Subversion ofrece para sus valores de propiedad. Y si usted est planeando tener un valor de la propiedad textual, o incluso binario de varias lneas, es probable que no desea proporcionar ese valor en la lnea de comandos. As que la propset subcomando toma - file (-F) opcin para especificar-cin del nombre de un archivo que contiene el nuevo valor de la propiedad. $ Svn propset licencia F / path / to / LICENCIA calc / button.c set 'licencia' propiedad de 'calc / button.c' $ Hay algunas restricciones en los nombres que puede utilizar para las propiedades. A nombre de la propiedad debe comenzar con una letra, dos puntos (:), o un guin bajo (_), despus de eso, tambin puede utilizar dgitos, guiones (-) y puntos (.). 3 Adems de la orden propset, el programa svn suministra el comando propedit. Este comando utiliza el programa editor de configuracin (verla seccin "Config") Para agregar o modificar las propiedades. Cuando se ejecuta el comando svn invoca su programa editor en un fichero temporal que contiene el valor actual de la propiedad (o que est vaco, si est agregando una nueva propiedad). Luego, simplemente modifique el valor en su programa de edicin hasta que represente el nuevo valor que desea almacenar para la propiedad, guarde el archivo temporal y, a continuacin, salga del programa editor. Si Subversion detecta que ha cambiado realmente el valor actual de la propiedad, est dispuesta a aceptar que a medida que el nuevo valor de la propiedad. Si sale de su editor sin realizar ningn cambio, no se producir ninguna modificacin de la propiedad.

$ Svn propedit copyright calc / button.c # # # salir del editor sin cambios

3 Si usted est familiarizado con XML, esto es ms o menos el subconjunto ASCII de la sintaxis de XML "Nombre".

130 Temas avanzados No hay cambios en los 'derechos de autor' propiedad de 'calc / button.c' $ Debemos tener en cuenta que, al igual que con otros subcomandos svn, aquellos relacionados con las propiedades pueden actuar sobre varias rutas a la vez. Esto le permite modificar las propiedades de conjuntos completos de archivos con un solo comando. Por ejemplo, podramos haber hecho: $ Svn propset copyright '(c) 2002 Red-Bean Software' calc / set * propiedad 'copyright' on 'calc / Makefile' conjunto de propiedades de 'copyright' on 'calc / button.c' propiedad 'copyright' set en el 'calc / integer.c' . . . $ Todo de este hotel no es aadir y editar realmente muy til si no se puede conseguir fcilmente el valor de propiedad almacenado. As que el programa svn proporciona dos subcomandos para mostrar los nombres y valores de las propiedades almacenados en archivos y directorios. El comando svn proplist mostrar una lista de los nombres de las propiedades que hay en el camino. Una vez que se conocen los nombres de las propiedades en el nodo, puede solicitar sus valores individualmente usando svn propget. Este comando, dada una ruta (o conjunto de caminos) y un nombre de propiedad, imprimir el valor de la propiedad a la secuencia de salida estndar. $ Svn proplist calc / Propiedades button.c sobre 'calc / button.c': licencia de derechos de autor $ Svn propget copyright calc button.c (C) 2003 Red-Bean Software

Incluso hay una variante del comando proplist que listar el nombre y el valor de todas las propiedades. Basta con proporcionar la opcin - verbose (-v). $ Svn proplist - verbose calc / Propiedades button.c sobre 'calc / button.c': Copyright: (c) 2003 Red-Bean Software licencia: ================================================ ================ Copyright (c) 2003 Red-Bean Software. Todos los derechos reservados. La redistribucin y el uso en formas fuente y binario, con o sin modificacin, siempre que se cumplan las siguientes condiciones: 1. Las redistribuciones del cdigo fuente deben conservar el aviso de copyright anterior, esta lista de condiciones y la receta de la famosa-judas-y-arroz rojo de Fitz. . .

. El ltimo subcomando relacionada con la propiedad es propdel. Dado que Subversion le permite almacenar propiedades con valores vacos, no se puede eliminar una propiedad usando propedit o propset. Por ejemplo, este comando no producir el efecto deseado: $ Svn propset licencia'' calc / button.c set 'licencia' propiedad de 'calc / button.c' $ Svn proplist - verbose calc / Propiedades button.c sobre 'calc / button.c': 131 Temas avanzados Copyright: (c) Licencia de Software Red-Bean 2003: $ Es necesario utilizar el comando propdel eliminar propiedades del todo. La sintaxis es similar a los otros comandos de propiedad: $ Svn propdel licencia calc / button.c propiedad 'licencia' eliminar de 'calc / button.c'. $ Svn proplist - verbose calc / Propiedades button.c sobre 'calc / button.c': Copyright: (c) 2003 Red-Bean Software $ Ahora que usted est familiarizado con todos los subcomandos svn relacionados con propiedades, vamos a ver cmo las modificaciones de propiedades afectan el flujo de trabajo habitual de Subversion. Como hemos mencionado anteriormente, archivo y directorio pro-piedades son versionadas, igual que los contenidos del archivo. Como resultado, Subversion proporciona las mismas oportunidades para la fusin en forma limpia o conflictivos de la moda-alguien ms modificaciones en su cuenta.

Modificar las propiedades de revisin Recuerda esas propiedades de revisiones sin versionar? Puede modificar esos, tambin, con el programa svn. Slo tienes que aadir el parmetro - la lnea de comandos revprop y especifique la revisin de la propiedad que desea modificar. Dado que las revisiones son globales, no es necesario especificar una ruta en este caso, siempre y cuando se le coloca en la copia de trabajo del repositorio cuya propiedad de revisin desea modificar. Por ejemplo, es posible que desee reemplazar el mensaje de registro de una revisin existente. 4

$ Svn propset svn: log '* button.c: Fijar una advertencia del compilador. -R11 - propiedad revprop 'svn: log' set en el repositorio de revisin de '11 ' $ Tenga en cuenta que la capacidad de modificar estas propiedades sin versin debe ser aadido de forma explcita por el repositorio de admi- dor (vase la seccin "Scripts de enganche"). Dado que las propiedades no son versionadas, corre el riesgo de perder informacin si usted no es cuidadoso con sus ediciones. El administrador del repositorio puede configurar mtodos para proteger contra la prdida, y por defecto, la modificacin de las propiedades no versionadas est desactivada. Y como con el contenido del archivo, los cambios en las propiedades son modificaciones locales, slo hizo permanente cuando se cometen en el repositorio con svn commit. Los cambios de propiedad pueden ser fcilmente deshecha, tambin el comando svn revert recuperar sus archivos y directorios a su estado sin editar, contenidos, propiedades y todos. Adems, puedes recibir informacin interesante sobre el estado de su expediente y propiedades directa-ORY usando los comandos svn diff y svn status. $ Svn status calc / button.c M calc / button.c $ Svn diff calc / button.c Los cambios de propiedades calc / button.c

en:

Nombre: copyright + (C) 2003 Red-Bean Software

4Fixing

errores ortogrficos, gramaticales gotchas y "just-plain-incorrecto" en los mensajes de registro de las confirmaciones es quizs el caso de uso ms comn para la- Revpropopcin.

132 Temas avanzados $ Observe cmo las pantallas de estado subcomando M en la segunda columna en lugar de la primera. Esto se debe a que hemos modificado propiedades de calc / button.c, pero sin modificar su contenido textual. Haber cambiado ambos, habramos visto Men la primera columna, tambin (vase la seccin "svn status").

Conflictos propiedad

de

Al igual que con el contenido del archivo, modificaciones de las propiedades locales pueden entrar en conflicto con los cambios cometidos por otra persona. Si actualiza el directorio de la copia de trabajo y recibir los cambios de propiedad de un recurso versionado que chocan con los suyos, Subversion indicar que el recurso est en un estado de conflicto. % Svn update calc Mcalc / Makefile.in C calc / button.c Actualizado a revisin 143. $ Subversion tambin crear en el mismo directorio que el recurso en conflicto, un archivo con una extensin. Prej que contiene los detalles del conflicto. Debe examinar el contenido de este archivo para que pueda decidir cmo resolver el conflicto. Hasta que se resuelva el conflicto, ver una C en la segunda columna de svn status sali-da de ese recurso, y los intentos de cometer sus modificaciones locales fallar. $ Svn status calc C calc / button.c ? calc / button.c.prej $ Cat calc / button.c.prej prop 'lineCount': el usuario Actualiza establece en '1301'. $

establece

en

'1256

',

pero

Para resolver los conflictos de propiedad, slo tiene que asegurarse de que las propiedades en conflicto contienen los valores que deberan, y luego usar el comando svn resuelto para alertar a Subversion que usted haya resuelto manualmente el problema. Tambin puede ser que haya notado la forma no estndar que Subversion actualmente muestra diferencias propiedad. Todava puede ejecutar svn diff y redirigir la salida para crear un fichero de

parche usable. El programa patch ignorar los parches, como una regla de propiedad, ignora cualquier ruido que no puede entender. Esto significa desafortunadamente que para aplicar completamente un parche generado por svn diff, cualquier modificacin de la propiedad tendr que ser aplicada a mano. Como puede ver, la presencia de modificaciones de propiedades no tiene efecto excelente en el flujo de trabajo tpico de Subversion. Sus patrones generales de actualizar su copia de trabajo, comprobar el estado de los archivos y directorios, informes sobre las modificaciones realizadas, y de cometer esas modificaciones al repositorio son completamente inmunes a la presencia o ausencia de propiedades. El programa svn tiene algunos subcomandos adicionales para efectuar cambios de propiedades, pero que es la nica asimetra notable.

Propiedades especiales
Subversion no tiene reglas particulares sobre propiedades se pueden utilizar para cualquier propsito. Subversion slo pide que no use nombres de propiedades que comienzan con el prefijo svn:. Ese es el espacio de nombres que se hace a un lado para su propio uso. De hecho, Subversion define ciertas propiedades que tienen efectos mgicos sobre los archivos y directorios a los que estn unidos. En esta seccin, desvelaremos el misterio, y describiremos 133 Temas avanzados cmo estas propiedades especiales pueden hacerle la vida un poco ms fcil.

svn: ejecutable
La propiedad svn: ejecutable se usa para controlar un archivo del sistema de ficheros versionado a nivel de bit de ejecucin permiso de una manera semi-automtica. Esta propiedad no ha definido los valores de su mera presencia indica un deseo de que la ejecucin se mantendr bit de permiso activado por Subversion. La eliminacin de este inmueble volver a almacenar el control total del bit de ejecucin al sistema operativo. En muchos sistemas operativos, la capacidad de ejecutar un archivo como un comando se rige por la presencia de un bit de permiso de ejecucin. Este bit normalmente por defecto est desactivado, y se deben habilitar de forma explcita por el usuario para cada archivo que lo requiera. En una copia de trabajo, los nuevos archivos se crean todo el tiempo que se reciben nuevas versiones de los archivos existentes durante una actualizacin. Esto significa que usted puede activar el bit de ejecucin en un archivo, a continuacin, actualizar su copia de trabajo, y si el archivo fue cambiado como parte de la actualizacin, su bit de ejecucin puede haber sido desactivado. As, Subversion proporciona la propiedad svn: executable para mantener el poco ex-ecute habilitado. Esta propiedad no tiene ningn efecto sobre los sistemas de ficheros que no tienen concepto de bits de permiso de ejecucin, tales como FAT32 y NTFS. 5 Adems, a pesar de que no tenga valores definidos, Subversion forzar el valor a * al establecer esta propiedad. Por ltimo, esta propiedad slo es vlida en los archivos, no en los directorios.

svn: mime-type
La propiedad svn: mime-type tiene varios propsitos en Subversion. Adems de ser un lugar de almacenamiento de uso general para Multipurpose Internet Mail Extensions de un archivo (MIME) de clasificacin, el valor de esta propiedad determina algunas caractersticas del comportamiento de Subversion. Por ejemplo, si un archivo de svn: mime-type propiedad se establece en un no-texto tipo MIME (por lo general, algo que no comienza con text /, aunque hay excepciones), Subversion asumir que el archivo binario que contiene es decir, no-datos legibles. Uno de los beneficios que Subversion proporciona tpicamente es contextual, basado en lnea fusin de los cambios recibidos del servidor durante una actualizacin en el archivo de trabajo. Pero para los archivos que se cree que contienen datos binarios,

no existe el concepto de una "lnea". Por lo tanto, para esos archivos, Subversion no intenta realizar un fusionado contextual durante las actualizaciones. En su lugar, cada vez que ha modificado localmente un archivo de copia de trabajo binario que tambin se actualiza, el archivo se renombra con la extensin. Orig, y luego Subversion almacena un nuevo archivo copia de trabajo que contiene los cambios recibidos durante la actualizacin, pero no su modificaciones locales propios, en el nombre de archivo original. Este comportamiento es realmente para la proteccin del usuario frente a los intentos fallidos de realizar fusionados contextuales en los archivos que simplemente no se pueden fusionar contextualmente. Adems, si la propiedad svn: mime-type est establecido, entonces el mdulo Apache Subversion usar su valor para rellenar el Content-type: cabecera HTTP al responder a las peticiones GET. Esto da una pista crucial sobre cmo mostrar un fichero cuando examina su repositorio con un navegador web.

svn: ignore
La propiedad svn: ignore contiene una lista de patrones de ficheros que ciertas operaciones de Subversion se ig-nore. Quizs la propiedad especial ms comnmente utilizado, que trabaja en conjunto con la opcin de configuracin de tiempo de ejecucin global-ignora (vasela seccin "Config") Para filtrar los archivos y directorios no versionados de comandos svn status, svn add y svn import. La razn de ser de la propiedad svn: ignore es fcil de explicar. Subversion no asume que cada archivo o subdirectorio de una copia de trabajo est diseado para el control de versiones. Los recursos deben ser colocados de forma explcita bajo la gestin de Subversion usando la propiedad svn add o svn import. Como res-ult, a menudo hay muchos recursos en una copia de trabajo que no estn versionados. Ahora, el comando svn status muestra como parte de su salida cada fichero o subdirectorio en un

5Los sistemas de archivos de Windows utilizan extensiones de archivos (por ejemplo,

. EXE,. BAT y. COM) para denotar archivos ejecutables.

134 Temas avanzados copia de trabajo que no est filtrado por la opcin global-ignores (o su valor por defecto incorporado). Esto se hace para que los usuarios puedan ver si quizs han olvidado poner un recurso de control de versiones. Pero Subversion es incapaz de adivinar los nombres de todos los recursos que debe ser ignorado. Adems, a menudo hay cosas que deberan ser ignoradas en cada copia de trabajo de un repositorio particular. Para obligar a todos los usuarios de ese repositorio para agregar patrones de esos recursos a sus reas de configuracin en tiempo de ejecucin no slo sera una carga, sino que tiene el potencial para entrar en conflicto con las necesidades de configuracin de otras copias de trabajo que el usuario ha desprotegido. La solucin es almacenar los patrones de ignorar que son exclusivos de los recursos que puedan aparecer en un directo-teora dada con el propio directorio. Los ejemplos ms comunes de los recursos no versionados que son bsicamente nicos de cada directorio, sin embargo probable que aparezca all, incluyen la produccin de compilaciones del programa. O, para usar un ejemplo ms apropiado para este libro, los archivos HTML, PDF o PostScript generados como resultado de la conversin de algunos archivos fuente XML DocBook a un formato de salida ms legible.

No haga caso de los patrones para usuarios de CVS El Subversion svn: ignore es muy similar en sintaxis y la funcin a la cvsignore CVS.. De hecho, si est migrando una copia local de CVS a Subversion, puede migrar directamente los patrones de exclusin mediante el archivo cvsignore como archivo de entrada para el comando svn propset.: $ Svn propset svn: ignore-F cvsignore.. propiedad 'svn: ignore' set on '.' $ Hay, sin embargo, algunas diferencias en las formas en que CVS y Subversion manejan los patrones. Los dos sistemas usan los patrones de exclusin en algunas pocas diferentes, y hay pequeas discrepancias en lo que los patrones de ignorar aplican. Adems, Subversion no reconoce el uso de la! patrn como una reposicin de nuevo a no tener patrones de ig-nore en absoluto. A tal efecto, la propiedad svn: ignore es la solucin. Su valor es una coleccin de varias lneas de patrones de ficheros, un patrn por lnea. La propiedad se encuentra en el directorio en el que desea que los patrones que deben aplicarse. 6 Por ejemplo, supongamos que tiene la siguiente salida de svn status: $ Svn status calc M calc / button.c ? calc / calculadora ? calc / data.c ? calc / debug_log ? calc/debug_log.1 ? calc/debug_log.2.gz ? calc/debug_log.3.gz En este ejemplo, se han hecho algunas modificaciones de las propiedades a button.c, pero en su copia de trabajo tambin tiene algunos archivos no versionados: el programa de calculadora ms reciente que he compilado desde el cdigo fuente, un archivo de origen denominado data.c y un conjunto de ficheros de depuracin. Ahora, usted sabe que su sistema de construccin siempre resulta en el programa de calculadora que se generen. 7 Y usted sabe que el banco de pruebas siempre deja los archivos de registro de depuracin por ah. Estos hechos son ciertos para todos los que trabajan ejemplares, no slo el suyo propio. Y usted sabe que usted no est interesado en ver las cosas cada vez que ejecute svn status. As que usted usa svn propedit svn: ignore calc aadir algunos patrones de ignorar a la calc dir-ectory. Por ejemplo, puede aadir lo siguiente como nuevo valor de la propiedad svn: ignore:

Patrones 6.los son estrictamente para ese directorio, que no llevan de forma recursiva en subdirectorios.

7Isn't que el objetivo de un sistema de compilacin?

135

Temas avanzados calculadora debug_log * Despus de aadir esta propiedad, ahora tendr una modificacin de la propiedad local en el calco directo de memoria. Pero note lo dems es diferente acerca de su salida de svn status: $ Svn status M calc M calc / button.c ? calc / data.c Ahora, toda la costra no se encuentra en la salida! Por supuesto, esos archivos se encuentran todava en su copia de trabajo. Subversion es simplemente no recuerda que ellos son el presente y el versionado. Y ahora, con todo el ruido trivial desaparece de la pantalla, lo que queda es ms interesante artculos-como el archivo de cdigo fuente que probablemente olvid poner bajo control de versiones. Si desea ver los archivos ignorados, puede pasar la opcin - no-ignore a Subversion: $ Svn status - noignore M calc / button.c I calc / calculadora ? calc / data.c I calc / debug_log I calc/debug_log.1 I calc/debug_log.2.gz I calc/debug_log.3.gz La lista de los patrones de ignorar tambin es utilizado por svn add y svn import. Ambas operaciones implican pidiendo a Subversion que comience la gestin de un conjunto de archivos y directorios. En lugar de obligar al usuario a escoger y elegir los archivos en un rbol desea comenzar de versiones, Subversion usa los patrones de ignorar para de-terminar los archivos no deben ser barridos en el sistema de control de versiones como parte de un adi-cin recursiva mayor o importar operacin.

svn: keywords
Subversion tiene la capacidad de sustituir piezas de palabras clave tiles, informacin dinmica acerca de un archivo-en-Sioned ver el contenido del archivo en s. Palabras clave generalmente describen informacin sobre la ltima vez que el archivo se sabe que va a modificar. Dado que esta informacin cambia cada vez que cambia el archivo, y lo ms importante, justo despus de los cambios de archivo, es una molestia para cualquier proceso salvo que el sistema de control de versiones para mantener los datos completamente al da. Izquierda a los autores humanos, la informacin inevitablemente quedara desfasada. Por ejemplo, supongamos que tiene un documento en el que desea mostrar la ltima fecha en que se modific. Podras carga todos los autores de ese documento, antes de enviar sus cambios, tambin modifiquen la parte del documento que describe cundo se cambi por ltima vez. Pero tarde o temprano, alguien se olvide de hacer eso. En vez pedirle a Subversion para realizar sustituciones de palabras clave en la palabra clave de ltima ChangedDate. Usted controla donde se inserta la palabra clave en el documento mediante la colocacin de una marca de palabra clave en la ubicacin deseada en el archivo. Este anclaje es slo una cadena de texto con formato PalabraClave $ $. Todas las palabras clave distinguen entre maysculas y minsculas en la que aparecen como anclas en archivos: debe utilizar el capitaliz-cin correcta para que la palabra clave se expanda. Debe tener en cuenta el valor de la propiedad svn: keywords para ser maysculas y minsculas demasiado ciertos nombres de palabras clave sern reconocidos con independencia de la caja, pero este comportamiento est en desuso.

136 Temas avanzados Subversion define la lista de palabras clave para la sustitucin. Esta lista contiene los siguientes cinco palabras clave, algunos de los cuales tienen alias que tambin se puede utilizar: Fech a Esta palabra clave describe la ltima vez que el archivo se sabe que se han cambiado en el repositorio, y tiene algo as como $ Date: 2002-07-22 21:42:37 -0700 (Lun 22 Jul 2002) $. Tambin se puede especificar como LastChangedDate. Revisin Esta palabra clave describe la ltima revisin conocida en la que el archivo ha cambiado en el repositorio, y tiene algo as como $ Revision: 144 $. Tambin se puede especificar como LastChangedRevision o Rev. Autor Esta palabra clave describe el ltimo usuario conocido para cambiar este fichero en el repositorio, y se ve algo como $ Author: harry $. Tambin se puede especificar como LastChangedBy. HeadURL Esta palabra clave describe la URL completa a la ltima versin del archivo en el repositorio, y se ve algo como $ HeadURL: http://svn.collab.net/repos/trunk/README $. Puede ser abreviada como URL. Id en ti fi ca ci n Esta palabra clave es una combinacin comprimida de las otras palabras clave. Su sustitucin tiene el aspecto $ Id: calc.c 148 2002-07-28 21:30:43 Z carmen $, y se interpreta en el sentido de que el archivo calc.c fue modificado en la revisin 148 en la noche del 28 de julio 2002 por el usuario carmen. Simplemente aadir texto de palabra clave a su fichero no hace nada especial. Subversion nunca intentar realizar sustituciones textuales en sus ficheros a pedido expresamente que lo haga. Despus de todo, quizs est escribiendo un documento 8 sobre el uso de palabras clave, y usted no quiere que Subversion sustituya sus bonitos ejemplos de no sustituidos de palabras claves! Para decirle a Subversion si desea sustituir palabras clave en un archivo en particular, una vez ms volvemos a los subcomandos propie-dad relacionados. La propiedad svn: keywords, cuando se establece en un fichero versionado, controla qu palabras clave sern sustituidos en ese archivo. El valor es una lista delimitada por espacios de los nombres de palabras clave o ali-ases se encuentran en la tabla anterior. Por ejemplo, supongamos que tiene un archivo versionado llamado weather.txt que tiene este aspecto: Este es el ltimo informe de las lneas del frente. $ $ LastChangedDate $ $ Ap Cmulos estn apareciendo con ms frecuencia como se acerca el verano. Sin la propiedad svn: keywords encuentra en ese archivo, Subversion no har nada especial. Ahora, vamos a en-poder sustitucin de la palabra clave LastChangedDate.

$ Svn propset svn: keywords "Fecha Autor" propiedad weather.txt 'svn: keywords' set en "weather.txt ' $ Ahora que usted ha hecho una modificacin de la propiedad local en el archivo weather.txt. Usted ver ningn cambio en el contenido del archivo (a menos que usted hizo algo de su propia antes de establecer la propiedad). Observe que el archivo contiene una marca de palabra clave para la palabra clave Rev, sin embargo, no incluye la palabra clave en el prop-

8 ... o tal vez incluso una seccin de un libro ...

137 Temas avanzados valor breza partimos. Subversion ignorar felizmente peticiones para sustituir palabras clave que no estn presentes en el archivo, y no sustituir palabras clave que no estn presentes en la propiedad svn: keywords valor de la propiedad.

Palabras espurias

clave

diferencias

El resultado visible para el usuario de sustitucin de palabras clave puede llevar a pensar que todas las versiones de un archivo con esa caracterstica en uso difiere de la versin anterior, por lo menos en el rea donde se coloc la palabra clave de anclaje. Sin embargo, esto no es realmente el caso. Mientras se buscan modificaciones locales durante svn diff, y antes de transmitir esas modificaciones locales durante svn commit, Subversion "no sustituye" las palabras clave anteriormente sustituido. El resultado es que las versiones de los archivos que se almacenan en el repositorio contienen nicamente las modificaciones reales que los usuarios realizan en el archivo. Inmediatamente despus de confirmar este cambio de propiedad, Subversion actualizar su archivo de trabajo con el nuevo texto sustitutivo. En lugar de ver la palabra clave $ LastChangedDate $, ver su resultado sustituido. El resultado tambin contendr el nombre de la palabra clave, y contina siendo limitada por el signo caracteres de dlar ($). Y como lo habamos previsto, la palabra Apocalipsis no fue sustituido porque no pedimos que sea. Tenga en cuenta tambin que fijamos la propiedad svn: keywords para "Fecha Autor", pero la palabra clave de anclaje utilizado el alias $ LastChangedDate $ y todava ampliado correctamente. Este es el ltimo informe de las lneas del frente. $ LastChangedDate: 2002-07-22 21:42:37 -0700 (Lun 22 Jul 2002) $ $ $ Ap Cmulos estn apareciendo con ms frecuencia como se acerca el verano. Si otra persona ya un cambio a weather.txt, su copia de ese archivo seguir visualizar el mismo valor clave sustituido como antes-hasta que actualice su copia de trabajo. En ese momento las palabras clave en el archivo weather.txt sern re-sustituidos con informacin que refleja la ltima confirmacin conocida a ese archivo.

Subversion 1.2 introdujo una nueva variante de la sintaxis de la palabra clave que llev, use-ful-aunque quizs atpico funcionalidad adicional. Ahora puede decirle a Subversion para mantener una longitud fija (en trminos del nmero de bytes consumidos) para la palabra clave sustituido. Mediante el uso de un par de dos puntos (::) despus de la palabra clave, seguido de un nmero de caracteres de espacio, se define que ancho fijo. Cuando Subversion va a sustituir la palabra clave para la palabra clave y su valor, ser esencialmente reemplazar slo los espacios en blanco, dejando el ancho total del campo de palabras clave sin cambios. Si el valor sustituido es ms corto que la anchura del campo definido, habr caracteres de relleno adicionales (espacios) en el extremo del campo sustituido; si es demasiado larga, se trunca con un hash especial (#) carcter justo antes de la final dol-lar firmar terminador. Por ejemplo, supongamos que tiene un documento en el que tienes alguna seccin de datos tabulares que reflejan Subversion palabras clave del documento. Uso de la sintaxis de sustitucin de palabras clave Subversion original, el archivo podra ser algo como: $ $ Rev.: Revisin de la ltima confirmacin $ Author $: Autor de la ltima confirmacin $ Date $: fecha de la ltima confirmacin Ahora, eso es bonito y tabular en el comienzo de las cosas. Pero cuando se comete ese archivo (con sustituciones de palabras clave est habilitada, por supuesto), que se ve: $ Rev: $ 12: confirmacin Revisin de la ltima

138 Temas avanzados $ Author: harry $: Autor de la ltima confirmacin $ Date: 2006-03-15 02:33:03 -0500 (Wed, 15 Mar 2006) $: Fecha de la ltima confirmacin El resultado no es tan hermoso. Y usted puede estar tentado a continuacin, ajuste el archivo despus de la sustitucin para que de nuevo se ve tabular. Pero que slo mantiene siempre y cuando los valores de palabras clave son la misma anchura. Si la ltima revisin confirmada enrolla para formar un nuevo valor de posicin (por ejemplo, 99 a 100), o si otra persona con un nombre de usuario ya compromete el archivo, material recibe toda torcida de nuevo. Sin embargo, si est utilizando Subversion 1.2 o superior, puede utilizar la nueva sintaxis de palabras clave de longitud fija, definir algunos anchos de campo que parecen cuerdos, y ahora el archivo podra tener este aspecto: $ Ap :: $: Revisin de la ltima confirmacin $ Author :: $: Autor de la ltima confirmacin $ Date :: $: Fecha de la ltima confirmacin Se compromete este cambio a su archivo. Esta vez, Subversion cuenta de la nueva palabra clave de longitud fija sndrome de impuestos, y mantiene el ancho de los campos definidos por el relleno que realiz entre el doble y coma y el signo de dlar al final. Despus de la sustitucin, el ancho de los campos es totalmente inalterada, los valores cortos de Autor Rev y se rellenan con espacios, y el campo Fecha de largo se trunca por un carcter almohadilla: $ Ap :: 13 $: Revisin de la ltima confirmacin $ Author :: harry $: Autor de la ltima confirmacin $ Date :: 2006-03-15 0 # $: Fecha de la ltima confirmacin El uso de palabras clave de longitud fija es especialmente til cuando se realizan sustituciones en formatos de archivo complejas que utilizan los propios campos de longitud fija de datos, o para los que el tamao almacenado de un campo de datos dada es overbearingly difciles de modificar desde fuera de

la aplicacin nativa del formato ( tales como los documentos de Microsoft Office).

Adverte ncia
Tenga en cuenta que debido a que el ancho de un campo de palabras clave se mide en bytes, existe la posibilidad de corrupcin de los valores de varios bytes. Por ejemplo, un nombre de usuario que contiene algunos UTF-8 caracteres de mltiples bytes pueden sufrir truncamiento en el medio de la cadena de bytes que componen uno de esos caracteres. El resultado ser una simple truncamiento cuando se observa a nivel de byte, pero probablemente aparecer como una cadena con una ltima carac-ter incorrecta o ilegible cuando se ve como texto UTF-8. Es posible que algunas aplicaciones, cuando se le pregunt para cargar el archivo, se daran cuenta de la UTF-8 roto texto y considere todo el archivo corrupto, negndose a operar en el archivo completo.

svn: eol-style
A menos que se indique lo contrario mediante un archivo de versionada svn: mime-type propiedad, Subversion asume que el fichero contiene datos legibles. En general, Subversion slo usa este conocimiento para determ ine-si son posibles diferenciales contextuales sobre ese archivo. De lo contrario, para Subversion, los bytes son bytes. Esto significa que, por defecto, Subversion no presta atencin al tipo de fin de lnea (EOL) marca-dores utilizados en sus archivos. Desafortunadamente, los diferentes sistemas operativos utilizan diferentes smbolos para representar el final de una lnea de texto en un archivo. Por ejemplo, lo de siempre seal de fin de lnea utilizada por el software en la plataforma Windows es un par de caracteres de control de retorno de carro ASCII (CR) y salto de lnea (LF). Software de Unix, sin embargo, slo utiliza el carcter LF para indicar el final de una lnea. No todas las distintas herramientas en estos sistemas operativos estn preparados para entender los archivos que contienen la lnea

139 Temas avanzados finales en un formato que difiere del estilo de lnea nativo del sistema operativo en el que se estn ejecutando. Los indicadores ms comunes son que los programas Unix tratan el carcter CR presente en ficheros de Windows como un personaje regular (generalmente traducido como ^ M), y que los programas de Windows combinan todas las lneas de un fichero Unix en una lnea gigante porque ningn retorno de carro-avance de lnea ( o CRLF) combinacin de caracteres se encontr para indicar el final de la lnea. Esta sensibilidad a marcas EOL extraas puede resultar frustrante para las personas que comparten un archivo a travs de sistemas operativos diferentes. Por ejemplo, considere un archivo de cdigo fuente, y los desarrolladores que modifiquen este fichero tanto en sistemas Windows y Unix. Si todos los desarrolladores usan herramientas que preservan el estilo de lnea del archivo que termina, no se producen problemas. Pero en la prctica, muchas herramientas comunes o bien fallan al leer un fichero con marcas EOL extraas, o convertir los finales de lnea del archivo al estilo nativo cuando se guarda el archivo. Si lo primero es cierto para un de-revelador, tiene que utilizar una utilidad de conversin externo (como dos2unix o su compaero, unix2dos) para preparar el archivo para editarlo. Este ltimo caso no requiere ninguna preparacin adicional. Pero ambos casos resultan en un archivo que es diferente de la original, literalmente, en cada lnea! Antes de comprometerse sus cambios, el usuario tiene dos opciones. O bien se puede utilizar una utilidad de conversin para restaurar el archivo modificado a la misma lnea de estilo que se encontraba antes de realizar modificaciones en su final. O bien, puede simplemente

cometer los archivos-nuevas marcas EOL y todo. El resultado de escenarios incluyen tiempo perdido en modificaciones innecesarias sobre archivos comprometidos. El tiempo perdido es bastante doloroso. Pero cuando un cambio modifica toda lnea en un archivo, lo que complica la tarea de determinar cules de esas lneas se han cambiado de una manera no trivial. Dnde estaba el fallo realmente fija? En qu lnea se introdujo un error de sintaxis? La solucin a este problema es la propiedad svn: eol-style. Cuando esta propiedad se establece en un valor vlido, Subversion usa para determinar qu tratamiento especial para realizar en el archivo para que la lnea del archivo de estilo que termina no es flip-flop con cada compromiso que viene de un sistema operativo diferente. Los valores vlidos son los siguientes: nativo Esto provoca que el fichero contiene las marcas EOL nativas del sistema operativo en el que Subversion se ha ejecutado. En otras palabras, si un usuario en una mquina Windows obtiene una copia de trabajo que contiene un archivo con una propiedad svn: eol-style establece en nativo, el archivo contendr marcas EOL CRLF. Un usuario de Unix que obtenga una copia de trabajo que contiene el mismo fichero ver marcas EOL LF en la copia del archivo. Tenga en cuenta que Subversion en realidad almacenar el archivo en el repositorio usando marcas EOL LF normalizadas sin importar el sistema operativo. Esto es bsicamente transparente para el usuario, sin embargo. CRLF Esto provoca que el fichero contiene secuencias CRLF como marcas EOL, sin importar el sistema operativo en uso. LF Esto provoca que el fichero contenga el carcter LF para los marcadores de EOL, sin importar el sistema operativo en uso. CR Esto provoca que el fichero contenga el carcter CR para los marcadores de EOL, sin importar el sistema operativo en uso. Este estilo de final de lnea no es muy comn. Fue utilizado en las plataformas Macintosh antiguas (en la que Subversion ni siquiera correr).

svn: externals
La propiedad svn: externals contiene instrucciones para Subversion de poblar el directorio con otro o ms desprotegido Subversion copias de trabajo. Para obtener ms informacin sobre esta palabra clave y su uso, consulte la seccin "Repositorios externos". 140 Temas avanzados

svn: especial
La propiedad svn: especial es la nica propiedad svn: que no est destinado a ser fijado directamente o modificadas por los usuarios. Subversion establece automticamente esta propiedad cuando un objeto "especial" est programado para el Ade-ms, como un enlace simblico. El repositorio almacena un svn: objeto especial como un archivo normal. Sin embargo, cuando un cliente ve este alojamiento durante las cajas o actualizaciones, que interpreta el contenido del archivo y traduce el tema de nuevo en el tipo especial de objeto. En las versiones de corriente en el momento de la escritura Subversion, enlaces simblicos slo versionados tienen esta propiedad embargada, pero en futuras versiones de Subversion otros tipos especiales de los nodos utilizarn probablemente esta propiedad. Nota: Los clientes de Windows no tienen vnculos simblicos, y por lo tanto ignoran cualquier svn: archivos especiales procedentes de un repositorio que dicen ser enlaces simblicos. En Windows, el usuario termina con un archivo de ver-sioned ordinaria en la copia de trabajo.

svn: needs-lock
Esta propiedad se utiliza para indicar que el archivo al que est conectado debe ser cerrado antes de la edicin. El valor de la propiedad es irrelevante, Subversion se normalizar su valor a *. Cuando est presente, el archivo ser de slo lectura a menos que el usuario ha bloqueado explcitamente el archivo. Cuando un token de bloqueo est presente (como resultado de la carrera-cin de bloqueo svn), el archivo se convierte en lectura y escritura. Cuando se libera el bloqueo, el archivo se convierte de slo lectura de nuevo. Para obtener ms informacin acerca de cmo, cundo y por qu esta propiedad se debe utilizar, consulte laseccin llamada "Lock Comunicacin ".

Configuracin automtica de propiedades


Las propiedades son una potente caracterstica de Subversion, actuando como componentes clave de muchas caractersticas de Subversion discutido en otra parte de este y otros captulos-textual diff y apoyo fusin, sustituciones de palabras clave, traduccin nueva lnea, etc, pero para obtener el beneficio completo de propiedades, deben ser situado en los archivos y directorios adecuados. Por desgracia, eso puede ser un paso fcil de olvidar en la rutina de las cosas, sobre todo porque al no establecer una propiedad no suele dar lugar a una condicin de error evidente (al menos comparado con, digamos, en su defecto para aadir un archivo al control de versiones). Para ayudar a sus propiedades a aplicar a los lugares que los necesitan, Subversion proporciona un par de caractersticas simples pero tiles. Cada vez que se introduce un archivo de control de versiones mediante el svn add o svn import, Subversion ejecuta una heurstica muy bsica para determinar si el fichero se compone de contenido legible por humanos o no-humano-legible. Si esto ltimo es la decisin tomada, Subversion establece automticamente la propiedad svn: mime-type de ese fichero a application / octet-stream (el genrico "esto es una coleccin de bytes" tipo MIME). Por supuesto, si Subversion no acierta o si desea establecer la propiedad svn: mime-type a algo ms preciso, quizs image / png o application / xshockwave-flash-siempre se puede quitar o de corregir esa propiedad. Subversion tambin proporciona la funcin de auto-props, que le permite crear asignaciones de nombre de archivo de patrones de nombres y valores de propiedad. Estas asignaciones se hacen en el rea de configuracin de tiempo de ejecucin. Nuevamente afectan a adiciones y las importaciones, y no slo pueden anular cualquier decisin MIME por defecto tipo realizada por Subversion durante esas operaciones, tambin puede configurar Subversion adicional o propiedades personalizadas, tambin. Por ejemplo, puede crear una relacin que dice que cada vez que aada ficheros JPEG-los que coinciden con el patrn * jpg-Subversion debera ajustar automticamente la propiedad svn:. Propiedad mime-type de esos ficheros a image / jpeg. . O tal vez todos los archivos que coinciden con * cpp debera tener svn: eol-style ajustada a los nativos, y svn: keywords establece el identificador. Apoyo Auto-prop es quizs la herramienta ms prctica relacionada con la propiedad en elSubversion caja de herramientas. Consulte la seccin "Configuracin" para ms informacin sobre la configuracin de ese apoyo.

Cierre
El modelo de Subversion "copiar-modificar-mezclar" es ptima cuando los usuarios estn colaborando en proyectos que con-sistir de archivos de texto de lnea de base, como el cdigo fuente del programa. Sin embargo, como se discuti en cuando se bloquea es 141 Temas avanzados Necesaria, a veces uno tiene que usar el "bloqueo-modificacin-desbloqueo" modelo en lugar de modelo simultneo estndar de Subversion. Cuando un archivo consiste en datos binarios, a menudo es difcil o imposible de fusionar dos conjuntos de cambios realizados en paralelo por diferentes usuarios. Por esta razn, Subversion 1.2 y ms tarde ofrece una caracterstica conocida como bloqueo, a menudo conocido como "obtenciones reservadas" en otros sistemas de control de versiones. Funcin de bloqueo de Subversion tiene dos

objetivos principales: Serializacin de acceso a un recurso. Permitir que el usuario agarra un derecho exclusivo de cambiar a un archivo en el repositorio. Si Harry se reserva el derecho de cambiar foo.jpg, entonces Sally no debera ser capaz de cometer un cambio en l. Ayudar a la comunicacin. Evitar que los usuarios de perder tiempo en cambios no fusionables. Si Harry ha vuelto a servido el derecho de cambiar foo.jpg, entonces debe ser fcil para Sally para notar este hecho y evitar trabajar en el archivo.

Funcin de bloqueo de Subversion se limita actualmente a los archivos-que an no es posible reservar el acceso a un rbol de directorio completo.

Tres significados "bloqueo"

de

En esta seccin, y en casi todas partes en este libro, la palabra "bloqueo" y "bloqueo" describen un mecanismo de exclusin mutua entre los usuarios para evitar chocar comete. Por desgracia, hay otros dos tipos de "bloqueo" con la que Subversion, y por lo tanto este libro, a veces tiene que estar preocupado. Cerraduras copia de trabajo, utilizado internamente por Subversion para evitar enfrentamientos entre los mltiples clientes de Subversion que operan en la misma copia de trabajo. Este es el tipo de bloqueo indicada por una L en la tercera columna de salida de estado SVN, y se elimin mediante el comando de limpieza de SVN, como se describe en la seccin"svn limpieza". Cerraduras de base de datos, utilizado internamente por el backend Berkeley DB para evitar enfrentamientos entre los mltiples programas que intentan acceder a la base de datos. Este es el tipo de bloqueo cuya persistencia no deseado despus de un error puede causar un repositorio para ser "metido", como se describe en la seccin denominada "Recuperacin del repositorio".

Usted puede olvidarse general sobre estos otros tipos de bloqueo, hasta que algo sale mal que le exija preocupa por ellos. En este libro, "cerradura", la primera clase a menos que lo contrario es bien claro por el contexto o Expli-citly indicado.

Creacin de cerraduras
En el repositorio de Subversion, un bloqueo es una pieza de metadatos que concede acceso exclusivo a un usuario a cambiar un archivo. Este usuario se dice que es el propietario del bloqueo. Cada cerradura tambin tiene un identificador nico, tpicamente una larga cadena de caracteres, conocido como el token de bloqueo. El repositorio gestiona bloqueos en una tabla separada, y hace cumplir las cerraduras durante una operacin de confirmacin. Si cualquier transaccin de confirmacin intenta modificar o eliminar el archivo (o eliminar una matriz del archivo), el repositorio exigir dos elementos de

informacin: 1. 2. La autenticacin de usuarios. El cliente realiza el compromiso debe estar autenticado como el propietario del bloqueo. Autorizacin de Software. Copia de trabajo del usuario debe enviar el token de bloqueo con la confirmacin, prov-cin de que sabe exactamente lo que bloquea que est usando.

Un ejemplo est en orden, para demostrar. Digamos que Harry ha decidido cambiar una imagen JPEG. A 142 Temas avanzados evitar que otras personas cometan cambios en el archivo, se bloquea el archivo en el repositorio utilizando el bloqueo svn comando: $ Svn lock banana.jpg - Mensaje de "Archivo de Edicin para el lanzamiento de maana." 'Banana.jpg' bloqueado por el usuario 'harry'. $ Svn status K banana.jpg $ Svn info banana.jpg Path: banana.jpg Nombre: banana.jpg URL: http://svn.example.com/repos/project/banana.jpg Repositorio UUID: edb2f264-5ef2-0310-a47a87b0ce17a8ec Revision: 2198 Nodo Tipo: Programa archivo: normales ltimo cambio Autor: frank Last Changed Rev: 1950 Fecha de ltima modificacin: 2005-03-15 12:43:04 -0600 (Tue, 15 Mar 2005) Texto ltima actualizacin: 2005-06-08 19:23:07 -0500 (Wed, 08 Jun 2005) Propiedades ltima actualizacin: 2005-06-08 19:23:07 -0500 (Wed, 08 Jun 2005): suma de comprobacin 3b110d3b10638f5d1f4fe0f436a5a2a5 Lock Token: opaquelocktoken: Dueo 0c0f600b-88f9-0310-9e48355b44d4a58e Lock: harry Bloquee Creado: 2005-06-14 17:20:31 -0500 (mar, 14 Jun 2005) Bloquee Comentarios (1 lnea): Editar el archivo para el lanzamiento de maana. Hay una serie de nuevas cosas demostrado en el ejemplo anterior. En primer lugar, se dio cuenta de que Harry pasa la opcin - mensaje a svn lock. Al igual que svn commit, el comando svn lock puede take (ya sea a travs de - message (-m) o - file (-F)) para describir la razn para bloquear el archivo. A diferencia de svn commit, sin embargo, bloqueo svn no exigir un mensaje con el lanzamiento de su editor de texto preferido. Lock comentarios son opcionales, pero todava recomienda para facilitar la comunicacin. En segundo lugar, el intento de bloqueo tuvo xito. Esto significa que el archivo no ha sido ya cerrada, y que Harry tena la ltima versin del archivo. Si la copia de trabajo de Harry del archivo haba sido fuera de fecha, el depsito habra rechazado la solicitud, lo que oblig a Harry a svn update y volver a intentar la mando de bloqueo. Observe tambin que despus de la creacin de la cerradura en el repositorio, la copia de trabajo contiene informacin acerca de la cach-lock ms importante an, el token. La presencia de la seal de bloqueo es crtico. Se da la autorizacin de copia-ING trabajo para hacer uso de la cerradura ms

adelante. El comando svn status muestra una K junto al archivo (abreviatura de bloqueo), lo que indica que el token est presente.

En cuanto a tokens de bloqueos Un token de bloqueo no es un token de autenticacin, por lo tanto como un token de autorizacin. La ficha no es un secreto protegido. De hecho, el nico token de una cerradura es detectable por cualquier persona que ejecuta svn info URL. Un token de bloqueo es especial slo cuando se vive dentro de una copia de trabajo. Es la prueba de que el bloqueo fue creada en la copia de trabajo en particular, y no en otro lugar por algn otro cliente. Simplemente autenticacin como el propietario del bloqueo no es suficiente para evitar accidentes. Por ejemplo: supongamos que bloquea un archivo en un ordenador en la oficina, quizs como parte de un conjunto de cambios en el pro-greso. No debera ser posible que una copia de trabajo (o cliente de Subversion suplente) en su ordenador personal para cometer algn cambio por error a ese mismo archivo, slo porque usted ha autenticado como el dueo del bloqueo. En otras palabras, el token de bloqueo impide que una pieza de software Subversion relacionadas de socavar el trabajo de anoth143 Temas avanzados

er. (En nuestro ejemplo, si usted realmente necesita para cambiar el archivo de una copia de trabajo alternativo, que tendra que romper el bloqueo y volver a bloquear el archivo.) Ahora que Harry ha bloqueado banana.jpg, Sally no puede cambiar o borrar el archivo: $ Whoami Sally $ Svn delete banana.jpg D banana.jpg $ Svn commit-m "Eliminar archivos intiles." Eliminacin banana.jpg svn: Commit fall (detalles a continuacin): svn: ELIMINAR de '/ Repositorio / proyecto / df4224ddc35d/banana.jpg!': 423 Locked (http://svn.example.com)

svn/wrk/64bad3a9-96f9-0310-818a-

Pero Harry, despus de tocar a la sombra del pltano del amarillo, es capaz de cometer sus cambios en el

archivo. Esto se debe a que autentifica como el propietario del bloqueo, y tambin debido a su copia de trabajo tenga el token de bloqueo correcto: $ Whoami harry $ Svn status M K banana.jpg $ Svn commit-m "Hacer banano ms amarillo" banana.jpg Enviando Transmisin de datos de archivo. Committed revision 2201. $ Svn status $ Tenga en cuenta que despus de que se termin la confirmacin, svn status muestra que el token de bloqueo ya no es presente en copia de trabajo. Este es el comportamiento estndar de svn commit: anda la copia de trabajo (o una lista de objetivos, si proporciona esa lista), y enva todo bloqueo fichas que encuentra en el servidor como parte de la transaccin de confirmacin. Despus de la confirmacin se realiza correctamente, todos los bloqueos del repositorio que se han mencionado son liberados, incluso en los archivos que no se cometieron. La lgica aqu es disuadir a los usuarios de ser descuidado sobre el bloqueo, o de la celebracin de esclusas durante demasiado tiempo. Por ejemplo, supongamos que Harry fuera a haphaz-ardly bloquear treinta archivos en un directorio llamado imgenes, porque es seguro de que los archivos que tiene que cambiar. l acaba de hacer cambios en slo cuatro archivos. Cuando ejecuta svn commit imgenes, el proceso seguira liberar todos los bloqueos treinta. Este comportamiento de las cerraduras de liberacin automtica se puede anular con la opcin - nounlock opcin a svn commit. Esta es la mejor opcin para aquellos momentos en que desee confirmar los cambios, pero todava planea hacer ms cambios y por lo tanto es necesario mantener las cerraduras existentes. Este comportamiento tambin es semipermanente tweakable, mediante el establecimiento de no-unlock = yes en su fichero de configuracin en tiempo de ejecucinarchivo (consulte la seccin "Runtime Configuration- Area cin "). Por supuesto, el bloqueo de un archivo no obliga a uno a cometer un cambio en l. El bloqueo puede ser liberado en cualquier momento con un simple comando svn unlock:

144 Temas avanzados $ Svn unlock banana.c 'banana.c' desbloqueado.

Cerraduras Descubriendo
Cuando una confirmacin falla por alguien ms seguros, es bastante fcil de aprender acerca de ellos. La forma ms fcil de ellas es svn status - show-updates: $ Whoami Sally M M O bar.c raisin.jpg * 72 foo.h $ Svn status - show-updates Estado contra la revisin: 105 En este ejemplo, Sally puede ver no slo que su copia de foo.h est fuera de fecha, pero que uno de los dos archivos modificados que planea cometer est bloqueado en el repositorio. El smbolo O representa, 23 32

media-ing "Otros" que existe un bloqueo en el archivo, y fue creado por otra persona. Si se intentara una confirmacin, la cerradura de raisin.jpg sera prevenirla. Sally queda pensando que hizo el bloqueo, cundo y por qu. Una vez ms, svn info tiene las respuestas: $ Svn info http://svn.example.com/repos/project/raisin.jpg Ruta de acceso: raisin.jpg Nombre: raisin.jpg URL: http://svn.example.com/repos/project/raisin.jpg Repositorio UUID: edb2f264-5ef2-0310-a47a87b0ce17a8ec Revision: 105 Nodo Tipo: archivo ltimo cambio Autor: Sally Last Changed Rev: 32 Fecha de ltima modificacin: 2005-01-25 12:43:04 -0600 (Tue, 25 Jan 2005) Lock Token: opaquelocktoken: Lock Owner fc2b4dee-98f9-0310-ABF3653ff3226e6b: harry Bloquee Creado: 2005-02-16 13:29:18 -0500 (mircoles, 16 de febrero de 2005) Bloquee Comentarios (1 lnea): Necesidad de hacer un rpido pellizco a esta imagen. As como svn info se puede utilizar para examinar objetos en la copia de trabajo, sino que tambin puede ser utilizado para examinar obje-tos en el repositorio. Si el argumento principal a svn info es una copia de trabajo, se mostrar toda la informacin almacenada en cach de la copia de trabajo, cualquier mencin de un candado significa que la copia de trabajo est llevando a cabo un token de bloqueo (si un archivo est bloqueado por otro usuario o en otra copia de trabajo, info svn en una copia de trabajo se mostrar ninguna informacin de bloqueo en absoluto). Si el argumento principal a info svn es un URL, entonces la informa-cin refleja la ltima versin de un objeto en el repositorio, cualquier mencin de una cerradura describe el bloqueo actual en el objeto. As que en este ejemplo en particular, Sally puede ver que Harry bloquea el archivo el 16 de febrero para "hacer un pellizco rpida". Siendo junio, ella sospecha que probablemente se olvid de la cerradura. Podra llamar a Harry para quejarse y pedirle que libere el bloqueo. Si est disponible, se podra tratar de romper por la fuerza el bloqueo de ella o pedir a un administrador que lo haga.

Romper y robar bloqueos


145 Temas avanzados Un bloqueo de repositorio no es sagrado, sino que puede ser puesto en libertad, no slo por la persona que lo cre, pero a nadie en absoluto. Cuando alguien que no sea el creador original de bloqueo destruye una cerradura, nos referimos a esto como romper la cerradura. Desde la silla del administrador, es muy sencillo para romper cerraduras. Los programas svnlook svnadmin y tienen la capacidad de mostrar y eliminar los bloqueos directamente desde el repositorio. (Para obtener ms informacin acerca de estos herramientas, consulte la seccin "Herramientas de administrador".) $ Lslocks svnadmin / usr / local / svn / repos Ruta: / project2/images/banana.jpg UUID Token: opaquelocktoken: c32b4d88-e8fb-2310-abb3153ff1236923 Propietario: frank Creado: 2005-06-15 13:29:18 -0500 (Wed, 15 Jun 2005) Expira: Comentarios (1 lnea): Sigue mejorando el color

amarillo. Ruta: / proyecto / raisin.jpg UUID Token: opaquelocktoken: fc2b4dee-98f9-0310-ABF3653ff3226e6b Propietario: harry Creado: 2005-02-16 13:29:18 -0500 (mircoles, 16 de febrero de 2005) Expira: Comentarios (1 lnea): Necesidad de hacer un rpido pellizco a esta imagen. $ Rmlocks svnadmin / usr / local / svn / repos / proyecto / raisin.jpg bloqueo Eliminada el '/ proyecto / raisin.jpg'. La opcin ms interesante es permitir a los usuarios romper las cerraduras de los dems en la red. Para hacer esto, uno simplemente tiene que pasar la opcin - force al comando de desbloqueo: $ Whoami Sally M M O bar.c raisin.jpg * 72 foo.h $ Svn status - show-updates Estado contra la revisin: 105 $ Svn unlock raisin.jpg svn: 'raisin.jpg' no est bloqueado en esta copia de trabajo $ Svn info raisin.jpg | URL grep URL: http://svn.example.com/repos/project/raisin.jpg $ Svn http://svn.example.com/repos/project/raisin.jpg svn: solicitud de desbloqueo fall: (http://svn.example.com) unlock 403 Forbidden 23 32

$ Svn unlock - force http://svn.example.com/repos/project/raisin.jpg 'Raisin.jpg' desbloqueado. Primer intento de Sally para desbloquear fall porque corri svn desbloquear directamente en su copia de trabajo del archivo, y no hay seal de bloqueo estaba presente. Para quitar el bloqueo directamente desde el repositorio, tiene que pasar una URL a svn unlock. Su primer intento de desbloquear la URL no funciona, porque no puede autenticarse como el propietario del bloqueo (ni tiene el smbolo de bloqueo). Pero cuando se pasa - la fuerza, la autenticacin y requisitos de la autoriza-cin son ignorados, y el bloqueo a distancia no funciona. 146 Temas avanzados Por supuesto, slo tiene que romper un bloqueo puede no ser suficiente. En el ejemplo de ejecucin, Sally no slo puede querer romper bloqueo ya olvidado de Harry, pero volver a bloquear el archivo para su propio uso. Se puede lograr esto mediante la ejecucin svn unlock - fuerza y luego svn lock back-toback, pero hay una pequea posibilidad de que alguien ms podra bloquear el archivo entre los dos comandos. Lo ms sencillo es robar el bloqueo, lo que in-involucra romper y volver a bloquear el archivo en un solo paso atmica. Para ello, pase la opcin - force a svn lock:

$ Svn lock raisin.jpg svn: solicitud de (http://svn.example.com)

bloqueo

fall:

423

Locked

$ Svn lock - fuerza raisin.jpg 'raisin.jpg' bloqueado por el usuario 'Sally'. En cualquier caso, si el bloqueo se rompe o es robado, Harry puede ser una sorpresa. Copia de trabajo de Harry todava contiene el token de bloqueo original, pero que el bloqueo ya no existe. El token de bloqueo se dice que es difunto. El bloqueo representado por el bloqueo-token bien se ha roto (ya no est en el repositorio), o robados (sustituido con un cierre diferente). De cualquier manera, Harry puede ver esto pidiendo svn status en contacto con el repos-itory: $ Whoami harry $ Svn status K raisin.jpg $ Svn status - show-updates B 32 raisin.jpg $ Svn update B raisin.jpg $ Svn status $ Si el bloqueo del repositorio se rompe, entonces svn status - show-updates muestra un smbolo B (Broken) junto al archivo. Si existe una nueva cerradura en el lugar de la antigua, a continuacin, se muestra un smbolo T (robado). Por ltimo, SVN actualizar comunicaciones ningn tokens de bloqueos desaparecido y los elimina de la copia de trabajo.

Bloqueo Polticas

de

Diferentes sistemas tienen diferentes nociones de lo estricto que debe ser un bloqueo. Algunas personas sostienen que los bloqueos se deben aplicar estrictamente a toda costa, liberada slo por el creador o administrador originales. Argumentan que si alguien puede romper un bloqueo, y el caos se desata y todo el punto de bloqueo est derrotado. El otro lado argumenta que los bloqueos son, ante todo, una herramienta de comunicacin. Si los usuarios estn constantemente rompiendo las cerraduras de los dems, entonces representa un fracaso cultural dentro del equipo y el problema queda fuera del mbito de aplicacin de software de cum-plimiento. Por defecto de Subversion al enfoque "suave", pero permite a los administradores crear polticas de aplicacin ms estrictas con el uso de scripts gancho. En particular, los ganchos pre-bloqueo y desbloqueo permiten pre-

admi-nistradores para decidir cuando se permite la creacin de bloqueo y bloqueo de emisiones a suceder. Dependiendo de si ya existe un bloqueo, estos dos ganchos pueden decidir si permite o no que un determinado usuario de romper o robar una cerradura. Los ganchos de post-lock y post-desbloqueo tambin estn disponibles, y se pueden utilizar para enviar correo electrnico despus de bloquear las acciones.

147 Temas avanzados

Para obtener ms informacin sobre ganchos de repositorio, consulte la seccin "Scripts de enganche".

Bloqueo de Comunicacin
Hemos visto cmo svn lock y unlock svn se puede utilizar para crear, liberar, romper y robar bloqueos. Este sat-isfies el objetivo de serializar acceso de confirmacin en un archivo. Pero qu pasa con el problema ms amplio de la prevencin de la prdida de tiempo? Por ejemplo, supongamos que Harry bloquea un archivo de imagen y luego comienza a editarlo. Mientras tanto, a kilmetros, Sally quiere hacer lo mismo. Ella no piensa ejecutar svn status - showupdates, por lo que no tiene ni idea de que Harry ya ha bloqueado el archivo. Ella pasa la hora de editar el archivo, y cuando se trata de cometer su cambio, ella descubre que o bien el archivo est bloqueado o que est fuera de fecha. De todos modos, sus cambios no pueden fusionarse con la de Harry. Una de estas dos personas tiene que tirar su trabajo y mucho tiempo se ha desperdiciado. Solucin de Subversion a este problema es proporcionar un mecanismo para recordar a los usuarios que un archivo debe ser bloqueado antes de que comience la edicin. El mecanismo es una propiedad especial, svn: needs-lock. Si la propiedad est conectada a un archivo (el valor es irrelevante), el archivo tendr permisos de slo lectura. Cuando el usuario cierra el archivo y recibe un token de bloqueo, el archivo se convierte en lectura y escritura. Cuando se libera, ya sea de manera explcita el bloqueo desbloqueado, o re-alquilado por compromiso el archivo vuelve a slo lectura de nuevo. La teora, entonces, es que si el archivo de imagen tiene esta bien embargado, entonces Sally cuenta de inmediato que algo es extrao cuando se abre el archivo para editarlo. Su aplicacin sera incapaz de guardar los cambios, o (mejor an) decirle que el archivo es de slo lectura. Esto le recuerda a bloquear el archivo antes de la edicin, en el que descubre el bloqueo preexistente: $ / Usr / local / bin / galn raisin.jpg GIMP: error: el archivo es de slo lectura! $ Ls-l raisin.jpg -R - r - r - 1 a Sally Sally 215589 08 de junio 19:23 raisin.jpg $ Svn lock raisin.jpg svn: solicitud de (http://svn.example.com) bloqueo fall: 423 Locked

$ Svn info http://svn.example.com/repos/project/raisin.jpg | Grep Bloqueo Bloqueo Token: opaquelocktoken: fc2b4dee-98f9-0310-ABF3653ff3226e6b Bloquee Propietario: harry Bloquee Creado: 2005-06-08 07:29:18 -0500 (Jue, 08 de junio de 2005) Bloquee Comentarios (1 lnea): Haciendo algunos ajustes. Bloqueo de las dos horas

siguientes. Como cuestin de "las mejores prcticas", se anima a los usuarios y administradores para fijar la propiedad svn: needs-lock para cualquier archivo que no puede ser fusionado contextual. Es la principal tcnica para fomentar buenos hbitos de bloqueo y evitar esfuerzos intiles. Tenga en cuenta que esta propiedad es una herramienta de comunicacin que funciona independientemente del sistema de bloqueo. En otras palabras, cualquier archivo puede ser bloqueado, si esta propiedad est presente. Y por el contrario, la presencia de esta propiedad no hace el depsito requiere un bloqueo en la comisin. El sistema no es perfecto, tampoco. Es posible que incluso cuando un archivo tiene la propiedad, el acceso de slo lectura re-Minder no siempre funciona. A veces las aplicaciones se comportan mal y "secuestrar" el archivo de slo lectura, en silencio 148 Temas avanzados permitiendo a los usuarios editar y guardar el archivo de todos modos. Por desgracia, no hay mucho Subversion puede hacer al respecto.

PEG y revisiones operativas


Hacemos uso de la posibilidad de copiar, mover, renombrar y sustituir por completo los archivos y directorios en nuestras computadoras todo el tiempo. Y su sistema de control de versiones no debe ponerse en el camino de su hacer estas cosas con los archivos y directorios del control de versiones, tampoco. Apoyo a la gestin de archivos de Subversion es bastante liberador, produciendo casi la mayor flexibilidad para archivos versionados que usted esperara en manipular Lating sus ms versionados. Pero esta flexibilidad significa que todo el tiempo de vida de su repositorio, un recurso versionado GIVen puede tener muchos caminos, y una ruta determinada podra representar varios recursos versionados completamente diferentes. Y esto introduce un cierto nivel de complejidad de sus interacciones con los caminos y los recursos. Subversion es muy inteligente acerca notar cuando el historial de versiones de un objeto incluye esos "cambios de direc-cin". Por ejemplo, si le preguntas a todos los registros de un archivo particular, que pas a llamarse la semana pasada, Subversion felizmente proporciona todos los registros de la revisinen el que el propio cambio de nombre ocurri, adems de los registros de las revisiones pertinentes, tanto antes como despus de ese cambio de nombre . Por lo tanto, la mayora de las veces, ni siquiera tienen que pensar en esas cosas. Pero de vez en cuando, Subversion necesita su ayuda para aclarar ambigedades. El ejemplo ms simple de esto ocurre cuando un directorio o archivo se elimina del control de versiones, y luego un nuevo directorio o archivo se crea con el mismo nombre y ha aadido al control de versiones. Es evidente que lo que borra y lo que ms tarde agreg no son la misma cosa, simplemente pasar de haber tenido el mismo camino, que llamaremos / trunk / object. Entonces, qu significa para pedirle a Subversion sobre la historia de / trunk / object? Ests preguntando sobre lo actualmente en ese lugar, o lo viejo que de-borrar de ese lugar? Est usted preguntando acerca de las operaciones que han sucedido a todos los objetos que han vivido en ese camino? Es evidente que Subversion necesita una pista acerca de lo que est realmente preguntando. Y gracias a movimientos, historia recurso versionado puede obtener mucho ms retorcido que eso, incluso. Por ejemplo, usted podra tener un directorio llamado concepto, que contiene algunos proyectos de software naciente que ha estado jugando con. Eventualmente, sin embargo, ese proyecto madura hasta el punto de que la idea parece que en realidad tienen unas alas, por lo que hacer lo impensable y deciden dar un nombre al proyecto. 9 Digamos que llamaste a tu Frabnaggilywort software. En este punto, tiene sentido cambiar el nombre del directorio para reflejar el nuevo nombre del proyecto, por lo que el concepto se cambia el nombre a frabnaggilywort. La vida sigue, Frabnaggilywort libera una Versin 1.0, y es descargado y utilizado diariamente por hordas de personas con el objetivo de mejorar sus vidas. Es una historia bonita, de verdad, pero no termina ah. Empresario que son, ya tienes otra piensa en el

tanque. Por lo que hace un nuevo directorio, el concepto, y el ciclo comienza de nuevo. De hecho, el ciclo comienza de nuevo muchas veces a lo largo de los aos, cada vez que a partir de ese directorio viejo concepto, entonces a veces ver a ese directorio renombrado como los curas idea, a veces viendo elimina al desechar la idea. O bien, para conseguir realmente enfermo, tal vez cambiar el nombre de concepto a otra cosa durante un rato, pero despus cambia el nombre de la cosa de nuevo a concepto, por alguna razn. Cuando se producen situaciones como estas, tratando de instruir a Subversion para trabajar con estos caminos, usados puede ser un poco como instruir a un automovilista en los suburbios del oeste de Chicago a conducir hacia el este por Roosevelt Road y gire a la izquierda en la calle principal. En apenas veinte minutos, se puede cruzar "Main Street" en Wheaton, Glen Ellyn y Lombard. Y no, no son la misma calle. Nuestro conductor-y nuestra Subversion necesita un poco ms de detalle con el fin de hacer lo correcto. En la versin 1.1, Subversion introdujo una manera para que usted diga lo que es exactamente la calle principal que quera decir. Se llama la revisin clavija, y es una revisin prevista para Subversion con el nico propsito de identificar una lnea nica de la historia. Debido a que a lo sumo un recurso versionado puede ocupar un camino en cualquier momento dado-o, ms precisamente, en cualquier revisin-la combinacin de una ruta de acceso y una revisin PEG es todo lo que se necesita para hacer referencia a una lnea especfica de la historia. Revisiones Peg se especifican para el cliente de lnea de comandos de Subversion utilizando al sintaxis, llamada as porque la sintaxis implica consignar la "arroba" (@) y la clavija de revi-

9 "No se supone que tienes que darle un nombre. Una vez que usted sea, usted comienza a conseguir que se le atribuye "-. Mike Wazowski

149 Temas avanzados sin para el final de la ruta con la que se asocia la revisin. Pero qu pasa con el parmetro - revision (-r), de los cuales hemos hablado mucho en este libro? La revisin (o conjunto de revisiones) es llamada la revisin operativa (o rango de revisiones operativo). Una vez que una lnea particular de la historia ha sido identificado con una ruta y revisin peg, Subversion realiza la operacin solicitada mediante la revisin operativa (s). Para asignar esto a nuestra analoga calles de Chicago, si se nos dice que ir a 606 N. Main Street, en Wheaton, 10 podemos pensar en "Main Street" como nuestro camino y "Wheaton" como nuestra revisin de paridad. Estos dos datos indican una va nica que puede recorrer (norte o sur en la calle principal), y nos impide viajar por todo el mal la calle principal en busca de nuestro destino. Ahora tiramos "N. 606" como nuestra revisin operativa, de todo tipo, y sabemos exactamente a dnde ir.

El algoritmo "peg-revisin" Cuando el cliente de lnea de comandos ve a un comando de esta forma: $ Svn comando-r OPERATIVO-REV item @ PEG-REV ... Que lleva a cabo el siguiente algoritmo: Ir a revisin PEG-REV, y encontrar el artculo. Esto localiza un objeto nico en el repositorio. Traza la historia del objeto hacia atrs (a travs de los posibles cambios de nombre) a su antecesor en la revisin OPERAT-IVE-REV. Lleve a cabo la accin solicitada en ese antepasado, dondequiera que se encuentre, o lo que su nombre podra ser.

Recuerde que an cuando no se proporciona explcitamente un peg-revisin, sigue siendo actual. Por defecto BASE para copiar elementos de trabajo, y para dirigirse a las direcciones URL. Digamos que hace mucho tiempo que hemos creado nuestro repositorio y en la revisin 1 agregamos nuestro primer anuario concepto, adems de un archivo de IDEA en ese directorio hablar sobre el concepto. Despus de varias revisiones en el que se aade cdigo real y ajustado, que, en la revisin 20, cambi el nombre de este directorio para frabnaggilywort. Por la revisin 27, tuvimos un nuevo concepto, un nuevo concepto de directorio para sostenerlo, y un nuevo archivo de IDEA para describirlo. Y despus de cinco aos y veinte mil revisiones pasaron volando, al igual que lo hara en cualquier buena historia de romance. Ahora, aos despus, nos preguntamos cul es el archivo de IDEA pareca volver en la revisin 1. Pero Subversion necesita saber si nos preguntamos por qu el archivo actual mir hacia atrs en la revisin 1, o estamos pidiendo los conteni-dos de cualquier archivo vivido en conceptos / IDEA de revisin 1? Ciertamente, esas preguntas tienen respuestas diferentes, y debido a las revisiones clavija, usted puede pedir cualquiera de ellos. Para averiguar cmo el archivo de IDEA actual mir en esa revisin anterior, se ejecuta: $ Svn cat-r 1 concepto / IDEA subversion / libsvn_client / ra.c: 775: (apr_err = 20014) svn: No se puede encontrar ubicacin del repositorio de 'concepto / IDEA "en revisin 1 Por supuesto, en este ejemplo, el archivo de IDEA actual todava no exista en la revisin 1, por lo que da una subversin ER-ROR. El comando anterior es una abreviacin de una anotacin ya que enumera de forma explcita una revisin peg. La notacin Ampliado es:

10606 N. Main Street, Wheaton, Illinois, es el hogar del Centro de Historia de Wheaton. Conseguir-"Centro Histrico"? Me pareci apropiado ....

150 Temas avanzados $ Svn cat-r 1 concepto / IDEA @ BASE subversion / libsvn_client / ra.c: 775: (apr_err = 20014) svn: No se puede encontrar ubicacin del repositorio de 'concepto / IDEA "en revisin 1 Y cuando se ejecuta, que tiene los resultados esperados. Revisiones Peg general predeterminado a un valor de BASE (la revisin actualmente presente en la copia de trabajo) cuando se aplica a rutas de la copia de trabajo, y de la cabeza cuando se aplica a las direcciones URL. Vamos a pedir a la otra pregunta, entonces en la revisin 1, cules fueron los contenidos de cualquier archivo que ocupa los conceptos de direccin / idea en ese momento? Usaremos una revisin peg explcita a ayudarnos. $ Svn concepto cat / IDEA @ 1 La idea detrs de este proyecto es llegar a una pieza de software que puede FRAB un mosto naggily. Frabbing mostos naggily es negocio difcil, y hacerlo incorrectamente puede tener graves consecuencias, por lo que debemos utilizar over-the-top de validacin de entrada y mecanismos de verificacin de datos. Esta parece ser la salida de la derecha. El texto menciona incluso frabbing mostos naggily, as que esto es casi ciertamente el archivo que describe el software ahora se llama Frabnaggilywort. De hecho, podemos verificar esto mediante la combinacin de una revisin peg explcita y revisin operativa explcito. Sabemos que en el HEAD, el proyecto Frabnaggilywort se encuentra en el directorio frabnaggilywort. As especificamos que queremos ver cmo la lnea de la historia identificados en la cabeza mientras el camino frabnaggilywort / IDEA mir a revi-sin 1. $ Svn cat-r 1 frabnaggilywort / IDEA @ CABEZA La idea detrs de este proyecto es llegar a una pieza de software que puede FRAB un mosto naggily. Frabbing mostos naggily es negocio difcil, y hacerlo incorrectamente puede tener graves consecuencias, por lo que debemos utilizar over-the-top de validacin de entrada y mecanismos de verificacin de datos. Y el PEG y operativo revisiones no necesitan ser tan trivial, ya sea. Por ejemplo, digamos frabnaggilyhierba haba sido borrado de la cabeza, pero sabemos que existi en la revisin 20, y queremos ver los diferenciales de su archivo de IDEA entre revisiones 4 y 10. Podemos utilizar la revisin peg 20 junto con el URL que habra celebrado archivo IDEA Frabnaggilywort en la revisin 20, y luego utilizar 4 y 10 ya que nuestro rango de revisiones op-rativa. $ Svn diff-r 04:10 http://svn.red-bean.com/projects/frabnaggilywort/IDEA @ 20 ndice: frabnaggilywort / IDEA ================================================== ================= --- Frabnaggilywort / IDEA (versin 4) + + + Frabnaggilywort / IDEA (revisin 10) @ @ -1,5 +1,5 @ @ -La idea de este proyecto es llegar a una pieza de software -Que puede FRAB un mosto naggily. Frabbing mostos naggily es complicado -Business, y hacerlo incorrectamente puede tener graves consecuencias, por lo que -Tenemos que emplear la validacin de entrada over-the-top y verificacin de datos -Mecanismos. + La idea de este proyecto es llegar a un trozo de

+ Software cliente-servidor que puede FRAB remotamente un mosto naggily. + Frabbing naggily mostos es negocio difcil, y hacerlo de forma incorrecta + Puede tener graves consecuencias, por lo que debemos utilizar over-the-top + Validacin de entrada y mecanismos de verificacin de datos.

151 Temas avanzados Afortunadamente, la mayora de la gente no se enfrentan a este tipo de situaciones complejas. Pero cuando se encuentra, recuerde que las revisiones clavija es que Subversion indicio adicional necesario para aclarar la ambigedad.

Repositorios externos
A veces es til construir una copia de trabajo que se hace fuera de un nmero de diferentes obtenciones. Por ejemplo, puede querer que diferentes carpetas vengan de orgenes distintos de un repositorio, o quizs de repositorios diferentes. Decididamente puede configurar tal escenario a mano-usando svn checkout para crear el tipo de estructura anidada copia de trabajo que usted est tratando de lograr. Pero si esta disposicin es importante para todos los que usan su repositorio, necesitar un usuario a otro para realizar las mismas operaciones de pago y envo que usted hizo. Afortunadamente, Subversion proporciona soporte de definiciones externas. Una definicin externa es la relacin de un directorio local con la URL-y posiblemente la revisin de un recurso versionado particular. En Subversion, declara definiciones externas en grupos usando la propiedad svn: externals. Usted puede crear o modificar el inmueble con svn propset o svn propedit (verla seccin titulada "Por qu Properties?"). Se puede establecer en un directorio versionado, y su valor es una tabla multi-lnea de subdirectorios (en relacin con el directorio versionado en el que se establece la propiedad) y, URLs de repositorios Subversion absolutas, completamente cualificadas. $ Svn propget svn: externals calc third-party/sounds http://sounds.red-bean.com/repos third-party/skins http://skins.red-bean.com/repositories/skinproj thirdparty/skins/toolkit-r21 http://svn.red-bean.com/repos/skin-maker La conveniencia de la propiedad svn: externals es que una vez que se encuentra en un directorio versionado, cada uno que obtiene una copia de trabajo de ese directorio tambin tiene la ventaja de la definicin externa. En otras palabras, una vez que una persona ha hecho el esfuerzo de definir esa estructura anidada de direcciones de repositorios, nadie ms tiene que volver-Subversion, a la salida de la copia de trabajo, tambin obtendr las copias de trabajo externas. Tenga en cuenta la definicin externa del ejemplo anterior. Cuando alguien obtiene una copia de trabajo de la calc directorio, Subversion tambin sigue a la comprobacin de los elementos encontrados en su definicin externa. $ Svn checkout http://svn.example.com/repos/calc A calc A calc / Makefile A calc / integer.c A calc / button.c Dejamos la revisin 148. Obtencin elemento externo en / de terceros calc / suena A calc / tercero / sonidos / ding.ogg A calc / tercero / sonidos / dong.ogg A calc / tercero / sonidos

/ clang.ogg . . . A calc / tercero / sonidos / bang.ogg A calc / tercero / sonidos / twang.ogg Prestado revisin 14. Obtencin elemento externo en calc / tercero / skins . . . Si necesita cambiar la definicin externa, puede hacerlo utilizando los subcomandos modificacin propiedad regulares. Cuando confirma un cambio en la propiedad svn: externals, Subversion sincronizar las copias locales obtenidas contra las definiciones externas la siguiente vez que ejecute svn update.

152 Temas avanzados Lo mismo ocurrir cuando otras personas actualicen sus copias locales y obtengan sus cambios a la definicin externa. El comando svn status tambin reconoce definiciones externas, mostrando el cdigo de estado X para los subdirectorios dis-empalme en el que se almacenarn las copias, y luego recursiva en estos directorios para mostrar el estado de los propios elementos externos.

Pu nta
Debera considerar seriamente utilizar nmeros de revisin explcitos en todas sus externos defi-itions. Si lo hace, significa que tiene que decidir cundo utilizar una instantnea diferente de informacin ex-terna, y que precisamente instantnea para tirar. Adems del aspecto de sentido comn de no ser sorprendido por cambios en repositorios de terceros que puede que no tenga control, utilizar nmeros de revisin explcitos tambin significa que cuando retroceda su copia de tra-bajo a una revisin anterior, sus definiciones externas tambin volver a la forma que tenan en esa revisin anterior, que a su vez significa que las copias de trabajo externas se actualizarn para concordar en la forma que ellas tenan cuando su repositorio estaba en esa revisin anterior. Para los proyectos de software, esto puede ser la diferencia entre un xito y un fracaso con acumulacin de una instantnea antigua de su base de cdigo complejo. El apoyo que existe para la definicin externa de Subversion hoy puede ser un poco engaoso, sin embargo. En primer lugar, una definicin externa slo puede apuntar a directorios, no archivos. En segundo lugar, la definicin externa puede-no apunta a las rutas relativas (caminos como .. /.. / Skins / mySkin). En tercer lugar, las copias de trabajo creadas va definicin externa todava estn desconectadas de la copia de trabajo principal (en cuyo directorios ver-sioned la propiedad svn: externals se cre en realidad). Y Subversion todava nico verdaderamente op-erates sobre copias locales no disjuntas. As, por ejemplo, si desea confirmar los cambios que usted ha hecho en una o ms de esas copias de trabajo externas, debe ejecutar svn commit explcitamente en los que trabajan las copias-comprometerse en la copia de trabajo principal no se recurse en cualquier los externos . Adems, dado que las propias definiciones utilizan URLs absolutas, mover o copiar un directorio al que estn unidos, no afectar a aquello que se obtiene como externa (aunque el destino local relativa subdirectory, por supuesto, mover con el directorio renombrado). Esto puede ser confuso, incluso ciertas situaciones frustrantes-en. Por ejemplo, si se usa la definicin externa sobre un directorio en su / trunk

line desarrollo que apuntan a otras reas de la misma lnea y, a continuacin, utiliza svn copy de una rama de esa lnea a una nueva ubicacin / branches / my-rama, la definicin externa sobre los elementos en su nueva rama todava se referirn a los recursos versionados en / trunk. Tenga en cuenta, tambin, que si tiene que volver a su copia local de tra-bajo (usando svn switch - relocate), las definiciones externas tampoco se re-emparentado. Por ltimo, puede haber momentos en los que prefiere que subcomandos svn no reconocer o de otro modo operar en las copias de trabajo externas creadas como resultado de factores externos manejo definicin. En esos casos, se puede pasar la opcin - ignore-externals del subcomando.

Ramas de proveedores
Como es el caso especialmente en el desarrollo de software, los datos que mantenemos bajo control de versiones a menudo estrechamente relacionados con, o quizs depende, alguien ms datos. En general, las necesidades de su proyecto dictarn que debe permanecer lo ms al da posible con los datos facilitados por la entidad externa sin sacrificar la estabilidad de su propio proyecto. Este escenario se juega todo el tiempo, en cualquier lugar que la informacin generada por un grupo de personas que tiene un efecto directo en la que se genera por otro grupo. Por ejemplo, los desarrolladores de software pueden estar trabajando en una aplicacin que hace uso de una biblioteca de terceros. Subversion tiene tal relacin con la biblioteca Apache Portable Runtime (ver elsec- cin llamada "El Apache Portable Runtime Library"). El cdigo fuente de Subversion depende de la librera APR para todas sus necesidades de portabilidad. En las etapas iniciales del desarrollo de Subversion, el proyecto sigui de cerca API cambiante de abril, siempre fiel a la "punta de lanza" del cdigo de la biblioteca de rotacin. Ahora que ambos abril y Subversion han madurado, Subversion intenta sincronizar con la biblioteca de abril

153 Temas avanzados API slo al bien verificados, versiones estables. Ahora, si el proyecto depende de la informacin de otra persona, hay varias maneras que usted puede en-tentar para sincronizar esa informacin con el suyo propio. La ms dolorosa, se puede emitir oral o escrita-ciones a todos los colaboradores de su proyecto, dicindoles que para asegurarse de que tienen las versiones especficas de esa informacin de terceros que necesita su proyecto. Si la informacin de terceros se mantiene en un repositorio Subversion, tambin se puede utilizar la definicin externa de Subversion de manera efectiva "precisar" las versiones especficas de esa informacin en alguno de los directorios de su copia de trabajo (Consulte la seccin "Repositorios externos"). Pero a veces uno quiere mantener modificaciones a los datos de terceros en su propio sistema de control de versiones. Volviendo al ejemplo de desarrollo de software, los programadores podran necesitar para hacer modific-ciones a la biblioteca de terceros para sus propios fines. Estas modificaciones podran incluir nueva funcionalidad o correcciones de errores, mantenida internamente slo hasta que se conviertan en parte de una publicacin oficial de la biblioteca de terceros. O los cambios quizs nunca sean enviados a los mantenedores de la biblioteca, que existe nicamente como ajustes personalizados para que la biblioteca de adaptarse ms a las necesidades de los desarrolladores de software. Ahora se enfrenta a una situacin interesante. Su proyecto podra albergar sus modificaciones personalizadas a los datos de terceros en alguna manera desarticulada, como el uso de archivos de parches o versiones alternas de pleno derecho de los archivos y directorios. Pero stas se convierten rpidamente en problemas de mantenimiento, lo que requiere algn mecanismo por el cual se aplicarn los cambios a medida para los datos de terceros, y que requiere la regeneracin de esos cambios con cada versin sucesiva de los datos de terceros que le interesan. La solucin a este problema es utilizar ramas de vendedor. Una rama de proveedor es un rbol de directorios en su propio sistema de control de versiones que contiene informacin proporcionada por una entidad de otro fabricante o proveedor. Cada versin de los datos del proveedor que decide absorber en su proyecto se llama un hito de proveedor.

Ramas de proveedor proporcionan dos beneficios clave. En primer lugar, almacenando el hito de proveedor actualmente soportado en su propio sistema de control de versiones, los miembros de su proyecto nunca tienen que preguntarse si tienen la versin correcta de los datos del vendedor. Simplemente obtienen la versin correcta como parte de sus actualizaciones peridicas copia de tra-bajo. En segundo lugar, porque los datos viva en su propio repositorio Subversion, puede almacenar sus cambios a medida para que en el lugar-que no tiene ms necesidad de un mtodo automtico (o peor an, manual) para proporcionar sus modificaciones.

Procedimiento de Gestin de Sucursales Distribuidor General


Gestin de ramas de vendedor generalmente funciona as. Se crea un directorio de nivel superior (por ejemplo / vendor) para almacenar las ramas de vendedor. Despus de importar el cdigo de terceros en un subdirectorio de ese directorio de nivel superior. Luego copia ese subdirectorio en su rama principal de desarrollo (por ejemplo, / trunk) en el lugar apropiado. Siempre realiza cambios locales en la rama principal de desarrollo. Con cada nueva versin del cdigo que est siguiendo, lo incluye en la rama de proveedor y combinar los cambios en / trunk, resolviendo cualquier conflicto entre los cambios locales y los cambios ascendentes. Quizs un ejemplo ayude a aclarar este algoritmo. Usaremos un escenario donde el equipo de desarrollo est creando un programa calculador que enlaza contra una librera aritmtica nmero de terceros, libcomplex. Vamos a empezar con la creacin inicial de la rama de proveedor, y la importacin del primer hito de proveedor. Vamos a llamar a nuestro proveedor rama de directorios libcomplex, y nuestros hitos de cdigo irn en un subdirectos-ria de nuestra rama de proveedor llamado actual. Y como svn import crea todos los padres intermedia dir-ectories que necesita, en realidad podemos lograr ambos pasos con un solo comando. $ Svn import / path/to/libcomplex-1.0 \ http://svn.example.com/repos/vendor/libcomplex/current \ -M "importar 1,0 de proveedor inicial ' ... Ahora disponemos de la versin actual del cdigo fuente libcomplex in /

154 Temas avanzados vendedor / libcomplex / corriente. Ahora, etiquetamos esa versin (verla seccin "Etiquetas") Y luego copiarlo en la rama principal de desarrollo. Nuestra copia crear un nuevo directorio llamado libcomplex en nuestro directorio existente de proyecto calc. Es en esta versin copiada de los datos del proveedor que realizaremos nuestras personalizaciones. $ Svn copy http://svn.example.com/repos/vendor/libcomplex/current http://svn.example.com/repos/vendor/libcomplex/1.0 -M "etiquetar libcomplex-1.0 ' ... $ Svn copy http://svn.example.com/repos/vendor/libcomplex/1.0 \ http://svn.example.com/repos/calc/libcomplex \ -M 'traer libcomplex-1.0 en la rama principal " . . . \ \

Nos echa un vistazo de nuestro proyecto principal rama-que ahora incluye una copia del primer hito de proveedor-y comenzamos a personalizar el cdigo libcomplex. Antes de darnos cuenta, nuestra versin modificada de libcomplex est completamente integrada en nuestro programa calculador. 11 Unas semanas ms tarde, los desarrolladores de libcomplex liberar una nueva versin de su biblioteca-la versin 1.1, que contiene algunas de las caractersticas y la funcionalidad que realmente queremos. Nos

gustara actualizar a esta nueva versin, pero sin perder las personalizaciones que realizamos a la versin existente. Lo que esencialmente nos gustara hacer es reemplazar nuestra versin de lnea base de libcomplex 1.0 con una copia de libcomplex 1.1, y luego volver a aplicar las modificaciones propias que anteriormente hicimos sobre la librera de la nueva versin. Pero en realidad nos acercamos al problema desde la otra direccin, aplicando los cambios realizados en Libcom compleja entre las versiones 1.0 y 1.1 para nuestra copia modificada del mismo. Para realizar esta actualizacin, obtenemos una copia de nuestra rama de proveedor, y reemplace el cdigo en el directorio corriente con el nuevo libcomplex 1.1 cdigo fuente. Estamos literalmente copiar nuevos archivos en la parte superior de los archivos exis-tentes, tal vez la explosin de la libcomplex 1.1 tarball comunicado sobre nuestros ficheros y directorios existentes. El objetivo aqu es que el directorio actual contiene slo el cdigo libcomplex 1.1, y para asegurar que todo el cdigo est bajo control de versiones. Oh, y queremos hacerlo con tan poco control de versiones perturbacin his-toria de lo posible. Despus de reemplazar el cdigo 1.0 con 1.1, svn status mostrar archivos con modificaciones locales, as como, tal vez, algunos archivos no versionados o ausentes. Si hicimos lo que tenamos que hacer, los archivos no versionados son aquellos ficheros nuevos introducidos en la versin 1.1 de libcomplexcorremos svn add sobre ellos para ponerlos bajo control de versiones. Los archivos que faltan son archivos que estaban en 1.0 pero no en 1.1, y en los caminos que se ejecutan svn delete. Por ltimo, una vez que nuestra copia de trabajo actual contiene slo el cdigo libcomplex 1.1, cometemos los cambios que hemos hecho para conseguir que se vea de esa manera. Nuestra rama actual contiene ahora el hito de proveedor. Nosotros marcamos la nueva versin (de la misma manera que anteriormente marcamos la versin 1.0 de proveedor), y luego fusionar las diferencias entre la etiqueta de la versin anterior y la nueva versin actual en nuestra rama principal de desarrollo. $ Cd working-copies/calc $ Svn merge http://svn.example.com/repos/vendor/libcomplex/1.0 \ http://svn.example.com/repos/vendor/libcomplex/current \ Libcomplex # ... Resolver todos los conflictos entre sus cambios y los cambios $ Svn commit-m 'fusin libcomplex-1.1 en la rama principal " . . . En el caso de uso trivial, la nueva versin de nuestra herramienta de terceros sera, desde el punto de vista de ficheros y directorios, al igual que la versin anterior. Ninguno de los archivos de origen libcomplex habra sido de-borrar, renombrado o movido a diferentes lugares-la nueva versin contendra solamente texto modifica-

11Y totalmente libre de errores, por supuesto!

155 Temas avanzados ciones contra la anterior. En un mundo perfecto, nuestras modificaciones seran aplicadas limpiamente sobre la nueva versin de la biblioteca, sin ningn tipo de complicaciones o conflictos. Pero las cosas no siempre son tan simples, y de hecho es muy comn que los archivos de origen para ser desplazados entre versiones de software. Esto complica el proceso de asegurar que nuestras modificaciones son todava vlidas para la nueva versin del cdigo, y puede degenerar rpidamente en la situacin en la que tenemos que recrear manualmente nuestras personalizaciones en la nueva versin. Una vez Subversion conoce la historia de una determinada fuente de archivos incluyendo todas sus ubicaciones-el anterior proceso de fusin en la nueva versin de la libe-ral es bastante simple. Pero somos responsables de indicar a Subversion cmo el diseo de archivo de origen cambiado de cada de proveedor a otro.

svn_load_dirs.pl
Gotas de proveedores que contienen ms de un par de eliminaciones, adiciones y movimientos complican el proceso de arriba-gradacin de cada versin sucesiva de los datos de terceros. As que Subversion proporciona el script svn_load_dirs.pl para ayudar en este proceso. Este script automatiza los pasos importado anteriormente mencionados en el procedimiento de gestin rama de proveedor en general para asegurarse de que los errores se reducen al mnimo. Usted seguir siendo res-ponsable de uso de los comandos de combinacin para combinar las nuevas versiones de los datos de terceros en su rama principal de desarrollo, pero svn_load_dirs.pl puede ayudar ms rpido y fcil llegar a esa etapa. En resumen, svn_load_dirs.pl es una mejora a svn import que tiene varias caracter sticas importantes: Se puede ejecutar en cualquier punto en el tiempo para transformar un directorio existente en el repositorio para que coincida exactamente un directorio externo, realizando toda la suma necesaria y elimina, y realizar opcionalmente mueve, tambin. Se ocupa de la complicada serie de operaciones entre las cuales Subversion requiere un intermedio repositorio-como antes de cambiar el nombre de un archivo o directorio dos veces. Ser opcional etiquetar el nuevo directorio importado. Se opcionalmente agregar propiedades arbitrarias a los archivos y directorios que coincidan con una expresin regular.

svn_load_dirs.pltoma tres argumentos obligatorios. El primer argumento es la URL para el directorio Subversion de base para trabajar, este argumento es seguido por la URL-en relacin con el primer argumento en el que se importar el hito de proveedor actual. Por ltimo, el tercer argumento es el directorio local para im-puerto. Utilizando el ejemplo anterior, una carrera tpica de svn_load_dirs.pl podra ser: $ Svn_load_dirs.pl http://svn.example.com/repos/vendor/libcomplex \ Current \ / Path/to/libcomplex-1.1 . . . Puede indicar que desea svn_load_dirs.pl para marcar el hito de proveedor pasando la opcin-t de comando de lnea y especificar un nombre de etiqueta. Esta etiqueta es otra URL relativa al primer programa de argumento. $ Svn_load_dirs.pl-t libcomplex-1.1 \ http://svn.example.com/repos/vendor/libcomplex \ Current \ / Path/to/libcomplex-1.1

...

156 Temas avanzados Al ejecutar svn_load_dirs.pl, examina el contenido de su "actual" de proveedor existente, y los compara con el hito de proveedor propuesto. En el caso trivial, no habr archivos que estn en una versin y no la otra, y la secuencia de comandos se puede realizar la nueva importacin sin incidentes. Si, sin embargo, hay discrepancias en la estructura de archivos entre versiones, svn_load_dirs.pl le indicar por cunto desea resolver esas diferencias. Por ejemplo, usted tendr la oportunidad de decirle al script que se sabe que el archivo math.c en la versin 1.0 de libcomplex ha sido renombrado como arithmetic.c en libcomplex 1.1. Cualquier discrepancia que no se explican por los movimientos son tratados como adicin o borrado. El script tambin acepta un archivo de configuracin independiente para establecer las propiedades de

los archivos y directorios partido-Ing una expresin regular que se aaden al repositorio. Se especifica este archivo de configuracin para svn_load_dirs.pl utilizando la opcin-p de lnea de comandos. Cada lnea del archivo de configuracin es un espacio en blanco delimitado por un conjunto de dos o cuatro valores: una expresin regular estilo Perl para que coincida con la ruta aadida, una palabra de control (ya sea ruptura o cont), y, opcionalmente, un nombre de propiedad y valor. \. \. \. \. *. Png $ Jpe? G $ M3u $ M3u $ romper romper cont romper romper svn: svn: svn: svn: svn: mime-type mime-type mime-type eol-style eol-style image / png image / jpeg de audio / xmpegurl LF nativo

Para cada ruta aadida, los cambios de propiedades configurados expresin regular coincide con la ruta de acceso son aplicada en orden, a menos que la especificacin de control es la rotura (lo que significa que no hay ms cambios de propiedades se deben aplicar a la ruta). Si la especificacin de control es cont-una abreviacin de continuar, entonces juego continuar con la siguiente lnea del archivo de configuracin. Cualquier espacio en blanco en la expresin regular, nombre de la propiedad, o valor de la propiedad debe estar rodeado de tanto caracteres de comillas simples o dobles. Usted puede escapar comillas que no se utilizan para envolver caracteres de espaciado anterior con una barra invertida (\) carcter. La barra invertida se escapa slo cita al analizar el archivo de configuracin, por lo que no protegen los otros personajes ms all de lo necesario para la expresin regular.

Localizacin
Localizacines el acto de hacer que los programas se comportan de una manera especfica de la regin. Cuando un programa de formatos nmeros o fechas de una manera especfica a su parte del mundo, o grabados mensajes (o acepta la entrada) en su lengua materna, se dice que el programa que se localiza. En esta seccin se describen los pasos Subversion ha hecho a la localizacin.

Entender locales
Sistemas operativos ms modernos tienen una nocin de la "localizacin actual", es decir, la regin o el pas en el que las convenciones de localizacin son honrados. Estas convenciones-tpicamente elegidos por algn mecanismo de configuracin de tiempo de ejecucin en el ordenador-afectar la forma en que los programas se presentan los datos para el usuario, as como la forma en que aceptan la entrada del usuario. En los sistemas Unix, puede comprobar los valores de las opciones de configuracin de tiempo de ejecucin de la configuracin regional relacionados con el comando locale: $ Locale LANG = LC_COLLATE = "C" LC_CTYPE = "C" LC_MESSAGES = "C" LC_MONETARY = "C" LC_NUMERIC = "C"

157 Temas avanzados LC_TIME = "C" LC_ALL = "C" El resultado es una lista de variables de entorno relacionadas con el entorno local y sus valores actuales. En este ejemplo, las variables se ajustan a la configuracin regional predeterminada C, pero los usuarios pueden configurar estas variables para combinaciones especficas de cdigo de pas / idioma. Por ejemplo, si uno tuviera que definir la variable LC_TIME a fr_CA, a continuacin, los programas se conocen hasta la actualidad y la informacin de la fecha con formato de acuerdo a francfonos expecta-

tivas de Canad. Y si hubiera que establecer la variable para zh_TW LC_MESSAGES, entonces los programas sabran presentar mensajes legibles en chino tradicional. Establecimiento de la variable LC_ALL tiene el efecto de cambiar todos los sitios variables en el mismo valor. El valor de LANG se utiliza como valor predeterminado de cualquier variable local que no est definido. Para ver la lista de lugares disponibles en un sistema Unix, ejecute el comando loc-ale-a. En Windows, la configuracin local se realiza mediante el elemento del panel de control "Configuracin regional y de idioma". All se puede ver y seleccionar los valores de configuracin individual de los locales disponibles, e incluso cus-tomize (a un nivel enfermizo de detalle) varias de las convenciones de formato de pantalla.

Uso de Subversion de locales


El cliente de Subversion svn, rinde homenaje a la configuracin regional actual de dos maneras. En primer lugar, se da cuenta del valor de la variable LC_MESSAGES e intenta imprimir todos los mensajes en el idioma especificado. Por ejemplo: $ Export LC_MESSAGES = de_DE $ Svn cat ayuda cat: Gibt den Inhalt der angegebenen Dateien oder URLs aus. Aufruf: Gato ZIEL [@ REV] ... . . . Este comportamiento funciona de forma idntica tanto en los sistemas Windows y Unix. Tenga en cuenta, sin embargo, que mientras el sistema op-erating podra tener soporte para un lugar determinado, el cliente de Subversion todava puede no ser capaz de hablar el idioma. Con el fin de producir mensajes localizados, los voluntarios humanos deben proporcionar traducciones para cada idioma. Las traducciones se escriben utilizando el paquete GNU gettext, que res-ULTS en mdulos de traduccin que terminan con la extensin de nombre de archivo. Mo. Por ejemplo, el archivo de traduc-cin alemana se llama de.mo. Estos archivos de traduccin se instala en algn lugar en el sistema. En Unix, por lo general viven en / usr / share / locale /, mientras que en Windows que estn a menudo en el \ Share \ locale \carpeta en la zona de instalacin de Subversion. Una vez instalado, el mdulo es el nombre del programa que proporciona traducciones para. Por ejemplo, el archivo de.mo ltima instancia, puede acabar instalado en / usr / share / locale / de / LC_MESSAGES / subversion.mo. Navegando por los archivos instalados. Mo, se puede ver que los idiomas del cliente de Subversion es capaz de hablar. La segunda forma en la que se honra la configuracin regional implica cmo svn interpreta su entrada. El repositorio almacena todas las rutas, nombres de archivos y mensajes de registro en Unicode, codificado como UTF-8. En ese sentido, el repositorio se encuentra internacionalizado-que el repositorio est dispuesta a aceptar la entrada de cualquier lenguaje humano. Esto significa, sin embargo, que el cliente Subversion es responsable de enviar slo UTF-8 nombres de archivos y mensajes de registro en el repositorio. Con el fin de hacer esto, se ha de transformar los datos de la configuracin local nativa en UTF-8. Por ejemplo, suponga que crea un namedcaff.txt archivo, y luego, cuando la comisin del archivo, escriba el mensaje de registro como "Adesso il caff pi forte". Tanto el nombre del archivo y el mensaje de registro contienen caracteres no ASCII, pero debido a la configuracin regional se establece en it_IT, el cliente Subversion sabe interpretarlos como italiano. Se utiliza un carcter italiano creado para convertir los datos a UTF-8 antes de enviarlos al repositorio. Tenga en cuenta que si bien el repositorio exige UTF-8 nombres de archivos y mensajes de registro, no se presta atencin a los contenidos del archivo. Subversion trata el contenido de los archivos como si fueran incomprensibles de bytes, y ni cliente ni servidor

158 Temas avanzados

hace un intento de entender el conjunto de caracteres o la codificacin de los contenidos.

Errores de conversin conjunto de caracteres

del

Durante el uso de Subversion, puedes ser golpeado con un error relacionado con conversiones de juegos de caracteres: svn: No se puede convertir la serie de codificacin nativa a "UTF-8": . . . svn: No se puede convertir la serie de 'UTF-8' a la codificacin nativa: . . . Errores como este suelen producirse cuando el cliente Subversion ha recibido una cadena UTF-8 desde el repositorio, pero no todos los personajes de esa cadena se pueden representar mediante la codificacin de la localizacin actual. Por ejemplo, si el entorno local es en_US sino un colaborador ha cometido un nombre japons, es muy probable que vea este error cuando reciba el archivo durante una actualizacin svn. La solucin es o bien para establecer su localidad a algo que puede representar los datos UTF-8 entrantes, o para cambiar el nombre del archivo o mensaje de registro en el repositorio. (Y no se olvide de dar una palmada a mano los proyectos de su colaborador deben decidir sobre las lenguas comunes de antemano, de modo que todos los participantes estn usando la misma zona.)

Uso de las herramientas de diferenciacin externos


La presencia de - con nombres similares parmetros de tiempo de ejecucin con-figuracin (ver opciones diff3-cmd, y - diff-cmd yla seccin "Config"), Puede conducir a una falsa nocin de lo fcil que es utilizar diferenciacin ex-terna (o "diff") y combinar las herramientas de Subversion. Aunque Subversion puede utilizar la mayora de po-lar las herramientas disponibles, el esfuerzo invertido en instalar esto a menudo resulta ser no trivial. La interfaz entre Subversion y externo de diferencias y herramienta de combinacin se remonta a una poca en que slo las capacidades de diferenciacin del contexto del Sub-versin se construyeron alrededor de las invocaciones de los diffutils GNU, especficamente las utilidades diff y diff3 cadena de herramientas. Para obtener el tipo de comportamiento de Subversion necesita, que llam a estos

servicios pblicos con ms de un puado de opciones y parmetros, la mayora de los cuales eran bastante especfico para los servicios pblicos. Algn tiempo despus, Subversion creci su propia biblioteca de diferenciacin interna, y como prueba de sobre mecanismo, el 12 - diff-cmd y - Opciones diff3-cmd se aadieron a la Subversion comcliente de lnea de comando para que los usuarios podran indicar ms fcilmente que preferan usar la GNU diff y diff3 servicios pblicos en lugar de la ltima moda biblioteca interna diff. Si se utilizan estas opciones, Subversion simplemente ignorar la biblioteca interna diff, y recurrir a la ejecucin de los programas externos, largas listas de argumento y todo. Y ah es donde las cosas se mantienen en la actualidad. No pas mucho tiempo para que la gente a darse cuenta de que con este tipo de mecanismos sencillos de configuracin para especificar que Subversion debera utilizar la externa GNU diff y diff3 servicios pblicos ubicados en un lugar determinado en el sistema se podra aplicar a la utilizacin de otros diff y merge herramientas, tambin. Despus de todo, Subversion no real-mente verifique que las cosas que se le deca a correr eran miembros de las diffutils herramientas GNU. Sin embargo, el nico aspecto configurable de la utilizacin de esas herramientas externas es su ubicacin en el sistema, no el conjunto de opciones, orden de los parmetros, etc Subversion contina lanzando todas esas opciones de utilidad GNU en su herramienta externa de diferenciar sin importar si ese programa puede comprender los opciones. Y ah es donde las cosas se ponen poco intuitivo para la mayora de usuarios. La clave para el uso externo de diferencias y herramienta de combinacin (que no sea GNU diff y diff3, por supuesto) con Subversion es el uso de scripts de envoltura que convierte la entrada de Subversion en algo que su herramienta de di-ferencias puede entender, y luego convertir la salida de la herramienta de nuevo en un formato que Subversion espera que el formato que se han utilizado las herramientas GNU. Las siguientes secciones cubren la especfi-cos de esas expectativas.

Desarrolladores 12Subversion son buenos, pero incluso los mejores cometen errores.

159 Temas avanzados

Not a
La decisin sobre el momento de disparar un diff contextual o fusin como parte de una operacin de Subversion ms grande est hecho totalmente a Subversion, y est afectada, entre otras cosas, si los archivos que se estn operados son legibles segn lo determinado por su svn: mime-type propiedad. Esto significa, por ejemplo, que incluso si usted tuvo la niftiest diferenciacin Word-aware Mi-crosoft o herramienta de fusin en el Universo, que nunca habra in-invocado por Subversion, siempre y cuando los documentos de Word versionados tenan un tipo MIME configurado que denota que no eran legibles (como application / msword). Para ms informacin sobre la configuracin MIME tipos, vea la seccin llamada "svn: mime-type"

Externo diff
Subversion requiere programas externos de diferencias con los parmetros adecuados para la utilidad GNU diff, y slo espera que el retorno programa externo con un cdigo de error con xito. Para la mayora de programa diff alternativa, slo los sexto y sptimo argumentos, los caminos de los archivos que representan los lados izquierdo y derecho de la dif, respectivamente, son de inters. Tenga en cuenta que Subversion ejecuta el programa diff vez al archivo modificado cubierto por la operacin de Subversion, as que si su programa se ejecuta de forma asncrona (o "backgrounded"), es posible que varios de ellos que todo se ejecute simultneamente. Por ltimo, Subversion espera que el programa devuelve un cdigoerror de 0 si el programa detecta las diferencias, o 1 si no, cualquier otro cdigoerror se considera un error fatal. 13

Ejemplo 7.2, "diffwrap.sh" yEjemplo 7.3, "diffwrap.bat" son plantillas para la diferenciacin externo herramienta de envoltorios en el shell Bourne y lenguajes de secuencias de comandos de Windows por lotes, respectivamente.

Ejemplo 7.2. diffwrap.sh


! # / Bin / sh # Configure su programa favorito diff aqu. DIF = "/ usr / local / bin / my-diff-herramienta" # Subversion proporciona las rutas que necesitamos como el sexto y sptimo Parmetros #. IZQUIERDA = $ {6} RIGHT = $ {7} # Llame el comando diff (cambiar la siguiente lnea a tener sentido para # El programa de fusin). $ Diff - izquierda LEFT $ - $ DERECHO derecho # Devolver un cdigoerror de 0 si no se detectaron diferencias, 1 si algunos eran. # Cualquier otra cdigoerror ser tratado como fatal.

Ejemplo 7.3. diffwrap.bat


@ ECHO OFF REM Configure su programa favorito diff aqu.

13El

Pgina de manual de GNU diff lo pone de esta manera: "Un estado de salida de 0 significa que no se encontraron diferencias, 1 significa que se encontraron algunas diferencias, y 2 significa problemas."

160 Temas avanzados SET DIF = "C: \ Archivos de programa \ Funky Stuff \ My Dif. Tool.exe" REM Subversion proporciona las rutas que necesitamos como el sexto y el sptimo parmetros REM. SET hacia la izquierda =% 6 SET RIGHT = 7% REM Llame el comando diff (cambiar la siguiente lnea a tener sentido para el programa de fusin REM). % DIF% - izquierda LEFT%% - a la derecha RIGHT%% REM Devuelve un Cdigo de error 0 si no se detectaron diferencias, 1 si algunos eran. REM Cualquier otro cdigoerror ser tratado como fatal.

External diff3
Subversion llamadas externas combinar los programas con los parmetros adecuados para la utilidad GNU diff3, espera que el regreso del programa externo con un cdigo de error con xito y que el contenido completo del archivo que resultan de la operacin de fusin completa se imprime en la secuencia de salida estndar (para que Subversion puede reorientarlos en el archivo controlado versin apropiada). Para la mayora de los programas alternativos de combinacin, slo los argumentos noveno, dcimo y undcimo, las rutas de los archivos que representan el "mo", "viejo", y las entradas de "tuyo", respectivamente, son de inters. Tenga en cuenta que debido a Subversion depende de la salida de su

programa de mezcla, guin envoltorio no debe salir antes de que el producto ha sido entregado a Subversion. Cuando finalmente lo hace la salida, debe devolver un Cdigo de error 0 si la fusin se ha realizado correctamente, o 1 si no resueltos conflictos permanecen en la salida-cualquier otra cdigoerror se considera un error fatal. Ejemplo 7.4, "diff3wrap.sh" yEjemplo 7.5, "diff3wrap.bat" son plantillas para la fusin envoltorios de herramientas externas en el shell Bourne y lenguajes de secuencias de comandos de Windows por lotes, respectivamente.

Ejemplo 7.4. diff3wrap.sh


! # / Bin / sh # Configure su programa diff3/merge favorito aqu. Diff3 = "/ usr / local / bin / my-merge-herramienta" # Subversion proporciona las rutas que necesitamos como el noveno, dcimo y undcimo Parmetros #. MINA = $ {9} MAYORES = $ {10} SUYO = $ {11} # Llame el comando merge (cambiar la siguiente lnea a tener sentido para # El programa de fusin). Diff3 $ - mayor $ MAYORES - mine $ MINE - tuya $ SUYO # Despus de la realizacin de la fusin, este script necesita para imprimir el contenido # Del archivo combinado a la salida estndar. Hazlo de la manera que mejor le parezca. # Devolver un cdigoerror de 0 en combinacin con xito, 1 si los conflictos no resueltos # Permanecer en el resultado. Cualquier otro cdigoerror ser tratado como fatal.

Ejemplo 7.5. diff3wrap.bat


161 Temas avanzados @ OFF ECHO

REM Configure su programa diff3/merge favorito aqu. SET diff3 = "C: \ Archivos de programa \ Funky Stuff \ My Merge Tool.exe" REM Subversion proporciona las rutas que necesitamos que los parmetros REM noveno, dcimo y undcimo. Pero slo tenemos acceso a los nueve parmetros a la vez, por lo que REM cambiar nuestra ventana de nueve parmetros dos veces para hacernos llegar a lo que necesitamos. SHIFT SHIFT SET MINA =% 7 SET MAYORES = 8% SUYO SET = 9% REM Llame el comando merge (cambiar la siguiente lnea a tener sentido para el programa de fusin REM). % Diff3% - mayor% MAYORES% -% mine MINE% - la suya% SUYO% REM Despus de realizar la fusin, este script necesita para imprimir el

contenido de REM del archivo combinado a la salida estndar. Hazlo de la manera que mejor le parezca. REM Devolver un cdigoerror de 0 en combinacin con xito, 1 si los conflictos sin resolver REM permanecer en el resultado. Cualquier otro cdigoerror ser tratado como fatal.

URLs del repositorio Subversion


Como se ilustra en este libro, Subversion usa URLs para identificar recursos versionados en los repositorios de Subversion. En su mayor parte, estas URLs utilizan la sintaxis estndar, permitiendo a los nombres de servidor y nmeros de puerto que se especifica como parte de la URL: $ Svn checkout http://svn.example.com:9834/repos . . . Pero hay algunos matices en el manejo de Subversion de URLs que son notables. Por ejemplo, las URL que contiene el archivo: mtodo de acceso (usado para repositorios locales) debe, de acuerdo con la convencin, tiene un nombre de servidor de localhost o ningn nombre de servidor en absoluto: $ Svn checkout file :/ / / ruta / al / repositorio . . . $ Svn checkout file :/ / localhost / ruta / al / repositorio . . . Adems, los usuarios del esquema file: en plataformas Windows necesitarn utilizar una sintaxis no oficial "estndar" para acceder a repositorios que estn en la misma mquina, pero en una unidad diferente de la unidad actual del cliente. Cualquiera de las siguientes sintaxis de URL funcionarn, donde X es la unidad en la que reside el repositorio: C: al . . . C: al . . . \> svn checkout file :/ / / X :/ ruta / / repositorio

\> svn checkout "file :/ / / X | / ruta / / repositorio"

En la segunda sintaxis, es necesario citar el URL para que el carcter de barra vertical no se interpreta como un 162 Temas avanzados pipa. Adems, tenga en cuenta que las URLs utilizan las barras normales a pesar de la (no-URL) originario de una ruta en Windows utiliza las barras invertidas. Por ltimo, cabe sealar que el cliente de Subversion codificar automticamente las direcciones URL segn sea necesario, al igual que un navegador web hace. Por ejemplo, si un URL contiene un espacio o superior de caracteres ASCII: $ Svn checkout "http://host/path con el espacio / proyecto / espaa "

... Entonces Subversion escapar a los personajes inseguros y se comportan como si hubiera escrito: $ Svn checkout http://host/path% 20con% 20space/project/espa% C3% B1a Si la URL contiene espacios, asegrese de colocarlo entre comillas, para que el shell trata todo como un solo argumento al programa svn.

163

Captulo 8. Informacin del desarrollador


Subversion es un proyecto de software de cdigo abierto desarrollado bajo una licencia de software al estilo de Apache. El proyecto est respaldado econmicamente por CollabNet, Inc., una compaa de desarrollo de software con sede en California. La comunidad que se ha formado en torno al desarrollo de Subversion siempre da la bienvenida a los nuevos miembros que pueden donar su tiempo y su atencin al proyecto. Se alienta a los voluntarios para ayudar en todo lo que puedan, ya sea encontrando y diagnosticando errores, refinando el cdigo fuente existente o descarnado por nuevas caractersticas. Este captulo es para aquellos que deseen ayudar en la evolucin continua de Subversion en realidad ensuciarse las manos con el cdigo fuente. Vamos a cubrir algunos de los detalles ms ntimos del software, el tipo de tcnica esencial y bsico que los que crecen en s-o Subversion herramientas completamente nuevas basadas en la Subversion bibliotecas deben tener en cuenta. Si no tiene previsto participar con el software a un nivel tal, no dude en saltarse este captulo con la certeza de que su experiencia como usuario de Subversion no se ver afectada.

Biblioteca de diseo de capas


Subversion tiene un diseo modular, implementado como una coleccin de libreras C. Cada biblioteca tiene un propsito bien definido y la interfaz, y la mayora de los mdulos se dice que existir en una de las tres capas principales, la Capa de repositorio, el acceso al repositorio (AR) de capa, o la capa de cliente. Examinaremos estas capas en breve, pero primero, vea nuestro breve inventario de las libreras de SubversionTabla 8.1, "Un corto inventario de las Libreras de Subversion ". En aras de la coherencia, se har referencia a las bibliotecas por sus nombres de biblioteca Unix sin extensin (por ejemplo: libsvn_fs, libsvn_wc, mod_dav_svn).

Tabla 8.1. Un corto inventario de las libreras de Subversion


Biblioteca libsvn_client libsvn_delta libsvn_diff libsvn_fs libsvn_fs_base libsvn_fs_fs libsvn_ra libsvn_ra_dav libsvn_ra_local libsvn_ra_svn libsvn_repos libsvn_subr Descripcin Interfaz principal para los programas cliente rbol y rutinas de diferenciacin byte-stream Diferenciacin contextual y las rutinas de la fusin Sistema de archivos comunes y cargador de mdulos El Berkeley DB sistema de archivos de servidor El sistema de ficheros nativo (FSFS) back-end Repositorio de acceso comunes y cargador de mdulos El mdulo de acceso al repositorio WebDAV El mdulo de acceso al repositorio local, El mdulo de acceso al repositorio protocolo personalizado Interfaz de repositorio Varios tiles subrutinas

libsvn_wc mod_authz_svn mod_dav_svn

La biblioteca de administracin de copias de trabajo Mdulo de autorizacin de Apache Subversion repositorios de acceso a travs de WebDAV Mdulo de Apache para el mapeo de operaciones WebDAV para los Subversion

El hecho de que la palabra "varios" slo aparece una vez en la Tabla 8.1, "Un corto inventario de la Sub164 Informacin del desarrollador versin Bibliotecas " es una buena seal. El equipo de desarrollo de Subversion es serio acerca de hacer que esa funcionalidad reside en la capa y las bibliotecas de la derecha. Tal vez la mayor ventaja del diseo modular es su falta de complejidad desde el punto de vista de un desarrollador. Como desarrollador, puede formular rpidamente ese tipo de "visin" que le permite localizar la ubicacin de ciertas piezas de funcionalidad con relativa facilidad. Otra ventaja de la modularidad es la capacidad de reemplazar un mdulo dado con una nueva librera que im-mentos la misma API sin afectar al resto de la base de cdigo. En cierto sentido, esto ocurre dentro de Subversion. El libsvn_ra_dav, libsvn_ra_local y libsvn_ra_svn aplicar la misma de interface. Y los tres se comunican con la capa de repositorio-libsvn_ra_dav y libsvn_ra_svn hacerlo a travs de una red y libsvn_ra_local conecta directamente a ella. El libsvn_fs_base y libsvn_fs_fs librar-s son otro ejemplo de esto. El cliente se muestra de la modularidad en el diseo de Subversion. Aunque Subversion por s mismo viene con slo un programa cliente de lnea de comandos, hay varios programas de terceros que ofrecen diversas formas de GUI del cliente. Estas GUIs usan las mismas APIs que el cliente de lnea de comandos de stock hace. Biblioteca libsvn_client de Subversion es la ventanilla nica para la mayora de la funcionalidad necesaria para el diseo de un grupo de trabajoCliente de Subversion (ver la seccin llamada "Capa Cliente").

Capa de repositorio
Al referirse a capa de repositorio de Subversion, en general estamos hablando de dos bibliotecas-la biblioteca repositorio, y el sistema de archivos de la biblioteca. Estas bibliotecas proporcionan el almacenamiento y la presentacin de informes mecanismos para las diversas revisiones de los datos de control de versiones. Esta capa est conectada a la capa cliente a travs de la capa de acceso al repositorio, y es, desde el punto de vista del usuario de Subversion, las cosas en el "otro lado de la lnea." El sistema de ficheros de Subversion se accede a travs de la API libsvn_fs, y no es un sistema de archivos a nivel de kernel que se podra instalar en un sistema operativo (como el Linux ext2 o NTFS), pero un sistema de archivos virtual. En lugar de almacenar "archivos" y "directorios", como los archivos y directorios reales (como en la clase que usted puede navegar a travs de el uso de su programa favorito de shell), que utiliza uno de los dos backends de almacenamiento ya sea a un entorno de base de datos resumen disponible Berkeley DB, o una representacin de archivo plano. (Para obtener ms informacin acerca de los dos repositorio back-ends, consulte laseccin llamada "Los almacenes de datos del repositorio".) Sin embargo, ha habido un considerable inters por parte de la comunidad de desarrollo para que futuras versiones de Subversion la posibilidad de utilizar otros sistemas de bases de datos backend, quizs a travs de un mecanismo como el Open Database Connectivity (ODBC). La API del sistema de archivos exportado por libsvn_fs contiene el tipo de funcionalidad que esperara de cualquier otro API del sistema de archivos: puede crear y eliminar archivos y directorios, copiar y mover los widgets, modificar el contenido del archivo, y as sucesivamente. Tambin tiene caractersticas que no son tan comunes, tales como la capacidad de agregar, modificar y eliminar los metadatos ("Propiedades") en cada archivo o directorio. Adems, el sistema de ficheros de Subversion es un sistema de archivos de versiones, lo que significa que a medida que se realizan cambios en el rbol de directorios, Subversion recuerda lo que el rbol pareca antes de los cambios. Y antes de que los cambios anteriores. Y los anteriores. Y as sucesivamente, todo el camino a travs del tiempo de

versiones para (y slo bey-do) el momento en que empez a aadir cosas al sistema de archivos. Todas las modificaciones que haga a su rbol se realizan en el contexto de una transaccin de Subversion. La siguiente es una rutina general simplificada para modificar su sistema de ficheros: 1. 2. 3. Inicia una Subversion. transaccin de

Haga sus cambios (adiciones, eliminaciones, modificaciones de propiedad, etc.) Confe su transaccin.

Una vez que usted ha cometido su transaccin, las modificaciones del sistema de archivos se almacenan permanentemente como artefactos his-trico. Cada uno de estos ciclos genera una nueva revisin de su rbol, y cada revisin es

165 Informacin del desarrollador siempre accesible como una instantnea inmutable de "las cosas como estaban".

La distraccin transacciones

de

La nocin de una transaccin de Subversion, especialmente teniendo en cuenta su proximidad con el cdigo de base de datos en libsvn_fs, puede llegar a ser fcilmente confundido con el soporte de transaccin proporcionado por la propia base de datos subyacente. Ambos tipos de transacciones para proporcionar atomicidad y aislamiento. En otras palabras, las transacciones le dan la capacidad para llevar a cabo un conjunto de acciones en un "todo o nada" de la moda, ya sea todas las acciones de la serie completa con xito, o todas son tratadas como si ninguno de ellos ha pasado- y de una manera que no interfiere con otros procesos que actan sobre los datos. Transacciones de bases de datos generalmente engloban pequeas operaciones relacionadas especficamente con la modificacin de los datos en la base de datos en s (por ejemplo, cambiar el contenido de una fila de la tabla). Transacciones Subversion son mayores en su alcance, que abarca operaciones de alto nivel como realizar modificaciones en un conjunto de archivos y directorios que se encuentran en-tendido a ser almacenados como la prxima revisin del rbol de archivos. Si eso no es lo suficientemente confuso,

considere esto: Subversion usa una transaccin de base de datos durante la creacin de una transaccin de Subversion (de modo que si la creacin de transacciones Subversion falla, la base de datos se ver como si nunca hubisemos intentado crear en primer lugar )! Afortunadamente para los usuarios de la API del sistema de archivos, el soporte de transaccin proporcionado por el sistema de base de datos en s se oculta casi por completo de la vista (como debera esperarse de un sistema de biblioteca modular adecuadamente). Es slo cuando se inicia la excavacin en la implementacin del sistema de archivos propio que tales cosas se vuelven visibles (o interesantes). La mayor parte de la funcionalidad proporcionada por la interfaz del sistema de archivos se muestra como acciones que se produce en una trayectoria del sistema de archivos. Es decir, desde fuera del sistema de archivos, el principal mecanismo para la descripcin y ac-samiento de las revisiones individuales de ficheros y directorios son el uso de cadenas de ruta como / foo / bar, como si estuviera tratando con ficheros y directorios a travs de su favorito programa de shell. Para agregar nuevos archivos y directorios pasando sus caminos-a-ser para las funciones de la API derecha. Su bsqueda de infor-macin sobre ellos por el mismo mecanismo. A diferencia de la mayora de los sistemas de archivos, sin embargo, un camino por s sola no es suficiente informacin para identificar un archivo o directorio en Subversion. Piense en un rbol de directorios como un sistema de dos dimensiones, donde los nodos hermanos representan una especie de movimiento izquierda y derecha, y descender en subdirectorios un movimiento hacia abajo.Figura 8.1, "Archivos y directorios en dos dimensiones " muestra una representacin tpica de un rbol como exactamente eso.

Figura 8.1. Ficheros y directorios en dos dimensiones

166 Informacin del desarrollador Por supuesto, el sistema de ficheros de Subversion tiene una genial tercera dimensin que la mayora de los sistemas de archivos no tienen-Time! 1 En la interfaz del sistema de archivos, casi todas las funciones que tiene un argumento de ruta tambin se espera un argumento de raz. Este argumento svn_fs_root_t describe una revisin o una transaccin de Subversion (que suele ser slo una revisin-aser), y proporciona ese contexto tridimensional necesario para bajoentender la diferencia entre / foo / bar de la revisin 32, y el mismo camino, ya que existe en la revisin 98. Figura 8.2, "Control de versiones de tiempo de la tercera dimensin!" muestra el historial de revisiones como una dimensin aadida al universo del sistema de ficheros de Subversion.

Figura 8.2. dimensin!

Versiones

tiempo

la

tercera

Como mencionamos anteriormente, la API libsvn_fs ve y se siente igual que cualquier otro sistema de archivos, excepto que tiene esta maravillosa capacidad de versionado. Fue diseado para ser utilizados por cualquier programa interesado en un sistema de archivos ver en servi-cio. No es casualidad que el propio Subversion est interesado en esa funcionalidad. Pero mientras que la API del sistema de archivos debe ser suficiente para el archivo de base y el directorio de versiones de apoyo, Subversion quiere ms-y ah es donde entra en juego libsvn_repos La librera de repositorio Subversion (libsvn_repos) es bsicamente una librera envoltorio sobre la funcionalidad del sistema de archivos. Esta biblioteca se encarga de crear el diseo del repositorio, asegurndose de que subya-cente el sistema de archivos se inicia, y as sucesivamente. Libsvn_repos tambin implementa un conjunto de ganchos-scripts que son ex-ecuted por el cdigo de repositorio cuando ciertas acciones tienen lugar. Estos scripts son tiles para la notificacin, autorizacin o deseada por el administrador del repositorio sea. Este tipo de funcionalidad, y otros servicios prestados por la librera de repositorio, no estn estrictamente relacionadas con la implementacin de un sistema de archivos de versiones, por lo que se coloca en su propia biblioteca. Los desarrolladores que deseen utilizar la API libsvn_repos se encuentran con que no es un envoltorio completo sobre la interfaz del sistema de archivos. Es decir, slo ciertos eventos importantes en el ciclo general de la actividad del sistema de archivos estn envueltos por la interfaz de repositorio. Algunos de estos incluyen la creacin y comprometerse de Subversion trans-acciones, y la modificacin de propiedades de revisin. Estos eventos particulares estn envueltos por la capa de reposit-ORY porque tienen ganchos asociados con ellos. En el futuro, otros eventos pueden ser envueltos por la API de repositorio. Toda la interaccin sistema de ficheros continuar a ocurrir directamente a travs de la API libsvn_fs. Por ejemplo, aqu hay un segmento de cdigo que ilustra el uso tanto del repositorio y sistema de ficheros inter1We

Entiendo que esto puede venir como una sorpresa para los fans de la ciencia ficci n que han sido durante mucho tiempo bajo la impresin de que el tiempo era en realidad la cuarta dimen-sin, y nos disculpamos por cualquier trauma emocional inducido por nuestra afirmacin de una teora diferente.

167 Informacin del desarrollador caras para crear una nueva revisin del sistema de archivos en el que se aade un directorio. Tenga en cuenta que en este ejemplo (y todos los dems en este libro), el SVN_ERR () macro simplemente comprueba el retorno de error no exitosa de la funcin que envuelve, y retorna este error si existe.

Ejemplo 8.1. Usando la capa de repositorio


/ * Crea un nuevo directorio en el NEW_DIRECTORY ruta en el repositorio Subversion ubicado en REPOS_PATH. Realizar todos los asignacin de memoria en la piscina. Esta funcin crear una nueva revisin de la adicin de NEW_DIRECTORY. * / esttica svn_error_t * make_new_directory (const char * REPOS_PATH, const char * nuevo_directorio, apr_pool_t * piscina) { svn_error_t * errar; svn_repos_t * repos; svn_fs_t * fs; svn_revnum_t youngest_rev; svn_fs_txn_t * txn; svn_fs_root_t * txn_root, const char * conflict_str; / * Abrir el repositorio ubicado en REPOS_PATH. * / SVN_ERR (svn_repos_open (y repos, REPOS_PATH, piscina)); / * Obtener un puntero al objeto de sistema de archivos que se almacenan en REPOS. * / fs = svn_repos_fs (repos); / * Hacer el sistema de archivos que nos diga la revisin ms joven de lo que existe actualmente. * / SVN_ERR (svn_fs_youngest_rev (& youngest_rev, fs, piscina)); / * Comienza una nueva transaccin que se basa en YOUNGEST_REV. Estamos a menos propensas a tener nuestra tarde commit rechaz como conflictiva si Siempre tratar de hacer nuestros cambios con una copia de la ltima instantnea del rbol de archivos. * / SVN_ERR (svn_fs_begin_txn (& txn, fs, youngest_rev, piscina)); / * Ahora que hemos puesto en marcha una nueva transaccin de Subversion, obtener un objeto raz que representa la transaccin. * / SVN_ERR (svn_fs_txn_root (& txn_root, txn, piscina)); / * Crear el nuevo directorio bajo la raz de la transaccin, en la NEW_DIRECTORY camino. * / SVN_ERR (svn_fs_make_dir (txn_root, nuevo_directorio, piscina)); / * Confirme la transaccin, creando una nueva revisin del sistema de ficheros que incluye nuestra ruta de directorio adicional. * / err = svn_repos_fs_commit_txn (& conflict_str, repos, Y youngest_rev, txn, piscina); if (! err) { / * No error? Excelente! Imprimir un breve informe de nuestro xito. * / Printf ("Directory '% s' fue agregado con xito como nueva revisin" "'% Ld' \ n"., Nuevo_directorio, youngest_rev); } else if (err-> apr_err == SVN_ERR_FS_CONFLICT) { 168 Informacin del desarrollador / * Uh-oh. Nuestro compromiso no como el resultado de un conflicto (alguien parece haber hecho cambios en la misma

zona del sistema de archivos que intentamos modificar). Imprimir un mensaje de error. * / printf ("El conflicto se produjo en la ruta '% s' al intentar" "el aadido del directorio '% s' en el repositorio en '% s' \ n", conflict_str, nuevo_directorio, REPOS_PATH.); } m s { / * Se ha producido algn otro error. Imprimir un mensaje de error. * / Printf ("Error al intentar agregar el directorio '% s'" ". El repositorio en '% s' \ n", nuevo_directorio, REPOS_PATH); } / * Devolver el resultado del intento de confirmacin a nuestro interlocutor. Err * / return; } En el segmento de cdigo anterior, se hicieron llamamientos tanto al repositorio y las interfaces del sistema de archivos. Podramos fcilmente haber cometido la transaccin utilizando svn_fs_commit_txn (). Sin embargo, la API de sistema de ficheros no sabe nada de mecanismo de enganche de la librera repositorio. Si desea que su repositorio Subversion realice automticamente un conjunto de tareas no relacionadas con Subversion cada vez que cometes una transaccin (como, por ejemplo, el envo de un correo electrnico que describe todos los cambios realizados en esa transaccin a su lista de correo derevelador) , es necesario utilizar la versin libsvn_repos envuelto de esa funcin apropiadasvn_repos_fs_commit_txn (). Esta funcin en realidad ejecutar primero el script gancho pre-commit si es que existe, a continuacin, confirmar la transaccin, y, finalmente, se ejecutar un script gancho postcommit. Los ganchos proporcionan un mecanismo especial de informes que en realidad no pertenecen a la biblioteca de sistema de ficheros del ncleo en s. (Para ms informacin sobre los ganchos de repositorio de Subversion, consulte laseccin llamada "Scripts de enganche".) El requisito de mecanismo de gancho pero es una de las razones para la abstraccin de una biblioteca repositorio separado del resto del cdigo de sistema de archivos. El API libsvn_repos proporciona varias otras herramientas que se importantes para Subversion. Estos incluyen la capacidad para: 1. 2. 3. 4. 5. crear, abrir, destruir, y llevar a cabo tareas de recuperacin en un repositorio Subversion, y el sistema de ficheros comprendidos en ese repositorio. describir las diferencias entre dos rboles de sistema de archivos. obtener el informe de cambios asociado con todas (o algunas) de las revisiones en las que se modific un conjunto de archivos en el sistema de archivos. generar un "volcado" legible por humanos del sistema de ficheros, una representacin completa de las revisiones en el sistema de archivos. procesar el formato de volcado, cargando revisiones volcadas en un repositorio Subversion diferente.

Como Subversion contina evolucionando, la librera de repositorio crecer con la biblioteca del sistema de archivos para ofrecer mayor funcionalidad y soporte opcin configurable.

Repositorio de capa de acceso


Si la capa de repositorio de Subversion se encuentra en "el otro lado de la lnea", la capa de acceso al repositorio es la lnea en s. Acusado de datos de clasificacin entre las bibliotecas de cliente y el repositorio, esta capa in-

169 Informacin del

desarrollador cluye el mdulo del cargador de la biblioteca libsvn_ra, los propios mdulos RA (que actualmente incluye libs-vn_ra_dav, libsvn_ra_local y libsvn_ra_svn), y cualquier librera adicional necesaria por uno o ms de esos mdulos RA, tales como el mdulo mod_dav_svn de Apache con el que se comunica o libsvn_ra_dav servidor de libsvn_ra_svn, svnserve. Dado que Subversion usa URLs para identificar los recursos del repositorio, la parte de protocolo del esquema URL (usualmente file:, http:, https:, o svn :) se utiliza para determinar qu mdulo RA se encargar de las comunicaciones. Cada mdulo registra una lista de los protocolos que sabe cmo "hablar" para que el cargador de RA puede, en tiempo de ejecucin, determinar qu modulo usar para la tarea en cuestin. Puede determinar qu mdulos RA estn disponibles para el cliente de lnea de comando de Subversion, y qu protocolos dice apoyo, ejecutando svn - version: $ Svn - version svn, versin 1.2.3 (r15833) compilado 13 de septiembre 2005, 22:45:22 Copyright (C) 2000-2005 CollabNet. Subversion es un software de http://subversion.tigris.org/ Este producto incluye software (http://www.Collab.Net/). cdigo abierto, por ver CollabNet

desarrollado

Los siguientes mdulos de acceso a repositorios (RA) estn disponibles: * ra_dav: Mdulo para acceder al repositorio va el protocolo WebDAV (DeltaV). - esquema de mangos 'http' - esquema de mangos 'https' * ra_svn: Mdulo para acceder al repositorio va el protocolo de red svn. - esquema de mangos 'svn' * ra_local: Mdulo para acceder al repositorio en el disco local. - esquema de 'archivo' tiradores

RA-DAV (Repositorio Access mediante HTTP / DAV)


La biblioteca libsvn_ra_dav est diseado para su uso por los clientes que estn en ejecucin en diferentes mquinas que los servidores con los que se comunican, especficamente servidores alcanzados usando direcciones URL que contienen el HT-tp: o porciones https. Para entender cmo funciona este mdulo, primero debemos mencionar un par de otros componentes clave en esta configuracin particular del acceso al repositorio Layer-los poderosos Apache HTTP Server, y la librera cliente Neon HTTP / WebDAV. Servidor de la red principal de Subversion es el servidor HTTP Apache. Apache es un proceso de la prueba del tiempo, extensible de cdigo abierto del servidor que est listo para un uso serio. Puede soportar una carga y carreras de alta red en muchas plataformas. El servidor Apache soporta un nmero de diferentes protocolos de autenticacin estndar, y se puede ampliar a travs del uso de mdulos para soportar muchos ms. Tambin soporta optimizaciones de red como pipelining y caching. Mediante el uso de Apache como servidor, Subversion tiene todas estas caractersticas de forma gratuita. Y puesto que la mayora de los cortafuegos ya permiten el trfico HTTP pase a travs de los administradores de sistemas normalmente no tienen ni siquiera para cambiar sus configuraciones de firewall para permitir que Subversion funcione. Subversion usa HTTP y WebDAV (con DeltaV) para comunicarse con un servidor Apache. Puedes leer ms sobre esto en la seccin WebDAV de este captulo, pero en fin, WebDAV y DeltaV son extensiones de la norma 1.1 del protocolo HTTP que permiten compartir y versiones de archivos a travs de la web. Apache 2.0 y versiones posteriores vienen con mod_dav, un mdulo de Apache que entiende las extensiones DAV de HTTP. Subversion proporciona mod_dav_svn, sin embargo, que es otro mdulo de Apache que funciona junto con (en realidad, como back-end a) mod_dav proporcionar especficos imple-maquinaciones mentales de WebDAV y DeltaV de Subversion.

Cuando se comunica con un repositorio por HTTP, la librera cargadora RA selecciona libsvn_ra_dav como el mdulo de acceso adecuado. El cliente de Subversion realiza llamadas a la interfaz genrica RA, y los mapas libs-vn_ra_dav esas llamadas (que encarnan ms acciones Subversion a gran escala) a un conjunto de HTTP /

170 Informacin del desarrollador Solicitudes WebDAV. Uso de la biblioteca de nen, libsvn_ra_dav transmite esas peticiones al servidor Apache. Apache recibe estas peticiones (exactamente igual que las peticiones genricas HTTP que su navegador pudiera hacer), da cuenta de que las peticiones se dirigen a un URL que se configura como una ubicacin DAV (usando la <Location>directiva en httpd.conf), y las manos de la solicitud fuera de su propio mdulo mod_dav. Cuando se configura correctamente, mod_dav sabe usar mod_dav_svn de Subversion para cualquier necesidad del sistema de ficheros relaciona-dos, a diferencia de los mod_dav_fs genricos que viene con Apache. As que, finalmente, el cliente se comunica con mod_dav_svn, que se une directamente a la capa de repositorio de Subversion. Esa fue una descripcin simplificada de los intercambios reales que tienen lugar, sin embargo. Por ejemplo, el repositorio Subversion podra estar protegido por las directivas de autorizacin de Apache. Esto podra resultar en inicial en-tienta para comunicarse con el repositorio de ser rechazado por Apache por motivos de autorizacin. En este punto, libsvn_ra_dav vuelve la notificacin por parte de Apache que no se proporcionaron suficientes identificacin, y llama de nuevo en la capa cliente para obtener algunos datos actualizados de autenticacin. Si los datos se proporcionan correctamente, y el usuario tiene los permisos que Apache necesita, siguiente intento automtico de libsvn_ra_dav a realizar-cin se conceder la operacin original, y todo estar bien. Si la informacin de autenticacin suficiente no puede ser suministrada, la peticin fallar, y el cliente ser informar del error al usuario. Mediante el uso de Neon y Apache, Subversion obtiene funcionalidad gratuita en varias otras reas complejas, tambin. Por ejemplo, si Neon encuentra las libreras OpenSSL, permite que el cliente de Subversion intentar usar comunicaciones cifradas con SSL con el servidor Apache (cuyo mdulo mod_ssl puede "hablar el idioma"). Asimismo, tanto Neon como mod_deflate de Apache pueden entender el algoritmo de "desinflar" (el mismo utilizado por los programas PKZIP y gzip), por lo que las solicitudes se pueden enviar en trozos comprimidos ms pequeos a travs del cable. Otras caractersticas complejas que Subversion espera soportar en el futuro incluyen la capacidad de manejar de forma automtica las redirecciones del servidor especificados (por ejemplo, cuando un repositorio se ha mudado a una nueva direccin URL ca-cannica) y que se aprovechan de la canalizacin HTTP.

RA-SVN (Repositorio Protocolo de acceso a personalizacin)


Adems del protocolo HTTP / WebDAV estndar, Subversion tambin proporciona una implementacin RA que utiliza un protocolo personalizado. El mdulo libsvn_ra_svn implementa su propia conectividad por red y se comunica con un servidor independiente-el programa svnserve-en la mquina que aloja el repositorio. Los clientes acceden al repositorio usando el esquema svn :/ /. Esta implementacin RA carece de la mayora de las ventajas de Apache mencionados en la seccin anterior, sin embargo, puede ser atractivo para algunos administradores de sistemas, no obstante. Es dramticamente ms fcil de configurar y ejecutar, la creacin de un proceso svnserve es casi instantnea. Tambin es mucho ms pequea (en trminos de lneas de cdigo) que Apache, por lo que es mucho ms fcil de auditora, por razones de seguridad o de otro modo. Por otra parte, algunos administradores de sistemas pueden tener ya una infraestructura de seguridad SSH, que quieren que Subversion usarlo. Los clientes que utilizan ra_svn pueden fcilmente tnel El protocolo a travs de SSH.

RA-Local (Acceso directo al repositorio)


No todas las comunicaciones con un repositorio Subversion requieren un proceso de servidor potente y una capa de red. Para los usuarios que simplemente desean acceder a los repositorios en su disco local, pueden hacerlo nosotros-ing archivo: Direcciones y la funcionalidad proporcionada por libsvn_ra_local. Este mdulo RA enlaza directamente con el repositorio y las bibliotecas del sistema de archivos, por lo

que no se requiere la comunicacin de red en absoluto. Subversion requiere que el nombre del servidor incluido como parte de la URL file: ser localhost o vaca, y que no haya especificacin de puerto. En otras palabras, las URLs deberan ser como file :/ / localhost / ruta / al / repositorio o file :/ / / ruta / al / repositorio. Adems, tenga en cuenta que el archivo de Subversion: URL no se puede utilizar en un navegador web normal la forma normal de archivo: Direcciones de lata. Cuando intenta ver un archivo: URL en un navegador web normal, lee y dis-juega el contenido del archivo en ese lugar examinando el sistema de archivos directamente. Sin embargo, existen recursos de Subversion en un sistema de archivos virtual (ver elseccin llamada "capa de repositorio"), y su navegador no va a entender cmo leer este sistema de archivos. 171 Informacin del desarrollador

Su Biblioteca RA Aqu
Para aquellos que deseen acceder a un repositorio de Subversion usando todava otro protocolo, que es precisamente la razn por la capa de acceso al repositorio es modular! Los desarrolladores pueden simplemente escribir una nueva biblioteca que implementa la interfaz RA en un lado y comunica con el repositorio en el otro. Su nueva librera puede usar protocolos de red existentes, o puede inventar su propio. Usted podra utilizar la comunicacin llamadas entre procesos (IPC), o vamos a obtener una locura, no?-Incluso se podra poner en prctica un protocolo de correo electrnico basado en. Subversion proporciona las APIs, que proporcione a la creatividad.

Capa Cliente
En el lado del cliente, la copia de trabajo de Subversion es donde toda la accin se lleva a cabo. El grueso de la funcionalidad implementada por las bibliotecas del lado del cliente existe con el nico propsito de la gestin de las copias de trabajo-directorios llenos de ficheros y otros subdirectorios que sirven como una especie de locales, "reflejo" editable de una o ms ubicaciones de repositorio y propagar cambios hacia y desde la capa de acceso al repositorio. Biblioteca de copia de trabajo de Subversion, libsvn_wc, es directamente responsable de la gestin de los datos de las copias de tra-bajo. Para lograr esto, la biblioteca almacena informacin administrativa sobre cada directorio dentro de un subdirectorio especial. Este subdirectorio, nombrado. SVN, est presente en cada directorio de la copia de trabajo y contiene varios otros archivos y directorios que registran el estado y proporcionan un espacio de trabajo privado para la accin administrativa. Para aquellos familiarizados con CVS, esto. Subdirectorio svn es similar en propsito a los directorios administrativos CVS encontrados en CVS copias de trabajo. Para obtener ms informacin acerca de. rea administrativa svn, veala seccin llamada "Inside the Copia rea de Administracin de Trabajo"en este captulo. La biblioteca de cliente de Subversion, libsvn_client, tiene la responsabilidad ms amplia, y su trabajo es reunir la funcionalidad de la biblioteca de copia de trabajo con el de la capa de acceso al repositorio, y luego proporcionar la API de alto nivel para cualquier aplicacin que desee realizar acciones de control de revisiones generales. Por ejemplo, el svn_client_checkout function () toma una URL como argumento. Pasa esta URL a la capa RA y abre una sesin autenticada con un repositorio particular. A continuacin, se le pide al repositorio por un rbol, y enva este rbol en la biblioteca de copia de trabajo, que a continuacin, escribe una copia de trabajo completa en el disco (. Svn y todo). La biblioteca de cliente est diseado para ser utilizado por cualquier aplicacin. Mientras que el cdigo fuente de Subversion incluye un cliente de lnea de comandos estndar, debe ser muy fcil escribir cualquier nmero de clientes grficos en la parte superior de la biblioteca de cliente. Nueva GUI (o cualquier cliente nuevo, en realidad) para Subversion no tiene que ser envoltorios precarios sobre la lnea de comandos incluida en el cliente que tienen acceso total a travs de la API de libsvn_client misma funcionalidad, los datos y los mecanismos de devolucin de llamada que utiliza el cliente de lnea de comandos.

Directamente vinculante-Unas palabras sobre la correccin Por qu el programa de interfaz grfica de usuario se unen directamente con un libsvn_client en lugar de actuar como una envoltura alrededor de un programa de lnea de comandos? Adems de simplemente ser ms eficiente, esto puede abordar posibles problemas correccin tambin. Un programa de lnea de comandos (como el que viene con Subversion) que se une a la biblioteca cliente necesita traducir eficazmente la retroalimentacin y solicitados bits de datos de tipos de C a alguna forma de salida legible. Este tipo de traduccin puede ser prdida. Es decir, el programa no puede mostrar toda la informacin recogida de la API, o puede combinar bits de informacin para la representacin compacta. Si envuelve a un programa de lnea de comandos con otro programa, el segundo programa tiene acceso slo a ya-interpretado (y como hemos mencionado, es posiblemente incompleta), que se debe volver a traducir en su formato de representacin. Con cada capa de la envoltura, la integridad de los datos originales es potencialmente contaminado cada vez ms, al igual que el resultado de hacer una copia de una copia (de una copia ...) de un favorito de audio o cinta de vdeo.

172 Informacin del desarrollador

Uso de la API
Desarrollo de aplicaciones en contra de la subversin biblioteca API es bastante sencillo. Todos los archivos de cabecera pblicos en subversion / include del rbol de cdigo fuente. Estas cabeceras se copia en su sistema cuando usted construye e instala Subversion propia de la fuente. Estos encabezados re-presentan la totalidad de las funciones y tipos de datos accesibles por los usuarios de las bibliotecas de Subversion. La primera cosa que usted puede notar es que los tipos de datos y funciones de Subversion estn protegidos por un espacio. Cada nombre de smbolo Subversion pblica comienza con svn_, seguido de un cdigo de acceso para la biblioteca en la que se define el smbolo (tales como wc, cliente, fs, etc), seguido por un nico carcter de subrayado (_) y luego el resto de la nombre del smbolo. Funciones semi-pblicas (utilizado entre los archivos de origen de una biblioteca determinada, pero no por el cdigo fuera de la biblioteca, y se encuentra dentro de los directorios de libreras propias) difieren de este esquema de nombres en el que en lugar de un nico guin despus del cdigo de la biblioteca, ya que usan doble subrayado (). Las funciones que son privadas de un fichero particular no tienen prefijos especiales, y se declaran stat-ic. Por supuesto, un compilador no est interesada en estas convenciones de nombrado, pero ayudan a aclarar el alcance de una funcin o tipo de datos.

La biblioteca ejecutable adaptable de Apache


Junto con los propios tipos de datos de Subversion, ver muchas referencias a tipos de datos que comienzan con apr_-smbolos de la Apache Portable Runtime (APR) de la biblioteca. APR es la biblioteca de portabilidad de Apache, originada a partir de su cdigo de servidor como un intento de

separar los bits OS-especficas de las partes independientes del SO del cdigo. El resultado es una librera que proporciona una API genrica para realizar opera-ciones que difieren ligeramente-o terriblemente-de SO a SO. Mientras el servidor HTTP Apache fue obviamente el primer usuario de la librera APR, los desarrolladores de Subversion reconocieron inmediatamente el valor de la utilizacin de abril tambin. Esto significa que prcticamente no hay porciones de cdigo dependiente del SO en Subversion. Adems, significa que el cliente Subversion compila y se ejecuta en cualquier lugar que el servidor hace. Actualmente esta lista incluye todos los sabores de Unix, Win32, BeOS, OS / 2 y Mac OS X. Adems de proporcionar implementaciones consistentes de llamadas de sistema que difieren entre sistemas operativos, 02 de abril da a Subversion acceso inmediato a muchos tipos de datos personalizados, como arrays dinmicos y tablas hash. Subversion utiliza estos tipos de largo del cdigo fuente. Pero quizs el ms penetrante abril tipo de datos, que se encuentra en casi todos los prototipos API de Subversion, es la del grupo de memoria apr_pool_t abril Subversion usa internamente para todas sus necesidades de asignacin de memoria (a menos que una biblioteca externa re-quiere un esquema de gestin de memoria diferente para los datos que pasan a travs de su API), 3 y aunque una persona que programa usando las APIs de Subversion no est obligada a hacer lo mismo, estn obligados a proporcionar a las piscinas a las funciones de la API que los necesitan. Esto significa que los usuarios de la API de Subversion tambin tienen que enlazar con APR, y deben llamar apr_initialize () para inicializar el subsistema de abril, y luego debe adquirir una piscina para el uso con llamadas a la API de Subversion. Consulte laseccin "Programacin con reas de memoria" para ms informacin.

Requisitos de URL y ruta


Con la operacin de control de versiones remotas como el punto de la existencia de Subversion, tiene sentido que un poco de atencin se ha prestado apoyo a la internacionalizacin (i18n). Despus de todo, mientras que la "distancia" puede significar "a travs de la oficina", que podra muy bien significar "todo el mundo". Para facilitar esto, todas las interfaces pblicas de Subversion que aceptan argumentos de rutas esperan que sean cannicas, y codificados en UTF-8. Esto significa, por ejemplo, que cualquier nuevo cliente binario que use la interfaz libsvn_client debe convertir primero las rutas de la codificacin de la configuracin regional de UTF-8 antes de pasarlas a las libreras de Subversion, y luego reconvertir cualquier resultado generado desde Subversion nuevo en la codificacin de loc-ale antes de usar esas rutas con fines no relacionados con Subversion. Afortunadamente, Subversion proporciona un conjunto de funciones (vea subversion / include / svn_utf.h) que puede ser usado por cualquier programa para realizar estas conversiones.

2Subversion utiliza las llamadas al sistema ANSI y tipos de datos tanto como sea posible.

3Neon y Berkeley DB son ejemplos de este tipo de bibliotecas.

173 Informacin del desarrollador Adems, las APIs de Subversion requieren que todos los parmetros de URL para ser una URI debidamente codificada. As, en lugar de pasar file :/ / / home / usuario / Mi Archivo.txt como la direccin URL de un archivo con el nombre Mi Archivo.txt, necesita pasar file :/ / / home / usuario / My% 20File.txt. Una vez ms, Subversion proporciona funciones de ayudante que la aplicacin puede utilizar-svn_path_uri_encode () y svn_path_uri_decode (), por URI de codificacin y decodificacin, respectivamente.

Usando lenguajes distintos de C y C + +


Si usted est interesado en el uso de las bibliotecas de Subversion junto con algo ms que un programa Cdigamos un Python o Perl scripts Subversion tiene cierto apoyo a esta va Wrapper simplificado y Generador de Interfaz (SWIG). Los enlaces SWIG para Subversion se encuentran en reuniones subversion/bind- / trago y aunque todava madurando, se encuentran en un estado utilizable. Estos enlaces le permiten llamar a funciones API de Subversion indirectamente, con envoltorios que traducen los tipos de datos nativos de su lengua en los tipos de datos necesarios por las libreras C de Subversion scripting. No es un beneficio obvio para el acceso a la API de Subversion a travs de un lenguaje vinculante-

simplicidad. Generalmente hablando, lenguajes como Python y Perl son mucho ms flexibles y fciles de usar que C o C + +. Los tipos de datos de alto nivel y la comprobacin de tipo de contexto impulsado proporcionados por estos lenguajes son a menudo mejores manejando la informacin que proviene de los usuarios. Como ustedes saben, los seres humanos son muy hbiles fastidiando los de entrada a un programa, y lenguajes de script tienden a manejar tales incorrecciones con ms gracia, plenamente. Por supuesto, a menudo que la flexibilidad es a costa del rendimiento. Es por eso que el uso de un bien optimizado, la interfaz basada en C y conjunto de libreras, junto con un lenguaje poderoso, flexible, es tan atractivo. Echemos un vistazo a un programa de ejemplo que utiliza enlaces SWIG de Subversion para Python para rastrear de forma recursiva la revisin del repositorio ms joven, e imprimir los diversos caminos alcanzados durante el rastreo.

Ejemplo 8.2. Usando la capa de repositorio con Python


#! / Usr / bin / python "" "Rastrear un repositorio, imprimir los nombres de rutas de objetos versionados." "" Import sys importacin os.path svn.fs importacin, svn.core, svn.repos def crawl_filesystem_dir (root, directorio, piscina): "" "Recursivamente gatear directorio en la raz del sistema de ficheros, y devolver una lista de todos los caminos en o por debajo del directorio. Uso de la piscina para todas las asignaciones." "" # Imprime el nombre de esta ruta. directorio impreso + "/" # Recibe las entradas de directorio para el directorio. entradas = svn.fs.svn_fs_dir_entries (root, directorio, piscina) # Utilice un subgrupo iteracin. subpool = svn.core.svn_pool_create (pool) # Loop sobre las entradas. nombres = entries.keys () para el nombre en los nombres: # Borrar el subgrupo iteracin. svn.core.svn_pool_clear (subgrupo) 174 Informacin del desarrollador # Calcula la ruta completa de la entrada. full_path = directorio + '/' + nombre # Si la entrada es un directorio, recurse. La recursividad volver # Una lista con la entrada y todos sus hijos, que vamos a aadir a # Nuestra lista actualizada de los caminos. si svn.fs.svn_fs_is_dir (raz, full_path, subgrupo): crawl_filesystem_dir (raz, full_path, subgrupo) ms: # Else es un archivo, por lo que imprimir

su ruta aqu. impresin full_path # Destruye el subgrupo iteracin. svn.core.svn_pool_destroy (subgrupo) def crawl_youngest (piscina, REPOS_PATH): "" "Abre el repositorio en REPOS_PATH y recursiva rastrear su revisin ms joven." "" # Abra el repositorio en REPOS_PATH, y obtener una referencia a su # Versiones de sistema de archivos. repos_obj = svn.repos.svn_repos_open (REPOS_PATH, piscina) fs_obj = svn.repos.svn_repos_fs (repos_obj) # Consultar la revisin actual del menor. youngest_rev = svn.fs.svn_fs_youngest_rev (fs_obj, piscina) # Abrir un objeto raz que representa la revisin ms joven (la cabeza). root_obj = svn.fs.svn_fs_revision_root (fs_obj, youngest_rev, piscina) # Hacer el rastreo recursivo. crawl_filesystem_dir (root_obj, "", piscina) Si name == "principal": # Verifique el uso de cuerda. si len (sys.argv) = 2: sys.stderr.write ("Uso:% s REPOS_PATH \ n" % (Os.path.basename (sys.argv [0]))) sys.exit (1) # Canonicalize (suficiente para Subversion, por lo menos) la ruta de repositorio. REPOS_PATH = os.path.normpath (sys.argv [1]) si REPOS_PATH == '.': REPOS_PATH ='' # Llama a la app-envoltura, que se encarga de abril de inicializacin / apagado # Y la creacin y la limpieza de nuestro banco de memoria de nivel superior. svn.core.run_app (crawl_youngest, REPOS_PATH) Este mismo programa en C tendra que hacer frente a tipos de datos personalizados (como los proporcionados por la biblioteca APR) para representar el hash de entradas y la lista de rutas, pero Python tiene hashes (llamados "diccionarios") y enumera como una funcin de tipos de datos, y proporciona un rico conjunto de funciones para operar sobre esos tipos. As TRAGO (con la ayuda de algunas personalizaciones en el lenguaje capa de enlaces de Subversion) se encarga de mapear los tipos de datos personalizados a los tipos de datos nativos de la lengua meta. Esto proporciona una interfaz ms intuitiva para los usuarios de esa lengua. Los Python Subversion pueden utilizarse para operaciones de copia de trabajo, tambin. En la seccin anterior de este captulo, mencionamos la interfaz libsvn_client, y cmo existe con el nico propsito de simplificar el proceso de escribir un cliente de Subversion. El siguiente es un breve ejemplo de cmo lib-ral se puede acceder a travs de los enlaces SWIG para recrear una versin a escala reducida del estado svn comando.

175 Informacin del desarrollador

Ejemplo 8.3. A Crawler Estado Python


#! / Usr / bin / env python

"" "Rastrear un directorio de copia de trabajo, la impresin de la informacin de estado." "" Import sys importacin os.path import getopt importacin svn.core, svn.client, svn.wc def generate_status_code (estado): "" "Traducir un valor de estado en un carcter de un solo cdigo de estado, utilizando la misma lgica que el cliente de lnea de comandos de Subversion." "" si el estado == svn.wc.svn_wc_status_none: return '' si el estado == svn.wc.svn_wc_status_normal: return '' si el estado == svn.wc.svn_wc_status_added: return 'A' si el estado == svn.wc.svn_wc_status_missing: return '!' si el estado == svn.wc.svn_wc_status_incomplete: '!' regreso si el estado == svn.wc.svn_wc_status_deleted: return 'D' si el estado == svn.wc.svn_wc_status_replaced: return 'R' si el estado == svn.wc.svn_wc_status_modified: return 'M' si el estado == svn.wc.svn_wc_status_merged: return 'G' si el estado == svn.wc.svn_wc_status_conflicted: return 'C' si el estado == svn.wc.svn_wc_status_obstructed: return '~' si el estado == svn.wc.svn_wc_status_ignored: return 'I' si el estado == svn.wc.svn_wc_status_external: return 'X' si el estado == svn.wc.svn_wc_status_unversioned: "?" retorno volver '?' def do_status (piscina, RUTA_CDT, detallado): # Calcular la longitud de la ruta de la copia de trabajo de entrada. wc_path_len = len (RUTA_CDT) # Construir un bastn contexto de cliente. ctx = svn.client.svn_client_ctx_t () def _status_callback (ruta, estado, root_path_len = wc_path_len): "" "Una funcin de devolucin de llamada para svn_client_status." "" # Imprime el camino, menos la parte que se solapa con la raz de # El rastreo de estado text_status = generate_status_code (status.text_status) prop_status = generate_status_code (status.prop_status) print '% s% s% s'% (text_status, prop_status, ruta [wc_path_len + 1:])

176 Informacin del

desarrollador # Hacer el rastreo de estado, utilizando _status_callback () como nuestra funcin de devolucin de llamada. svn.client.svn_client_status (RUTA_CDT, Ninguno, _status_callback, 1, prolijo, 0, 0, ctx, piscina) def usage_and_exit (Cdigo de error): Flujo "" "mensaje de uso de impresin y salida con ERRORCODE." "" = Cdigo de error y sys.stderr o sys.stdout Stream.Write ("" "Uso:% s OPCIONES WC-PATH Opciones : - Help,-h: Muestra el mensaje de uso - Verbose,-v: Mostrar todos los estados, incluso los no interesantes "" "% (os.path.basename (sys.argv [0]))) sys.exit (Cdigo de error) Si name == 'main': # Analizar las opciones de lnea de comandos. Sugerencias de bsqueda: opta, args = getopt.getopt (sys.argv [1:], "hv", ["ayuda", "prolijo"]), excepto getopt.GetoptError: usage_and_exit (1) verbose = 0 para optar, en arg opta: si opta en ("-h", "- help"): usage_and_exit (0) si opta en ("-v", "- verbose"): verbose = 1 si len (args) = 1: usage_and_exit (2) # Canonicalize (suficiente para Subversion, por lo menos) la copia de trabajo. RUTA_CDT = os.path.normpath (args [0]) si RUTA_CDT == '.': RUTA_CDT ='' # Llama a la app-envoltura, que se encarga de abril de inicializacin / apagado # Y la creacin y la limpieza de nuestro banco de memoria de nivel superior. svn.core.run_app (do_status, RUTA_CDT, detallado) Enlaces de lenguaje de Subversion lamentablemente tienden a carecer del nivel de atencin que se presta a los mdulos de sub-versin de la base. Sin embargo, se han dado pasos significativos hacia la creacin de enlaces funcionales para Python, Perl y Ruby. Hasta cierto punto, el trabajo realizado la preparacin de los archivos de interfaz SWIG para estos idio-mas es reutilizable en los esfuerzos para generar enlaces a otros idiomas soportados por SWIG (que in-cluye versiones de C #, Guile, Java, MzScheme OCaml, PHP, Tcl y otros). Sin embargo, se requiere un poco de programacin extra para compensar las complejas APIs con las que SWIG necesita ayuda interactuar con.Para obtener ms informacin sobre SWIG, vea el sitio web del proyecto en http://www.swig.org/.

Dentro del rea de Administracin copia de trabajo


Como mencionamos anteriormente, cada directorio de la copia de trabajo de Subversion contiene un subdirectorio especial llamado. Svn que alberga los datos administrativos sobre ese directorio de la copia de trabajo. Subversion utiliza la informacin de SVN para realizar un seguimiento de cosas como.: Qu repositorio ubicacin (s) estn representadas por los archivos y subdirectorios de la copia de trabajo dir-ectory. Qu revisin de cada uno de los archivos y directorios se presentan actualmente en la copia de trabajo.

Propiedades que puedan atribuirse a esos archivos y directorios definidos por el usuario.

177 Informacin del desarrollador Pristine copias (sin editar) de los archivos de la copia de trabajo.

Si bien hay varios otros bits de datos almacenados en el directorio. Svn, examinaremos slo un par de los temas ms importantes.

El Archivo de los comentarios


Quizs el fichero ms importante en la gua. Svn es el fichero de entradas. El archivo de entrada es un documento XML que contiene la mayor parte de la informacin administrativa sobre un recurso versionado en un directorio de copia de trabajo. Este es el archivo de uno que sigue el URL del repositorio, revisiones prstinas, sumas de comprobacin de archivos, texto prstinos y fechas de la propiedad, la programacin y la informacin del estado de los conflictos, ltima informacin conocida (autor, revisin, fecha y hora), copia de la historia local, prcticamente todo lo que un cliente de Subversion est interesado en saber sobre un recurso versionado (o para-ser-versionada)!

Comparando las reas administrativas de Subversion y CVS Una mirada dentro del directorio tpico. Svn revela un poco ms de lo que CVS mantiene en sus directorios administrativos CVS. El archivo de entrada contiene XML que describe el estado actual del directorio de la copia de trabajo, y bsicamente sirve a los propsitos de los comentarios de CVS, raz, y los archivos del repositorio combinados. El siguiente es un ejemplo de un archivo de entradas real:

Ejemplo 8.4. Contenido de un tpico .svn / entradasExpediente


<? Xml version = encoding "1.0" = "UTF-8"> <wc-entries xmlns="svn:"> <Entrada cometido-rev = name "1" = "" cometido-date = "2005-04-04T13: 32:28.526873 Z" url = "http://svn.red-bean.com/repos/greektree/A/D" ltima author = "jrandom" tipo = "dir" uuid = versin "4e820d15-A807-0410-81d5aa59edf69161" = "1" /> <Entrada name = "lambda" copiada = "true" tipo = copyfromrev = programa "file", "1" = "aadir" copyfrom-url = "http://svn.red-bean.com/repos/greek-tree/A/B/lambda" /> <Entrada

cometido-rev = name "1" = "gamma" texto-time = "2005-12-11T16: 32:46.000000 Z" comprometido-date = "2005-04-04T13: 32:28.526873 Z" = "ada10d942b1964d359e048dbacff3460" last-autor checksum = "jrandom" tipo = "file" prop-time = "2005-12-11T16: 32:45.000000 Z" /> <Entrada name = tipo "zeta" = "file"

178 Informacin del desarrollador horario = versin "add" = "0" /> <Entra da name = tipo "G" = "dir" /> <Entra da name = tipo "H" = "dir" schedule = "delete" /> </ Wcentries> Como puede ver, el archivo de entrada es esencialmente una lista de entradas. Cada etiqueta de entrada representa una de tres cosas: el directorio de copia de trabajo en s (llamada entrada "este directorio", y seal que tienen un valor vaco para su atributo de nombre), un archivo en esa copia local (caracterizado por tener en su atributo de clase establecido en "archivo"), o un subdirectorio en esa copia de trabajo (tipo aqu est en "dir"). Los archivos y subdirectorios cuyas entradas se guardan en este archivo estn ya bajo control de versiones, o (como en el caso del fichero zeta ms arriba) estn programados para ser aadido al control de versiones cuando el usuario vuelva compromete de este directorio de la copia de trabajo cambios. Cada entrada tiene un nombre nico, y cada entrada tiene un tipo de nodo. Los desarrolladores deben tener en cuenta algunas reglas especiales que Subversion usa al leer y escribir sus archivos de entradas. Mientras que cada entrada tiene una revisin y URL asociada a ella, tenga en cuenta que no todos los tag entrada en el archivo de ejemplo tiene la revisin explcita o atributos url que se le atribuye. Subversion permite que las entradas no almacenan explcitamente esos dos atributos cuando sus valores son los mismos que (en el caso de revisin) o triviales de calcular a partir de 4 (en el caso url) los datos almacenados en la entrada "este directorio". Tenga en cuenta tambin que para las entradas de subdirectorios, Subversion almacena slo el fundamental atributos nombre, tipo, url, revisin y programar. En un esfuerzo por reducir informacin duplicada, Subversion dicta que el mtodo para determ-nando el conjunto completo de informacin sobre un subdirectorio es descender en ese subdirectorio, y leer la entrada "este directorio" de su propia .svn / entradas de archivo. Sin embargo, una referencia al subdirectorio se mantiene en el archivo de entradas de su padre, con suficiente informacin para permitir que las operaciones de control de versiones bsicas en el caso de que el propio subdirectorio no est presente en el disco.

Copias prstinas y archivos de propiedad


Como se mencion antes, el directorio. Svn tambin contiene las vrgenes versiones "text-base" de archivos. stas pueden encontrarse en .svn / texto-base. Los beneficios de estas copias prstinas son los controles de la red sin mltiples para modificaciones locales y diferencia, la red libre de reversin de los archivos modificados o desaparecidos, la transmisin ms pequeo de los cambios en el servidor, pero a costa de que cada fichero versionado almacena a menos dos veces en el disco. En estos das, esto parece

ser una desventaja despreciable para la mayora de los archivos. Sin embargo, la situacin se vuelve ms delicada ya que el tamao de los archivos versionados crece. Se est prestando atencin a MAK-cin de la presencia del "texto-base" una opcin. Irnicamente, sin embargo, es como el tamao de sus archivos versionados lar-ger que la existencia del "texto-base" se convierte en ms importante-que quiere transmitir un archivo grande a travs de una red slo porque quieren cometer un pequeo cambio para que ? Similares en propsito a los archivos "text-base" son los archivos de propiedades y sus copias "prstinas prop-base", que se encuentra en .svn / accesorios y .svn / prop-base, respectivamente. Dado que los directorios pueden tener propiedades, tambin, tambin hay / dir-props y .svn / dir-prop-base .svn. Cada uno de estos archivos de propiedades (versiones "base" "de trabajo" y) utiliza un formato de archivo simple "hash en disco" para almacenar los nombres y valores de propiedad.

WebDAV
WebDAV (abreviatura de "Web Distributed Authoring y control de versiones") es una extensin de la

4That es decir, la direccin de la entrada es la misma que la concatenacin de la direccin URL del directorio padre y el nombre de la entrada.

179 Informacin del desarrollador protocolo HTTP estndar diseado para hacer de la red en un medio de lectura / escritura, en lugar del medio, bsicamente, de slo lectura que existe hoy en da. La teora es que los directorios y archivos pueden ser compartidos-tanto como de lectura y escritura para poder objetos a travs de Internet. RFC 2518 y 3253 describen los WebDAV / DeltaV extensiones para HTTP, y estn disponibles (junto con una gran cantidad de otra informacin til) en ht- tp :/ / www.webdav.org/. Una serie de operativos exploradores de archivos del sistema que ya son capaces de montar los directorios de red utilizando Web-DAV. En Win32, el Explorador de Windows puede ver lo que denomina Carpetas Web (que son slo lugares en la red Web-DAV-ready) como si fueran carpetas compartidas regulares. Mac OS X tambin tiene esta capacidad, al igual que los navegadores Nautilus y Konqueror (bajo GNOME y KDE, respectivamente). Qu significa todo esto se aplica a Subversion? El mdulo de Apache mod_dav_svn utiliza HTTP, WebDAV y ampliado por DeltaV, como uno de sus protocolos de red. Subversion usa mod_dav_svn para relacionar los conceptos de control de versiones Subversion y las de los RFCs 2518 y 3253. Para una discusin ms detallada de WebDAV, cmo funciona, y cmo lo usa Subversion, ver Apapndice B, WebDAV y autoversionado. Entre otras cosas, ese apndice discute el grado en que Subversion se adhiere a la especificacin WebDAV genrica, y cmo eso afecta la interoperabilidad con clientes WebDAV genricos.

Programacin con piscinas de memoria


Casi todos los desarrolladores que ha utilizado el lenguaje de programacin C tiene en algn momento suspir ante la difcil tarea de administrar el uso de memoria. La asignacin de memoria suficiente para utilizar, mantener un registro de los al-locations, liberar la memoria cuando ya no lo necesita-estas tareas pueden ser bastante complejos. Y, por supuesto, el hecho de hacer las cosas bien puede dar lugar a un programa que se estrella en s, o peor, se bloquea el ordenador. Afortunadamente, la biblioteca de abril que depende Subversion para su portabilidad proporciona el tipo de dato apr_pool_t, que representa a un grupo de los que la aplicacin puede asignar memoria. Un bloque de memoria es una representacin abstracta de un bloque de memoria reservado para el uso de un programa. En lugar de pedir memoria directamente desde el sistema operativo utilizando el estndar malloc () y amigos, los programas que enlazan con APR pueden simplemente solicitar la creacin de una reserva de memoria (utilizando el apr_pool_create () funcin). APR reservar un trozo de tamao moderado de la memoria del sistema operativo, y que la memoria estar inmediatamente

disponible para su uso por el programa. Cada vez que el programa necesita de la memoria de grupo, utiliza una de las funciones API APR, como apr_palloc (), que re-enciende una ubicacin de memoria genrica de la piscina. El programa se puede seguir pidiendo retazos de la memoria de la piscina, y APR seguir accediendo a las peticiones. Piscinas crecern automticamente de tamao para dar cabida a los programas que solicitan ms memoria que el grupo original que figura, hasta que, por supuesto, no hay ms memoria disponible en el sistema. Ahora bien, si este fuera el final de la historia de billar, difcilmente se hubiese merecido una atencin especial. Afortunadamente, ese no es el caso. Las piscinas no slo pueden ser creados, sino que tambin se pueden borrar y destruyan aplicando apr_pool_clear () y apr_pool_destroy () respectivamente. Esto le da a los desarrolladores la flexibilidad para asignar varios-o varios miles, cosas de la piscina y, a continuacin, limpiar toda esa memoria con una sola llamada de funcin! Adems, los consorcios tienen jerarqua. Usted puede hacer "sub reas" de cualquier grupo creado previamente. Cuando se borra un grupo, todos sus sub reas son destruidas, y si se destruye una piscina, y sus sub reas son destruidas. Antes de seguir adelante, los desarrolladores deben ser conscientes de que probablemente no encontrarn muchas llamadas a las funciones de memoria APR que acabamos de mencionar en el cdigo fuente de Subversion. Piscinas abril ofrecen algunos mecanismos de extensibilidad, como la capacidad de tener "datos de usuario" personalizados unidos a la piscina, y los mecanismos para regis-tering funciones de limpieza que sern llamados cuando se destruye la piscina. Subversion hace uso de estas ex-tensiones de una manera algo no trivial. Por lo tanto, los suministros de Subversion (y la mayor parte de su cdigo usa) las funciones de contenedor svn_pool_create (), svn_pool_clear (), y svn_pool_destroy (). Si bien las piscinas son tiles para la gestin de la memoria bsica, la construccin de la piscina realmente brilla con los bucles y la recursividad. Dado que los bucles a menudo no acotadas en sus iteraciones y recurrencias en su profundidad,

180 Informacin del desarrollador el consumo de memoria en estas reas del cdigo puede resultar impredecible. Afortunadamente, el uso de grupos de memoria anidadas puede ser una gran manera de administrar fcilmente estas situaciones peliagudas. El siguiente ejemplo muestra el uso bsico de reas anidadas en una situacin que es bastante comn-recorrer de forma recursiva un rbol de directorios, hacer algo de tarea a cada cosa en el rbol.

Ejemplo 8.5. Uso efectivo piscina


/ * Recursivamente trepar por DIRECTORIO, aadiendo los caminos de todos los nios de archivos a la matriz FILES, y haciendo algo de tarea para cada camino encontrado. Uso de la piscina para las asignaciones de todos los temporales, y la tienda los caminos de hash de la misma agrupacin como el hash mismo se asigna pulg * / apr_status_t esttica crawl_dir (apr_array_header_t * Los archivos, const char * directorio, apr_pool_t * piscina) { apr_pool_t * hash_pool = archivos-> Piscina; * array piscina / * / apr_pool_t subgrupo * = svn_pool_create (pool); / * Piscina iteracin * / apr_dir_t * dir; apr_finfo_t finfo; apr_status_t apr_err; banderas apr_int32_t = APR_FINFO_TYPE | APR_FINFO_NAME; apr_err = apr_dir_open (y dir, directorio, piscina); if (apr_err) volver apr_err; / * Bucle sobre las entradas de directorio, despejando el subgrupo en

la parte superior de cada iteracin. * / por (apr_err = apr_dir_read (& finfo, banderas, dir); apr_err == APR_SUCCESS; apr_err = apr_dir_read (& finfo, banderas, dir)) { const char * child_path; / * Borrar el subgrupo per-iteracin. * / Svn_pool_clear (subgrupo); / * Ir entradas para "este directorio" ('.') Y su padre ('..'). * / If (finfo.filetype == APR_DIR) { if (finfo.name [0] == '.' && (Finfo.name [1] == '\ 0' | | (Finfo.name [1] == && finfo.name [2] == '\ 0' '.'))) Continuar; } / * Construir CHILD_PATH del directorio y FINFO.name. * / Child_path = svn_path_join (directorio, finfo.name, subgrupo); / * Haga un poco de trabajo para este camino encontrado. * / Do_some_task (child_path, subgrupo); / * Manejar subdirectorios de manera recursiva en ellos, pasando subgrupo como la piscina para asignaciones temporales. * / if (finfo.filetype == APR_DIR) { apr_err = crawl_dir (archivos, child_path, subgrupo); if (apr_err) volver apr_err;

181 Informacin del desarrollador } / * Manejar archivos aadiendo su camino a la matriz FILES. * / Else if (finfo.filetype == APR_REG) { / * Copie la ruta del archivo en la piscina los archivos de matriz. * / Child_path = apr_pstrdup (hash_pool, child_path); / * Aade la ruta al array. * / (* ((Const char **) apr_array_push (archivos))) = child_path;

} }

/ * Destruye subgrupo. * / Svn_pool_destroy (subgrupo); / * Comprobar que el circuito sali limpiamente. * / If (apr_err) volver apr_err; / * S, sali limpia, tan cerca de la dir. * / Apr_err = apr_dir_close (dir); if (apr_err) apr_err

retorno; volver APR_SUCCESS; } El ejemplo anterior demuestra un uso eficaz en situaciones tanto de bucles y la recursividad. Cada recursin comienza haciendo un subgrupo del grupo pasa a la funcin. Este subgrupo se utiliza para la regin de bucle, y se aclar con cada iteracin. El resultado es el uso de memoria es ms o menos proporcional a la profundidad de la recursin, no el nmero total de archivos y directorios presentes como hijos de un directorio de ms alto nivel. Cuando la primera llamada a esta funcin recursiva finalmente termina, en realidad hay muy pocos datos almacenados en la agrupacin que se ha pasado a l. Ahora imagine la complejidad adicional que estara presente si la funcin tuvo que alloc () y free () cada pieza de datos usados! Las piscinas pueden no ser ideal para todas las aplicaciones, pero son extremadamente tiles en Subversion. Como desarrollador de Subversion, usted necesita para hacer crecer a gusto con piscinas y cmo manejarlas correctamente. Errores de uso de memoria y la hinchazn pueden ser difciles de diagnosticar y corregir independientemente de la API, pero el tipo de estructura proporcionada por abril ha resultado tremendamente conveniente bits, el ahorro de tiempo de funcionalidad.

Contribuyendo a Subversion
La fuente oficial de informacin sobre el proyecto Subversion es, por supuesto, la pgina web del proyecto en ht- tp :/ / subversion.tigris.org /. All usted puede encontrar informacin sobre cmo obtener acceso al cdigo fuente y participando en las listas de discusin. La comunidad de Subversion siempre da la bienvenida a nuevos miembros. Si usted est interesado en participar en esta comunidad contribuyendo cambios al cdigo fuente, aqu hay algunos consejos sobre cmo empezar.

nete a la Comunidad
El primer paso en la participacin de la comunidad es encontrar una manera de estar al tanto de los ltimos acontecimientos. Para hacerlo ms eficaz, tendr que suscribirse a la lista de discusin desarrollador principal (<dev@subversion.tigris.org>) Y comprometerse lista de correo (<svn@subversion.tigris.org>). Al seguir estas listas incluso vagamente, usted tendr acceso a los debates importantes de diseo, ser capaz de ver los cambios reales en el cdigo fuente de Subversion que se producen, y poder ser testigo de revisiones paritarias de los cambios y los cambios propuestos. Estos email discusin basada en

182 Informacin del desarrollador listas son los medios principales de comunicacin para el desarrollo de Subversion. Ver la seccin de Listas de correo de la pgina web de otras listas de Subversion relacionadas que podra estar interesado pulg Pero, cmo sabes lo que hay que hacer? Es muy comn que un programador para tener mayores intenciones de ayudar con el desarrollo, sin embargo, ser incapaz de encontrar un buen punto de partida. Despus de todo, no muchas personas vienen a la comunidad que ya ha decidido sobre una picazn en particular que le gustara a la altura. Pero al ver las listas de discusin de los desarrolladores, puede ver mencionados fallos existentes y solicitudes fea-tura volar por que le interesen. Adems, un gran lugar para buscar tareas pendientes, no reclamados es la base de datos de seguimiento de asuntos en el sitio web de Subversion. All podr encontrar la lista actual de los fallos conocidos y caractersticas solicitadas. Si quieres empezar con algo pequeo, busque tareas marcadas como "bocado".

Obtener el Cdigo Fuente


Para editar el cdigo, es necesario tener el cdigo. Esto significa que usted necesita para ver una copia de trabajo del repositorio Subversion pblico. Tan sencillo como que puede sonar, la tarea puede ser un

poco complicado. Dado que el cdigo fuente de Subversion se versiona con el propio Subversion, en realidad se necesita "arrancar" por conseguir un cliente de Subversion de trabajo a travs de algn otro mtodo. Los mtodos ms comunes incluyen la descarga de la ltima distribucin binaria (si es que est disponible para su plataforma) o des-cargar el ltimo tarball de origen y la construccin de su propio cliente de Subversion. Si se construye desde el cdigo fuente, asegrese de leer el archivo INSTALL en el nivel superior del rbol de cdigo fuente para obtener instrucciones. Despus de tener un cliente de Subversion de trabajo, que ahora est a punto de obtener una copia de trabajo de la Sub- repositorio de cdigo fuente de la versin http://svn.collab.net/repos/svn/trunk/: 5 $ Svn checkout http://svn.collab.net/repos/svn/trunk subversin A subversion / PIRATERA A subversion / instalar un subversion / README A subversion / autogen.sh A subversion / build.conf . . . El comando anterior Caja del bleeding-edge, la ltima versin del cdigo fuente de Subversion en un subdirectorio llamado subversion en el directorio de trabajo actual. Obviamente, usted puede ajustar ese ltimo argumento como mejor le parezca. Independientemente de lo que usted llama el nuevo directorio de la copia de trabajo, sin embargo, una vez finalizada esta operacin, que ahora tendr el cdigo fuente de Subversion. Por supuesto, usted todava tendr que buscar a las libreras de apoyo (apr, apr-util, etc), consulte el archivo INSTALL en el nivel superior de la copia de trabajo para los detalles.

Familiarizarse con las polticas comunitarias


Ahora que tiene una copia de trabajo que contiene el cdigo fuente de Subversion ltimo, lo ms seguro que tomar un crucero a travs de la "Gua del Hacker para Subversion", el que est disponible como el archivo www / hacking.html en la copia de trabajo, o en el sitio web de Subversion en ht- tp :/ / subversion.tigris.org / hacking.html. Esta gua contiene instrucciones generales para contribuir a Subversion, incluyendo cmo formatear correctamente el cdigo fuente de la coherencia con el resto de la base de cdigo, la forma de describir los cambios propuestos con un mensaje de informe de cambios efectivos, cmo probar los cambios, y as sucesivamente. Comprometerse privilegios en el repositorio de cdigo fuente de Subversion se ganan-un gobierno de la meritocracia. 6 "Manual del Hacker" El es un recurso muy valioso cuando se trata de asegurarse de que los cambios propuestos ganan las alabanzas que merecen sin ser rechazado por tecnicismos.
5Note

que la direccin URL desprotegido en el ejemplo anterior no termina con svn, pero con un subdirectorio del mismo llamadotronco. Ver nuestra discusin de ramificacin de Subversion y el modelo marcado por el razonamiento detrs de esto.
6While

esto puede parecer superficialmente como una especie de elitismo, este "ganar sus privilegios compromisos" nocin es acerca de la eficiencia, ya sea que cuesta ms de tiempo y esfuerzo para revisar y solicitar cambios de otra persona que puedan ser segura y til, en comparacin con los costos potenciales de deshacer los cambios que son peligrosos.

183 Informacin del desarrollador

Hacer y probar sus cambios


Con el cdigo y la comprensin poltica de la Comunidad en la mano, usted est listo para hacer los cambios. Lo mejor es tratar de hacer grupos ms pequeos pero relacionados de los cambios, incluso hacer frente a las tareas ms grandes por etapas, en lugar de hacer enormes modificaciones radicales. Los cambios propuestos sern ms fciles de entender (y por lo tanto ms fcil de revisar) si molestar a las lneas de menor cantidad de cdigo posible realizar la tarea correctamente. Despus de cada conjunto de cambios propuestos, su rbol Subversion debe estar en un estado en el cual el software compila sin advertencias. Subversion tiene un conjunto de pruebas de regresin bastante exhaustivo 7, y se espera que los cambios propuestos para no causar ninguna de esas pruebas al fracaso. Al ejecutar make check (en Unix) desde la

parte superior del rbol de cdigo fuente, puede cordura a comprobar los cambios. La forma ms rpida de conseguir sus contribuciones de cdigo rechazados (que no falle-cin de suministrar un buen mensaje de registro) es presentar los cambios que provocan el fracaso en el banco de pruebas. En el mejor de los casos, se han aadido nuevos tests a ese conjunto de pruebas que verifican que sus cambios propuestos funcionan como se esperaba. De hecho, a veces la mejor contribucin que una persona puede hacer es solamente la adicin de nuevas pruebas. Puedes escribir pruebas de regresin para la funcionalidad que actualmente trabaja en Subversion como una manera de protegerse contra futuros cambios que puedan provocar un fallo en esas reas. Tambin, usted puede escribir nuevos tests que demuestran fallos conocidos. Para ello, el conjunto de pruebas Subversion le permite especificar que se espera que una prueba determinada a fallar (llamado XFAIL), y mientras Subversion no de la manera que se esperaba, un resultado de la propia XFAIL se considera un xito. En ltima instancia, el mejor conjunto de pruebas, menos tiempo se perder diagnosticando errores de regresin potencialmente oscuros.

Donar sus cambios


Despus de realizar las modificaciones en el cdigo fuente, componer un mensaje de registro clara y concisa para describir esos cambios y los motivos de las mismas. A continuacin, enviar un correo electrnico a la lista de desarrolladores que contiene el mensaje de registro y la salida de svn diff (desde la parte superior de su copia de trabajo de Subversion). Si los miembros de la comunidad consideran que los cambios aceptables, alguien que tenga privilegios de confirmacin (permiso para hacer nuevas revisiones en el repositorio Subversion) aadir sus cambios en el rbol de cdigo fuente pblica. Recordemos que el permiso para cometer directamente los cambios en el repositorio se concede por mritos, si usted demuestra comprensin de Subversion, competencia programando, y un "espritu de equipo", es probable que se otorg dicho permiso.

7You

puede ser que desee tomar un poco de palomitas. "A fondo", en este caso, se traduce en el barrio de treinta minutos de mquina no interactivo churn en alguna parte.

184

Captulo 9. Referencia completa de Subversion


Este captulo est destinado a ser una referencia completa sobre el uso de Subversion. Esto incluye el cliente de lnea de comandos (svn) y todas sus subcomandos, as como los programas de administracin de repositorio (svnadmin y svnlook) y sus respectivos subcomandos.

La Subversin de lnea de comandos del cliente: svn


Para utilizar el cliente de lnea de comandos, escriba svn, el subcomando que desea usar 1, y cualquier parmetro u objetivos que desea operar-no hay un orden especfico que el subcomandos y parmetros deben aparecer pulg Por ejemplo, todos los de las siguientes son formas vlidas para usar svn status: $ Svn status-v $ Svn status-v $ Svn status-v mifichero Usted puede encontrar muchos ms ejemplos de cmo utilizar la mayora de los comandos del cliente enCaptulo 3, Recorrido guiado y los comandos de gestin de propiedades en la seccin "Propiedades".

Interruptores svn

Aunque Subversion tiene diferentes parmetros para sus subcomandos, todos los interruptores son globales, es decir, cada interruptor est garantizado para significar la misma cosa sin importar el subcomando que use. Por ejemplo, - verbose (-v) siempre significa "salida detallada", sin importar el subcomando que use. - Auto-props Activa auto propiedades, reemplazando la directiva-auto-props enable en el archivo de configuracin. Config-dir DIR Indica a Subversion que lea la informacin de configuracin del directorio especificado en lugar del predeterminado locacin (. subversion en el directorio home del usuario). Diff-cmd CMD Especifica el programa externo que desea usar para mostrar las diferencias entre archivos. Cuando se invoca svn diff, usa el Submotor diferencial interno de versin, que ofrece diffs unificados por defecto. Si desea utilizar un diff externo programa, use - diff-cmd. Puede pasar parmetros a su programa de diferenciacin con el parmetro extensions (ms sobre esto ms adelante en esta seccin). Diff3-cmd CMD Especifica el programa externo que desea usar para unir los archivos. - Dry-run Pasa por todos los movimientos de ejecutar un comando, pero no hace los cambios efectivos, ya sea en un disco o en la rereposito rio. Editor-cmd CMD Especifica el programa externo que desea usar para editar un mensaje de registro o un valor de propiedad. Vea la seccin editor-cmd en

1S, s, usted no necesita un subcomando para usar el

- Versioncambiamos, pero vamos a llegar a eso en un minuto.

185 Referencia completa de Subversion la seccin "Config" maneras de especificar un editor por defecto. - Encoding ENC Le dice a Subversion que el mensaje de cambios est en la codificacin proporcionada. El valor por defecto es su funcionamiento localidad natal del sistema, y usted debe especificar la codificacin si sus mensajes de cambios estn en otra codificacin. - Extensiones(X) ARGS Especifica un parmetro o varios que Subversion debe pasar al comando de diferenciacin externo cuando se diferencias entre los archivos. Si desea pasar mltiples argumentos, debe incluir a todos ellos entre comillas (por ejemplo, svn diff - diff-cmd / usr / bin / diff-x "-b-E"). Este interruptor slo se puede utilizar si tambin pasa la-Diffcmdcambiar.

- Archivo(-F)NOMBREARCHIVO Utiliza los contenidos del fichero pasado como argumento de este parmetro para el subcomando especificado. - Force Obliga a un comando u operacin particular, para correr. Hay algunas operaciones que Subversion evitar de hacer el uso normal, pero puede pasar el parmetro de forzado para decirle Subversion "S lo que estoy haciendo, as como las posibles repercusiones de mis actos, por lo que me deje en 'em". Este parmetro es el equivalente programtico de realizar algn trabajo elctrico con el sistema encendido, si no sabes lo que ests haciendo, es muy probable que conseguir una desagradable sorpresa. - Force-log Fuerzas de parmetros sospechosos a las opciones - message (-m) o - file (-F) opciones para ser aceptado como val-id. Por defecto, Subversion producir un error si los parmetros de estas opciones perecen ser objetivos del subcomando. Por ejemplo, si pasa la ruta de un fichero versionado al - file (-F) opcin, Subversion asumir que ha cometido un error, que la ruta era en realidad como el objetivo de la operacin, y que simplemente no proporcion algn otro-no versionado de archivos como la fuente de su mensaje de registro. Afirmar su intencin y anular este tipo de errores, pase la opcin - force-log a subcomandos que aceptan mensajes de registro. - Help(-H o -?) Si se utiliza con uno o ms subcomandos, muestra el texto de ayuda integrada para cada subcomando. Si se utiliza solo, se disreproduce el texto de ayuda del cliente en general. - Ignore-ancestry Le dice a Subversion que ignore la ascendencia cuando calcule diferencias (slo usar el contenido de las rutas). - Ignore-externals Le dice a Subversion que ignore las definiciones externas y las copias de trabajo externas gestionadas por ellos. - Incremento Imprime la salida en un formato que permite la concatenacin. - Lmite NUM Mostrar slo los primeros mensajes de registro NUM. - Mensaje(-M)MENSAJE Indica que especificar el mensaje del informe en la lnea de comando, siguiendo al parmetro. Por ejemplo: $ Svn commit-m domingo." "Ellos no hacen el

- New ARG Usa ARG como el objetivo ms reciente. - No-auth-cache Previene el cacheado de informacin de autenticacin (por ejemplo, nombre de usuario y contrasea) en el Subversion administrativa directorios .

186 Referencia completa de Subversion

- No-auto-props Desactiva auto-props, anulando la directiva-auto-props enable en el archivo de configuracin. - No-diff-aadido Subversion Previene diferencias para archivos aadidos. El comportamiento por defecto cuando se agrega un archivo es de svn diffpara imprimir las mismas diferencias que vera si hubiese aadido todo el contenido de un archivo existente (vaco). - No-diff-deleted Subversion Previene de las diferencias de impresin para los archivos eliminados. El comportamiento por defecto cuando se elimina un archivo es que svn diff imprima las mismas diferencias que vera si hubiese dejado el fichero pero eliminando su contenido. - No-ignore Muestra ficheros en el listado de estado que normalmente seran omitidos debido a que coinciden con un patrn en la opcin de configuracin global-ignores o la propiedad svn: ignore. Consulte laseccin llamada "Config" y elseccin "svn: ignore" para ms informacin. - No-desbloquear No abrir automticamente los archivos (el comportamiento por defecto es compromiso para desbloquear todos los archivos que aparecen como parte del commit). Vea la seccin "Bloqueo" para ms informacin. - Non-interactive En el caso de un fallo de autenticacin, o credenciales insuficientes, evita que se soliciten las credenciales (por ejemplo, el usuario nombre o su contrasea). Esto es til si est ejecutando Subversion dentro de un script automatizado y es ms apropiado que Subversion falle en lugar de pedir ms informacin. - Non-recursive(-N) Detiene un subcomando de manera recursiva en subdirectorios. La mayora de los subcomandos son recursivos por defecto, pero algunos subcomandos, por lo general los que tienen el potencial de borrar o deshacer las modificaciones localesno. - Notice-ancestry Preste atencin a la ascendencia cuando calcula diferencias. - Old ARG Usa ARG como el objetivo mayor. - Password PASS Indica que est proporcionando la contrasea para la autenticacin en la lnea de comandos, de lo contrario, si se trata de necesario, Subversion le preguntar por ella. - Quiet(-Q) Solicita que el cliente imprima solamente la informacin esencial durante una operacin. - Recursive(-R) Hace un recurse subcomando en subdirectorios. La mayora de los subcomandos son recursivos por defecto. - Cambia de a [RUTA ...] Usado con el subcomando svn switch, cambia la ubicacin del repositorio que su copia de trabajo se refierecias. Esto es til si la ubicacin de su repositorio cambia y tiene una copia de trabajo existente que desea seguir utilizando. Consulte svn switch para un ejemplo.

- Revision(-R) REV Indica que se va a proporcionar una revisin (o rango de revisiones) para una operacin particular. Usted puede proporcionar los nmeros de revisin, palabras clave o fechas (rodeadas por llaves), como argumentos del parmetro de revisin. Si desea proporcionar un rango de revisiones, puede proporcionar dos revisiones separadas por dos puntos. Por ejemplo: $ Svn log-r 1729 $ Svn log-r 1729: CABEZA

187 Referencia completa de Subversion $ Svn log-r 1729:1744 $ Svn log-r {2001-12-04}: {2002-02-17} $ Svn log-r 1729: {2002-02-17} Vea la seccin "Revisin Palabras clave" para ms informacin. - Revprop Funciona con una propiedad de revisin en lugar de una propiedad Subversion particular de un fichero o directorio. Este interruptor de recuadernillos que adems debe pasar una revisin con la opcin - revision (-r). Consulte laseccin llamada "versionados Propiedades " para ms detalles sobre las propiedades no versionadas. - Show-updates(-U) Hace que el cliente muestre la informacin acerca de qu archivos en su copia de trabajo estn fuera de fecha. Esto no aceventualmente actualizar cualquiera de sus ficheros-solamente muestra qu archivos se actualizarn si ejecuta svn update. - Stop-on-copy Hace que el subcomando de Subversion que est recorriendo la historia de un recurso versionado deje de procesar esa informacin histrica cuando encuentre una copia-se, se repositorio encontr un lugar en la historia cuando el recurso fue copiado desde otra ubicacin en el. - Strict Hace que Subversion siga unas semnticas estrictas, una nocin que es bastante vaga a menos hablando especfica subcomit demandas. - Targets FILENAME Le dice a Subversion para obtener la lista de archivos que se desea operar desde el fichero proporcionado en lugar de la listacin de todos los archivos en la lnea de comandos. - Username NAME Indica que est proporcionando su nombre de usuario para la autenticacin en la lnea de comandos, de lo contrario, si se trata de necesario, Subversion le preguntar por ella. - Verbose(-V) Solicita que el cliente imprima tanta informacin como sea posible mientras ejecuta cualquier subcomando. Esto puede resultar en Subversion imprima campos adicionales, informacin detallada sobre todos los archivos o informacin adicional re-Grding sus acciones. - Version Imprime la informacin de la versin del cliente. Esta informacin no slo incluye el nmero de versin del cliente, sino tambin una lista

cin de todos los mdulos de acceso a repositorio que el cliente puede utilizar para acceder a un repositorio de Subversion. - Xml Imprime salida en formato XML.

subcomandos svn
188 Referencia completa de Subversion

Nom bre
svn add - Aadir archivos, directorios o enlaces simblicos.

Sinopsis
svn ... add RUTA

Descripcin
Agregar archivos, directorios o enlaces simblicos a su copia de trabajo y el calendario para la adicin al repositorio. Ellos se subirn y se aaden al repositorio en el siguiente envo. Si aade algo y cambia de opinin antes de comprometerse, puede desprogramar la adicin usando svn revert.

Nombres alternativos
Ning uno

Cambios
Copia Trabajo de

Accede al repositorio
No

Switches
Targets FILENAME Non-recursive (-N) Quiet (-q) Config-dir DIR Auto-props No-auto-props Force

Ejemplos
Para agregar un archivo a la copia de trabajo: $ Svn add foo.c A foo.c Al agregar un directorio, el comportamiento por defecto de svn add es

recurse: $ Svn add testdir A testdir Un testdir / a A testdir / b Un testdir / c A testdir / d

189 Referencia completa de Subversion Puede aadir un directorio sin aadir su contenido: $ Svn add - otherdir no recursiva A otherdir Normalmente, el comando svn add * omitir los directorios que ya estn bajo control de versiones. A veces, sin embargo, es posible que desee agregar todos los objetos sin versionar en su copia de trabajo, incluidos los que esconderse ms abajo. Al pasar la opcin - force hace svn add recurse en versionado director-ies: $ Svn add * - Una fuerza de foo.c A somedir / bar.c A otherdir / docs / baz.doc . . .

190 Referencia completa de Subversion

Nombre
svn blame - Muestra autor y la informacin de la revisin en lnea de los archivos o URLs especificados.

Sinopsis
svn OBJETIVO culpa [@ REV] ...

Descripcin
Mostrar informacin de autor y la revisin en lnea de los archivos o URLs especificados. Cada lnea de texto es Annot-ATED al principio con el autor (nombre de usuario) y el nmero de revisin del ltimo cambio en esa lnea.

Nombres alternativos
alabanza, anotar, ann

Cambios
Nada

Accede al repositorio
S

Switches
Revision (-r) REV USUARIO nombre de usuario Password PASS No-auth-cache Non-interactive Config-dir DIR Verbose

Ejemplos
Si quieres ver la culpa fuente anotado readme.txt en su repositorio de pruebas: $ Svn culpa http://svn.red-bean.com/repos/test/readme.txt 3 Sally Este es un archivo README. 5 harry Usted debe leer esto.

191 Referencia completa de Subversion

Nombre
svn cat - Vuelca el contenido de los archivos o URLs especificados.

Sinopsis
svn cat OBJETIVO [@ REV] ...

Descripcin
Salida de los contenidos de los ficheros o URLs especificados. Para obtener una lista de los contenidos de directorios, vea svn list.

Nombres alternativos
Ninguno

Cambios
Nada

Accede al repositorio
S

Switches
Revision (-r) REV USUARIO nombre de usuario Password PASS No-auth-cache Non-interactive Config-dir DIR

Ejemplos
Si desea ver readme.txt en su repositorio sin echarle un vistazo: $ Svn cat http://svn.red-

bean.com/repos/test/readme.txt Este es un archivo README. Usted debe leer esto.

Pu nta
Si su copia de trabajo no est actualizado (o tiene modificaciones locales) y desea ver la revisin HEAD de un fichero en su copia de trabajo, svn cat obtendr automticamente la revisin HEAD cuando se le proporciona un camino: $ Cat foo.c Este archivo est en mi copia de trabajo local y tiene cambios que he hecho.

192 Referencia completa de Subversion $ Svn cat foo.c ltima revisin fresca desde el repositorio!

193 Referencia completa de Subversion

Nom bre
svn checkout - Echa un vistazo a una copia de trabajo de un repositorio.

Sinopsis
svn checkout [Ruta] URL [@ REV] ...

Descripcin
Echa un vistazo a una copia de trabajo de un repositorio. Si se omite PATH, el nombre base de la URL se utilizar como destino. Si se dan varios URLs cada una ser obtenida en un subdirectorio de PATH, con el nombre del subdirectorio es el nombre base de la URL.

Nombres alternativos
co

Cambios
Crea una trabajo. copia de

Accede al repositorio
S

Switches
- Revision (-r) REV - Quiet (-q) - Non-recursive (-N) USUARIO nombre de usuario - Password PASS - No-auth-cache - Non-interactive - Ignore-externals - Config-dir DIR

Ejemplos
Echa un vistazo a una copia de trabajo en un directorio llamado mo: $ Svn checkout file :/ / / tmp / repos / prueba mina una mina / a Una mina / b Dejamos revisin 2. $ Ls minas Echa un vistazo a 2 directorios diferentes en dos copias de trabajo separadas: $ Svn checkout file :/ / / tmp / repos / file :/ test / / tmp / repos / quiz

194 Referencia completa de Subversion Una prueba de / a Un test / b Dejamos revisin 2. Un concurso / l Un concurso / m Dejamos revisin 2. $ Ls concurso de ensayo Echa un vistazo a 2 directorios diferentes en dos copias de trabajo separadas, pero colocar tanto en un directorio llamado trabajo-copias: $ Svn checkout file :/ / / tmp / repos / file :/ test / / tmp / repos / concurso de trabajo-copia A working-copies/test/a A working-copies/test/b check out revisin 2. A working-copies/quiz/l A working-copies/quiz/m check out revisin 2. $ Ls trabajo-copias Si se interrumpe una salida (o cualquier otra cosa interrumpe su comprobacin como la prdida de la

conectividad, etc), puede continuarla ya sea ejecutando el comando checkout idntico nuevo, o mediante la actualizacin de la copia de trabajo incompleta: $ Svn checkout :/ / / tmp / repos / test test file A prueba de / a Un test / b ^ C svn: La operacin fue interrumpida svn: SIGINT atrapados $ Svn checkout :/ / / tmp / repos / test test file A prueba / c Un test / d ^ C svn: La operacin fue interrumpida svn: SIGINT atrapados $ Cd prueba $ Svn Actualiza Una prueba / e Un test / f Se ha actualizado a la revisin 3.

195 Referencia completa de Subversion

Nom bre
svn cleanup - Limpia recursivamente la copia de trabajo.

Sinopsis
svn ...] cleanup [RUTA

Descripcin
Limpia recursivamente la copia de trabajo, eliminando los bloqueos copia de trabajo y las operaciones sin terminar la reanudacin. Si alguna vez tienes la "copia de trabajo bloqueada" error, ejecute este comando para eliminar los bloqueos y conseguir que su copia de trabajo a un estado usable de nuevo. Si, por alguna razn, un svn update falla debido a un problema al ejecutar un programa externo de diferencias (por ejemplo, usuario-venta o fallo en la red), pase la opcin - diff3-cmd para que la limpieza se complete cualquier fusin con su programa diff externo. Tambin puede especificar cualquier directorio de configuracin con el parmetro - config-dir, pero debera necesitar estos parmetros con extrema infrecuencia.

Nombres alternativos
Ning uno

Cambios
Copia trabajo de

Accede al repositorio

No

Switches
- Diff3-cmd CMD - Config-dir DIR

Ejemplos
Bueno, no hay mucho que los ejemplos aqu como svn cleanup no genera ninguna salida. Si pasa ninguna ruta, se utiliza ".". $ Svn cleanup $ Svn cleanup / path / to / copia de trabajo

196 Referencia completa de Subversion

Nom bre
svn commit - Enva cambios desde su copia de trabajo al repositorio.

Sinopsis
svn ...] commit [RUTA

Descripcin
Enve los cambios de su copia de trabajo al repositorio. Si no se proporciona un mensaje de registro con su compromiso con las opciones - file o - mensaje, svn abrir su editor para que com-plantean un mensaje de confirmacin. Vase el editor-cmdseccin en la seccin llamada "Config". svn commitenviar tokens de bloqueos que se han encontrado y las cerraduras de liberacin en todas las rutas cometidos (recursivamente) a menos que - No-desbloquearse pasa.

Pu nta
Si usted comienza un envo y Subversion lanza su editor para componer el mensaje de confirmacin, usted todava puede abortar sin enviar los cambios. Si usted desea cancelar su com-mit, simplemente quitar su editor sin salvar el mensaje de cambios y Subversion le pedir que abortar el envo, siguen sin mensaje o editar el mensaje de nuevo.

Nombres alternativos
ci (abreviatura de "check in", no "co", que es la abreviatura de "checkout")

Cambios

La copia de repositorio

trabajo,

Accede al repositorio
S

Switches
- Mensaje de texto (-m) - File (-F) FILE - Quiet (-q) Nodesbloquear - Non-recursive (-N) - Targets FILENAME - Force-log USUARIO nombre de usuario - Password PASS - No-auth-cache - Non-interactive - Encoding ENC - Config-dir DIR

Ejemplos
197 Referencia completa de Subversion Cometer una simple modificacin de un archivo con el mensaje de confirmacin en la lnea de comando y el objetivo implcito del directorio actual ("."): $ Svn commit-m "Se aadi la seccin Cmo." Envo de un Transmisin de datos de archivo. Comprometidos con la revisin 3. Confirmacin de la modificacin en el archivo foo.c (especificado explcitamente en la lnea de comandos) con el mensaje de confirmacin en un archivo con el nombre de error: $ Svn commit-F msj foo.c Envo foo.c Transmisin de datos de archivo. Committed revision 5. Si desea utilizar un archivo que est bajo el control de versiones para el mensaje del con - file, necesita pasar la opcin - force-log: $ Svn commit - Archivo file_under_vc.txt foo.c svn: El archivo de mensajes de registro se encuentra bajo control de versiones svn: archivo de mensajes de registro es un archivo versionado, use 'force-log' para invalidar $ Svn commit - force-log - archivo file_under_vc.txt foo.c Envo foo.c Transmisin de datos de archivo. Comprometidos con la revisin 6. Cometer un archivo programado para su eliminacin: $ Svn commit-m "eliminado el archivo 'c'." Eliminacin de c

Committed revision 7.

198 Referencia completa de Subversion

Nombre
svn copy - Copia un archivo o directorio en una copia de trabajo o en el repositorio.

Sinopsis
svn copy SRC DST

Descripcin
Copiar un archivo de una copia de trabajo o en el repositorio. SRC y DST pueden ser ambos o bien una copia de trabajo ruta o URL (WC): WC -> WC Copia y programar un artculo para la adicin (con historia). WC -> URL Comprometerse inmediatamente una copia de WC a URL. URL -> WC Echa un vistazo a URL en WC, y lo marcar para su adicin. URL -> URL Copia completa del servidor. Esto se utiliza generalmente en rama y la etiqueta.

Nota
Slo puede copiar archivos dentro de un nico repositorio. Subversion no soporta copias entre repositorios.

Nombres alternativos
cp

Cambios
Repositorio si el destino es una URL. Copia de trabajo si el destino es una ruta WC.

Accede al repositorio
Si el origen o el destino se encuentra en el repositorio, o si es necesario para buscar el nmero de revisin de origen.

Switches
- Mensaje de texto (-m) - File (-F) FILE

- Revision (-r) REV - Quiet (-q) - USUARIO nombre de usuario - Password PASS 199 Referencia completa de Subversion No-auth-cache Non-interactive Force-log EDITOR editor-cmd Encoding ENC Config-dir DIR

Ejemplos
Copiar un elemento en su copia de trabajo local (nicamente programa la copia-nada ocurre en el repositorio hasta que enve los cambios): $ A $ A Svn copy foo.txt bar.txt bar.txt Svn status bar.txt +

Copiar un elemento en su copia de trabajo a una URL en el repositorio (inmediata, por lo que debe de suministro el mensaje del informe): $ Svn copy near.txt file :/ / / tmp / repos / test / largo away.txt-m "copia remota". Committed revision 8. Copiar un elemento desde el repositorio a su copia de trabajo local (nicamente programa la copia-nada ocurre en el repositorio hasta que enve los cambios):

Punta
Este es el mtodo recomendado para recuperar un fichero borrado en su repositorio! $ Svn copy file :/ / / tmp / repos / test / lejano casi aqu A corto aqu Y finalmente, una copia entre dos URLs: $ Svn copy file :/ / / tmp / repos / test / lejano file :/ / / tmp / repos / test / ms-all-m "r Committed revision 9.

Punta
Esta es la forma ms fcil de "etiquetar" una revisin en su repositorio-simplemente haga svn copy de esa revisin (por lo general la cabeza) en el directorio de las etiquetas. $ Svn copy file :/ / / tmp / repos / prueba / trunk file :/ / /

tmp/repos/test/tags/0.6.32-prerele commit de la revisin 12.

200 Referencia completa de Subversion Y no se preocupe si se olvid de etiquetas siempre se puede especificar una revisin anterior y etiquetarla en cualquier momento: $ Svn copy-r 11 file :/ / / tmp / repos / prueba / trunk file :/ / / tmp/repos/test/tags/0.6.32-p Committed revision 13.

201 Referencia completa de Subversion

Nom bre
svn delete - Eliminar un elemento de una copia de trabajo o en el repositorio.

Sinopsis
svn eliminar CAMINO ... svn eliminar URL ...

Descripcin
Los productos especificados por PATH estn programados para su eliminacin en el siguiente commit. Los archivos (y directorios que no se han cometido) se retiran inmediatamente de la copia de trabajo. El comando no se volver a mover los tems no versionados o modificados, utilice la opcin - la fuerza para cambiar este comportamiento. Materiales especificados en el URL se eliminan del repositorio de manera inmediata. Mltiples URLs se comprometen atmicamente.

Nombres alternativos
del, remove, rm

Cambios
Copia de trabajo si se opera sobre ficheros, repositorio si opera sobre URLs

Accede al repositorio
Slo si opera sobre URLs

Switches
- Force - Force-log - Mensaje de texto (-m) - File (-F) FILE - Quiet (-q) - Targets FILENAME USUARIO nombre de usuario - Password PASS - No-auth-cache - Non-interactive - EDITOR editor-cmd - Encoding ENC - Config-dir DIR

Ejemplos
Usando svn para borrar un archivo desde su copia de trabajo meramente lo programa que desea eliminar. Cuando te comprometes, el archivo se elimina del repositorio.

202 Referencia completa de Subversion $ Svn delete miarchivo miarchivo D $ Svn commit-m "elimin el archivo" miarchivo '. " Eliminacin mifichero Transmisin de datos de archivo. Committed revision 14. Eliminacin de una URL, sin embargo, es inmediato, por lo que tenga que proporcionar un mensaje de registro: File :/ "'yourfile' Borrar archivo" $ svn delete-m / / tmp / repos / test / yourfile Committed revision 15. He aqu un ejemplo de cmo forzar la eliminacin de un archivo que tiene mods locales: $ Svn eliminar el exceso de all svn: Intentar operacin restringida modificado recursos svn: Use - force para invalidar esta restriccin svn: "sobre-no 'tiene modificaciones locales $ Svn delete - fuerza excesiva no d excesiva no

203 Referencia completa de Subversion

Nom bre
svn diff - Muestra las diferencias entre dos caminos.

Sinopsis
diff [-r N [: M]] [OBJETIVO [@ REV] ...] diff [-r N [: M]] - old OLD-TGT [@ OLDREV] [- new NEW-TGT [@ NEWREV]] [RUTA ...] OLD diff-URL [@ OLDREV] NEW-URL [ @ NEWREV]

Descripcin
Muestra las diferencias entre dos caminos. Las tres maneras diferentes que puede utilizar svn diff son: svn diff [-r N [: M]] [- old OLD-TGT] [- new NEW-TGT] [RUTA ...]muestra las diferencias entre losOLD-TGTyNEW-TGT. SiPATHs se les da, se les trata como en relacin conOLD-TGTyNEW-TGT y la salida se limita a las diferencias en slo las rutas.OLD-TGTyNEW-TGTpueden estar trabajando rutas de copia oURL [@ REV]. OLD-TGTpor defecto el directorio de trabajo actual yNEW-TGTpor defectoOLD-TGT. Npor defectoBASEo, siOLD-TGTes un URL, paraHEAD. Mpor defecto la versin actual de trabajo o, en suNEW-TGTes un URL, para HEAD.svn diff-r N establece la revisin de OLDTGTa N,svn diff-r N: M Tambin establece la revisin de NEW-TGTa M. svn diff-r N: M URL es la abreviatura de svn diff-r N: M - old = URL - new = URL. svn diff [-r N [: M]] URL1 [@ N] URL2 [@ M] es la abreviatura de svn diff [-r N [: M]] - edad = URL1 -New = URL2. Si TARGET es una URL, entonces las revisiones N y M pueden ser proporcionadas va - revision o usando la notacin "@" como se describi anteriormente. Si TARGET es una copia de trabajo, entonces el parmetro - revision significa: - Revision N: M El servidor compara OBJETIVO N @y OBJETIVO @ M. - Revision N El cliente compara OBJETIVO @ N contra la copia de trabajo. (No - revision) El cliente compara base y copias de trabajo de TARGET. Si se utiliza la sintaxis alternativa, el servidor compara URL1 y URL2 en las revisiones N y M, respectivamente. Si N o M se omiten, se tomar el valor HEAD. Por defecto, svn diff ignora la ascendencia de los ficheros y meramente compara el contenido de los dos archivos que se comparan. Si usa - notice-ancestry, la ascendencia de las rutas en cuestin se tendr en cuenta al comparar las revisiones (esto es, si ejecuta svn diff sobre dos ficheros de contenido idntico pero diferente ascendencia ver el contenido entero de la archivo como de haber sido eliminado y aadido de nuevo). 204 Referencia completa de Subversion

Nombres alternativos

di

Cambios
Nada

Accede al repositorio
Para obtener las diferencias contra cualquier cosa menos la revisin BASE de su copia de trabajo

Switches
Revision (-r) REV Viejo, BLANCO New-BLANCO Extensiones (-x) "ARGS" Non-recursive (-N) Diff-cmd CMD Notice-ancestry USUARIO nombre de usuario Password PASS No-auth-cache Non-interactive No-diff-deleted Config-dir DIR

Ejemplos
Comparar BASE y su copia de trabajo (uno de los usos ms populares de svn diff): $ Svn diff ndice Committers: Committers ================================================== ================= --- Committers (revisin 4404) + + + Committers (copia de trabajo) Ver cmo las modificaciones de su copia de trabajo comparan contra una versin anterior: $ Svn diff-r 3900 Committers ndice: Committers ================================================== ================= --- Committers (revisin 3900) + + + Committers (copia de trabajo) Comparar la revisin 3000 con la 3500 usando la sintaxis "@": $ Svn diff http://svn.collab.net/repos/svn/trunk/COMMITTERS @ 3000 http://svn.collab ndice: Committers ================================================== ================= --- Committers (revisin 3000) + + + Committers (revisin 3500) ...

205 Referencia completa de Subversion Comparar la revisin 3000 con la 3500 usando la notacin de rango (que slo pasa una URL en este caso): $ Svn diff-r 3000:3500 http://svn.collab.net/repos/svn/trunk/COMMITTERS ndice: Committers ================================================== ================= --- Committers (revisin 3000) + + + Committers (revisin 3500) Comparar la revisin 3000 con la 3500 de todos los archivos de tronco usando la notacin de rango:

$ Svn diff-r 3000:3500 http://svn.collab.net/repos/svn/trunk Comparar la revisin 3000 con la 3500 de los tres archivos en tronco con la notacin de rango: $ Svn diff-r 3000:3500 - viejo http://svn.collab.net/repos/svn/trunk Committers REA Si usted tiene una copia de trabajo, puede obtener las diferencias sin teclear largas URLs: $ Svn diff-r 3000:3500 Committers ndice: Committers ================================================== ================= --- Committers (revisin 3000) + + + Committers (revisin 3500) Usa - diff-cmd CMD-x para pasar argumentos directamente al programa diff externo $ Svn diff - diff-cmd / usr / bin / diff-x "-i-b" Committers ndice: Committers ================================================== ================= 0A1, 2 > Esta es una prueba >

206 Referencia completa de Subversion

Nom bre
SVN Exportar - Exportar un rbol de directorios limpio.

Sinopsis
exportacin svn [-r REV] URL [@ PEGREV] [ruta] svn export [-r REV] ruta1 [@ PEGREV] [RUTA2]

Descripcin
La primera forma exporta un rbol de directorios limpio desde el repositorio especificado por URL, en la revisin REV si se da, de lo contrario HEAD, en PATH. Si se omite PATH, el ltimo componente de la URL se utiliza para el nombre del directorio local. La segunda forma exporta un rbol de directorios limpio desde la copia de trabajo especificado por ruta1 en RUTA2. Todos los cambios locales sern preservados, pero los archivos que no estn bajo el control de versiones no sern copiados.

Nombres alternativos
Ning uno

Cambios
Disco local

Accede al repositorio
Slo si se exporta desde una URL

Switches
- Revision (-r) REV - Quiet (-q) - Force USUARIO nombre de usuario - Password PASS - No-auth-cache - Non-interactive - Non-recursive - Config-dir DIR - Nativo-eol EOL - Ignore-externals

Ejemplos
Exportar desde su copia de trabajo (no se muestra cada fichero y directorio): $ Svn export a-wc miexportacin exportacin completa.

207 Referencia completa de Subversion Exportar desde un repositorio (muestra todos los archivos y directorios): $ Svn :/ archivo de exportacin / / tmp / repos mi-exportacin A my-export/test A my-export/quiz . . . Exportados revisin 15. Al rodar paquetes de liberacin del sistema operativo-especficos, puede ser til para exportar un rbol que utiliza un carcter EOL especfico para finales de lnea. La opcin - nativo-eol va a hacer esto, pero slo afecta a los archivos que tienen svn: eol-style = propiedades nativas unidos a ellos. Por ejemplo, para exportar un rbol con todos los finales de lnea CRLF (posiblemente para una distribucin de archivos de Windows zip.): $ Svn export file :/ / tmp / repos mi-export - CRLF nativos eol A my-export/test A my-export/quiz . . . Exportados revisin 15.

208 Referencia completa de Subversion

Nombre
svn asistencia - Ayuda!

Sinopsis
svn help [SUBCOMMAND ...]

Descripcin
Esta es su mejor amigo cuando usted est utilizando Subversion y este libro no est a nuestro alcance!

Nombres alternativos
?, H

Cambios
Nada

Accede al repositorio
No

Switches
- Version - Quiet (-q)

209 Referencia completa de Subversion

Nombre
svn import - Cometer un fichero no versionado o rbol en el repositorio.

Sinopsis
svn import [RUTA] URL

Descripcin
Recursiva los cambios de PATH a URL. Si se omite PATH "." Se supone. Directorios padre son creados en el repositorio segn sea necesario.

Nombres alternativos
Ninguno

Cambios

Repositorio

Accede al repositorio
S

Switches
Mensaje de texto (-m) File (-F) FILE Quiet (-q) Non-recursive (-N) USUARIO nombre de usuario Password PASS No-auth-cache Non-interactive Force-log EDITOR editor-cmd Encoding ENC Config-dir DIR Auto-props No-auto-props Ignore-externals

Ejemplos
Esto importa el directorio miproyecto local en la raz de su repositorio: $ Svn import-m "importar Nuevo" miproyecto http://svn.redbean.com/repos/test Adicin miproyecto / sample.txt ... Transmisin de datos de archivo ......... Committed revision 16.

210 Referencia completa de Subversion Esto importa el miproyecto directorio local en trunk / vendors de su repositorio. El directorio trunk / misc no necesitan existir antes de importar en que-svn import crear de forma recursiva directorios para usted: $ Svn import-m "Nueva importacin" miproyecto \ http://svn.redbean.com/repos/test/trunk/misc/myproj Adicin miproyecto / sample.txt ... Transmisin de datos de archivo ......... Committed revision 19. Despus de importar los datos, tenga en cuenta que el rbol original no est bajo control de versiones. Para empezar a trabajar, usted todava necesita hacer svn checkout una copia de trabajo fresca del rbol.

211 Referencia completa de Subversion

Nombre
svn info - Muestra informacin acerca de un elemento local o remoto.

Sinopsis
svn info [OBJETIVO ...]

Descripcin
Imprimir la informacin sobre los dos caminos y URLs copia de trabajo, entre ellos: Camino Nombre URL Revisin Raz del repositorio Repositorio UUID Tipo de nodo ltimo cambio realizado Autor ltima revisin cambiado ltimo cambio realizado Fecha Texto Actualizado Propiedades ltima actualizacin Checksum Lock Token Bloquee Propietario Bloquee Fecha de creacin

Nombres alternativos
Ninguno

Cambios
Nada

Accede al repositorio
212 Referencia completa de Subversion Slo si opera sobre URLs

Switches
Targets FILENAME Recursive (-R) Revision (-r) Config-dir DIR

Ejemplos
svn infole mostrar toda la informacin de utilidad que tiene para los elementos en su copia de trabajo. Se mostrar la informacin de los archivos: $ Svn info foo.c Path: Nombre foo.c: foo.c URL: http://svn.red-bean.com/repos/test/foo.c Repositorio Root: http://svn.red-bean.com/repos/test Repositorio UUID: 5e7d134a-54FB-0310-BD04b611643e5c25 Revision: 4417 Nodo Tipo: Programa archivo: normales ltimo cambio Autor: Sally Last Changed Rev: 20 Fecha de ltima modificacin: 2003-01-13 16:43:13 -0600 (Mon, 13 Jan 2003) Texto ltima actualizacin: 2003-01-16 21:18:16 -0600 (Jue, 16 de enero de 2003) Propiedades ltima actualizacin: 2003-01-13 21:50:19 -0600 (Mon, 13 Jan 2003) Checksum: / 3L38YwzhT93BWvgpdF6Zw == Tambin mostrar la informacin para los directorios: $ Svn info vendedores Path: vendedores URL: http://svn.red-bean.com/repos/test/vendors Repositorio Root: http://svn.red-bean.com/repos/test Repositorio UUID: 5e7d134a-54FB-0310-BD04b611643e5c25 Revisin: 19 Nodo Tipo: Programa de directorios: lo normal ltimo cambio Autor: harry Last Changed Rev: 19 Fecha de ltima modificacin: 2003-01-16 23:21:19 -0600 (Jue, 16 de enero de 2003) svn infoTambin acta sobre las URL (tambin en cuenta que el archivo readme.doc en este ejemplo est bloqueado, por lo que bloqueo tambin se proporciona in-formacin): $ Svn info http://svn.redbean.com/repos/test/readme.doc Ruta de acceso: readme.doc Nombre: readme.doc URL: http://svn.red-bean.com/repos/test/readme.doc Repositorio Root: http://svn.red-bean.com/repos/test Repositorio UUID: 5e7d134a-54FB-0310-BD04b611643e5c25 Revisin: 1 Nodo Tipo: archivo 213 Referencia completa de Subversion Horario: normal, ltimo cambio Autor: Sally Last Changed Rev: 42 Fecha de ltima modificacin: 2003-01-14 23:21:19 -0600 (Tue, 14 Jan 2003) Texto ltima actualizacin: 2003-01-14 23:21:19 -0600 (Tue, 14 Jan 2003) Checksum: d41d8cd98f00b204e9800998ecf8427e Lock Token: opaquelocktoken: 14011d4b-54FB-0310-8541dbd16bd471b2 Lock Propietario: harry

Bloquee Creado: 2003-01-15 17:35:12 -0600 (mircoles, 15 de enero de 2003)

214 Referencia completa de Subversion

Nombre
svn list - Lista de entradas de directorio en el repositorio.

Sinopsis
svn list [OBJETIVO [@ REV] ...]

Descripcin
Citar cada archivo de destino y el contenido de cada directorio de destino, tal como existen en el repositorio. Si OBJETIVOes una copia de trabajo, se utilizar la URL del repositorio correspondiente. El OBJETIVO por defecto es ".", Es decir, la URL del repositorio del directorio actual copia de trabajo. Con - verbose, los campos siguientes muestran el estado de la mquina: Nmero de revisin del ltimo commit Autor del ltimo commit Tamao (en bytes) Fecha y hora de la ltima confirmacin

Con - xml, se encuentra en formato XML (con una cabecera y un elemento de documento que encierra a menos -Incrementalestambin es especificado). Toda la informacin est presente, la opcin - verbose no se acep-tado.

Nombres alternativos
ls

Cambios
Nada

Accede al repositorio
S

Switches
Revision (-r) REV Verbose (-v) Recursive (-R) Incremento Xml USUARIO nombre de usuario Password PASS No-auth-cache Non-interactive

- Config-dir DIR 215 Referencia completa de Subversion

Ejemplos
svn listEs muy til si desea ver qu archivos tiene un repositorio sin necesidad de descargar una copia de trabajo: $ Svn list http://svn.redbean.com/repos/test/support README.txt INSTALAR ejemplos / ... Usted puede pasar la opcin - verbose para obtener informacin adicional, algo as como el comando UNIX ls-l: Lista $ 16 27 24 svn - verbose file :/ / / tmp / repos salida 28361 16 de enero 23:18 README.txt Sally 0 18 de enero 15:27 INSTALL harry 18 de enero ejemplos 11:27 /

Para ms detalles, consulte la seccin "Lista de svn".

216 Referencia completa de Subversion

Nombre
svn lock - Bloquea rutas de la copia de trabajo o URLs en el repositorio, por lo que ningn otro usuario puede confirmar los cambios a los mismos.

Sinopsis
svn lock OBJETIVO ...

Descripcin
Bloquear cada TARGET. Si cualquier destino ya est bloqueado por otro usuario, imprimir un aviso y continuar el bloqueo del resto de los objetivos. Use - force para robar un bloqueo de otro usuario o la copia de trabajo.

Nombres alternativos
Ninguno

Cambios
Trabajo de copia, repositorio

Accede al repositorio
S

Switches

Objetivos ARG Message (-m) ARG File (-F) ARG Force-log Codificacin de ARG Nombre de usuario ARG Contrasea de ARG No-auth-cache Non-interactive ARG config-dir Force

Ejemplos
Bloquee dos archivos en su copia de trabajo: $ Svn lock tree.jpg house.jpg 'tree.jpg' bloqueado por el usuario 'harry'. 'House.jpg' bloqueado por el usuario 'harry'. Bloquear un fichero en su copia de trabajo que est actualmente bloqueado por otro usuario: $ Svn lock tree.jpg

217 Referencia completa de Subversion svn: aviso: Camino '/ tree.jpg ya est bloqueado por el usuario' Harry \ sistema de archivos '/ svn / repos / db' $ Svn lock - fuerza foo 'Tree.jpg' bloqueado por el usuario 'Sally'. Bloquear un archivo sin una copia de trabajo: $ Svn lock http://svn.redbean.com/repos/test/tree.jpg 'Tree.jpg' bloqueado por el usuario 'Sally'. Para ms detalles, consulte la seccin "Bloqueo".

218 Referencia completa de Subversion

Nom bre
svn log - Muestra los mensajes de confirmacin de registro.

Sinopsis
svn log [ruta] svn log ...] URL [RUTA

Descripcin
El destino predeterminado es la ruta de acceso del directorio actual. Si no se proporcionan argumentos, svn log muestra los mensajes de registro de todos los archivos y directorios dentro de (e incluyendo) el directorio de trabajo actual de su copia de trabajo. Puede refinar los resultados especificando una ruta, una o ms revisiones, o cualquier combinacin de los dos. El rango de revisin por defecto para una ruta local es BASE: 1. Si especifica una URL sola, entonces imprime los mensajes de registro de todo lo que la URL contiene. Si aade rutas tras la URL, slo se imprimirn los mensajes de esas rutas bajo esa URL. El rango de revisin por defecto de una URL es CABEZA: 1. Con - verbose, svn log tambin imprimir todas las rutas afectadas por cada mensaje de registro. Con quiet, svn log no se imprime el cuerpo del mensaje de registro (que sea compatible con verbose). Cada mensaje de registro se imprime slo una vez, incluso si se pidi explcitamente a ms de uno de los caminos afectados por la misma revisin. Sigue la historia de copia por defecto. Use - stop-on-copy para desactivar este comporta-vior, que puede ser til para determinar los puntos de ramificacin.

Nombres alternativos
Ning uno

Cambios
Nada

Accede al repositorio
S

Switches
- Revision (-r) REV - Quiet (-q) - Verbose (-v) - Targets FILENAME - Stop-on-copy - Incremento Lmite NUM - Xml USUARIO nombre de usuario - Password PASS - No-auth-cache - Non-interactive

219 Referencia completa de Subversion - Config-dir DIR

Ejemplos
Usted puede ver los mensajes de registro para todas las rutas que fueron modificadas en su copia local ejecutando svn log

desde la parte superior: $ Svn log -------------------------------------------------- --------------------r20 | harry | 2003-01-17 22:56:19 -0600 (viernes, 17 de enero de 2003) | 1 line Tweak. -------------------------------------------------- --------------------r17 | Sally | 2003-01-16 23:21:19 -0600 (Thu, 16 Jan 2003) | 2 lneas ... Examinar todos los mensajes de registro de un archivo en particular en su copia de trabajo: $ Svn log foo.c -------------------------------------------------- --------------------r32 | salida | 2003-01-13 00:43:13 -0600 (Mon, 13 Jan 2003) | 1 line Aadido define. -------------------------------------------------- --------------------R28 | Sally | 2003-01-07 21:48:33 -0600 (mar, 07 de enero de 2003) | 3 lneas ... Si usted no tiene una copia de trabajo a mano, puede iniciar una URL: $ Svn log http://svn.red-bean.com/repos/test/foo.c -------------------------------------------------- --------------------r32 | salida | 2003-01-13 00:43:13 -0600 (Mon, 13 Jan 2003) | 1 line Aadido define. -------------------------------------------------- --------------------R28 | Sally | 2003-01-07 21:48:33 -0600 (mar, 07 de enero de 2003) | 3 lneas ... Si quiere usar varias rutas distintas bajo una misma URL, puede utilizar la direccin URL [RUTA ...] sintaxis. $ Http://svn.red-bean.com/repos/test/ svn log foo.c bar.c -------------------------------------------------- --------------------r32 | salida | 2003-01-13 00:43:13 -0600 (Mon, 13 Jan 2003) | 1 line Aadido define. -------------------------------------------------- --------------------r31 | harry | 2003-01-10 12:25:08 -0600 (viernes, 10 de enero de 2003) | 1 line Aadido nuevo bar.c archivo -------------------------------------------------- --------------------R28 | Sally | 2003-01-07 21:48:33 -0600 (mar, 07 de enero de 2003) | 3 lneas ... Cuando usted est concatenando los resultados de varias llamadas a la orden de registro, es posible que desee utilizar el -

220

Referencia completa de Subversion -Incrementalescambiar. svn log normalmente imprime una lnea de puntos en el comienzo de un mensaje de registro, despus de cada mensaje de registro posterior, y siguiendo el mensaje de registro final. Si ejecuta svn log sobre una serie de dos revisiones, se llega a la siguiente: $ Svn log-r 14:15 -------------------------------------------------- ---------------------r14 | ... -------------------------------------------------- ---------------------r15 | ... ----------------------------------------------------------------------

Sin embargo, si usted quiere recoger 2 mensajes de registro no secuenciales en un archivo, puede hacer algo como esto: $ Svn log-r 14> mylog $ Svn log-r 19 >> mylog $ Svn log-r 27 >> mylog $ Cat mylog -------------------------------------------------- ---------------------r14 | ... -------------------------------------------------- ---------------------------------------------------------------------- ---------------------r19 | ... -------------------------------------------------- ---------------------------------------------------------------------- ---------------------r27 | ... ----------------------------------------------------------------------

Usted puede evitar el desorden de las lneas de guiones en la salida con el interruptor de incremento: $ Svn log - incremental r 14> mylog $ Svn log - incremental r 19 >> mylog $ Svn log - incremental r 27 >> mylog $ Cat mylog -------------------------------------------------- ---------------------r14 | ... -------------------------------------------------- ---------------------r19 | ... -------------------------------------------------- ---------------------r27 | ... El parmetro - incrementales proporciona control de salida similares al utilizar el parmetro xml.

Punta
Si ejecuta svn log sobre una ruta especfica e indica una revisin especfica y obtener ningn resultado en absoluto $ Svn log-r 20 http://svn.red-bean.com/untouched.txt

-------------------------------------------------- --------------------221 Referencia completa de Subversion Eso slo significa que el camino no se modific en esa revisin. Si inicia una sesin desde la parte superior del depsito, o sabe qu fichero cambi en esa revisin, se puede especificar de forma explcita: $ Svn log-r 20 touched.txt -------------------------------------------------- --------------------r20 | salida | 2003-01-17 22:56:19 -0600 (viernes, 17 de enero de 2003) | 1 line Hizo un cambio. -------------------------------------------------- ---------------------

222 Referencia completa de Subversion

Nom bre
svn merge - Aplica las diferencias entre dos fuentes a una ruta de copia de trabajo.

Sinopsis
svn merge sourceURL1 [@ N] sourceURL2 [@ M] [WCPATH] svn merge sourceWCPATH1 @ N sourceWCPATH2 @ M [WCPATH] svn merge-r N: M FUENTE [@ REV] [WCPATH]

Descripcin
En la primera y segunda formas, las rutas de origen (URLs en la primera forma, trabajando rutas de la copia en el segundo) se especifican en las revisiones N y M. Estas son las dos fuentes que se comparan. Las revisiones de la culpa a la cabeza si se omite. En la tercera forma, FUENTE puede ser un elemento de su copia de trabajo o URL, en cuyo caso se utiliza el URL correspondiente. Esta direccin URL, en las revisiones N y M, define las dos fuentes que deben compararse. WCPATHes la copia de trabajo que recibir los cambios. "." Si se omite WCPATH, un valor por defecto de se supone, a menos que las fuentes tengan nombres base idnticos que coinciden con un archivo dentro ".": En este caso, las diferencias se aplicarn a ese archivo. A diferencia de svn diff, el comando de fusionado toma la ascendencia de un archivo en consideracin al

realizar una operacin de combinacin. Esto es muy importante cuando se est fusionando cambios de una rama a otra y que ha cambiado el nombre de un archivo en una rama, pero no a la inversa.

Nombres alternativos
Ning uno

Cambios
Copia trabajo de

Accede al repositorio
Slo si se trabaja con direcciones URL

Switches
- Revision (-r) REV - Non-recursive (-N) - Quiet (-q) - Force - Dry-run - Diff3-cmd CMD - Ignore-ancestry USUARIO nombre de usuario - Password PASS - No-auth-cache 223 Referencia completa de Subversion - Non-interactive - Config-dir DIR

Ejemplos
Fusionar una rama en el tronco (asumiendo que usted tiene una copia de trabajo del tronco, y que la rama fue creada en la revisin 250): $ Svn merge-r 250: http://svn.red-bean.com/repos/branches/my-branch CABEZA U miproyecto / tiny.txt U miproyecto / thhgttg.txt U miproyecto / win.txt U miproyecto / flo.txt Si ramificado en la revisin 23, y quiere fusionar los cambios del tronco en ella, puede hacerlo desde dentro de la copia local de la rama: $ Svn merge-r 23:30 file :/ / / tmp / repositorio / trunk / vendors U miproyecto / thhgttg.txt ... Para combinar los cambios en un solo archivo: $ Cd miproyecto $ Svn merge-r 30:31 thhgttg.txt U thhgttg.txt

224 Referencia completa de Subversion

Nom bre
svn mkdir - Crea un nuevo directorio bajo control de versiones.

Sinopsis
svn mkdir CAMINO ... svn mkdir URL ...

Descripcin
Crear un directorio con un nombre dado por el componente final de la ruta o URL. Un directorio especificado por una copia de trabajo est programado para la adicin en la copia de trabajo. Un directorio especificado por una URL es creado en el repositorio de manera inmediata. URLs de directorio mltiple estn comprometidos atmico aliado. En ambos casos, todos los directorios intermedios deben existir.

Nombres alternativos
Ning uno

Cambios
La copia de trabajo, repositorio si opera sobre una URL

Accede al repositorio
Slo si opera sobre una URL

Switches
- Mensaje de texto (-m) - File (-F) FILE - Quiet (-q) USUARIO nombre de usuario - Password PASS - No-auth-cache - Non-interactive - EDITOR editor-cmd - Encoding ENC - Force-log - Config-dir DIR

Ejemplos
Cree un directorio en su copia de trabajo: $ Svn mkdir newdir A newdir Crea uno en el repositorio (commit inmediato, por lo que se requiere un mensaje de registro):

225 Referencia completa de Subversion $ Svn mkdir-m "Hacer una nueva dir." http://svn.redbean.com/repos/newdir Committed revision 26.

226 Referencia completa de Subversion

Nombre
svn move - Mover un archivo o directorio.

Sinopsis
svn move SRC DST

Descripcin
Este comando mueve un fichero o directorio en su copia de trabajo o en el repositorio.

Pu nta
Este comando es equivalente a un svn copy seguido de svn delete.

Not a
Subversion no permite cambiar entre las copias de trabajo y URLs. Adems, slo se puede mover archivos dentro de un nico repositorio-Subversion no soporta movimientos entrerepositorio. WC -> WC Mover y programar un archivo o directorio para la adicin (con historia). URL -> URL

Completar cambio de nombre de servidor.

Nombres alternativos
mv, rename, ren

Cambios
La copia de trabajo, repositorio si opera sobre una URL

Accede al repositorio
Slo si opera sobre una URL

Switches
Mensaje de texto (-m) File (-F) FILE Revision (-r) REV Quiet (-q) Force USUARIO nombre de usuario Password PASS No-auth-cache 227 Referencia completa de Subversion Non-interactive EDITOR editor-cmd Encoding ENC Force-log Config-dir DIR

Ejemplos
Mueva el archivo de su copia de trabajo: $ Svn move foo.c bar.c A bar.c D foo.c Mover un archivo en el repositorio (inmediata, por lo que requiere un mensaje de informe de cambios): $ Svn move-m "Mueve un archivo" http://svn.red-bean.com/repos/foo.c \ http://svn.red-bean.com/repos/bar.c Committed revision 27.

228 Referencia completa de Subversion

Nombre
svn propdel - eliminar una propiedad de un elemento.

Sinopsis
svn propdel PROPNAME [RUTA ...] svn propdel PROPNAME - revprop-r REV [URL]

Descripcin
Esto elimina las propiedades de archivos, directorios o revisiones. La primera forma elimina propiedades versionadas en su copia de trabajo, mientras que la segunda elimina propiedades remotas no versionadas en una revisin de repositorio.

Nombres alternativos
pdel, pd

Cambios
Copia de trabajo, repositorio si opera sobre una URL

Accede al repositorio
Slo si opera sobre una URL

Switches
Quiet (-q) Recursive (-R) Revision (-r) REV Revprop USUARIO nombre de usuario Password PASS No-auth-cache Non-interactive Config-dir DIR

Ejemplos
Eliminacin de una propiedad de un fichero en su copia de trabajo $ Svn propdel svn: mime-type algunos-script propiedad 'svn: mime-type' eliminar de 'algunos-script'. Eliminacin de una propiedad de revisin: $ Svn propdel - revprop-r 26 versin actualizada propiedad 'release-date' borrado del repositorio de revisin '26 '

229 Referencia completa de Subversion

Nombre
svn propedit - Editar la propiedad de uno o ms elementos bajo control de versiones.

Sinopsis
svn propedit PROPNAME CAMINO ... svn propedit PROPNAME - revprop-r REV [URL]

Descripcin
Editar una o ms propiedades utilizando tu editor favorito. La primera forma ediciones propiedades versionadas en su copia de trabajo, mientras que la segunda edita propiedades remotas no versionadas en una revisin de repositorio.

Nombres alternativos
pedit, pe

Cambios
Copia de trabajo, repositorio si opera sobre una URL

Accede al repositorio
Slo si opera sobre una URL

Switches
Revision (-r) REV Revprop USUARIO nombre de usuario Password PASS No-auth-cache Non-interactive Encoding ENC EDITOR editor-cmd Config-dir DIR

Ejemplos
svn propedit hace que sea fcil de modificar las propiedades que tienen mltiples valores: $ Svn propedit svn: keywords foo.c <Svn abrir su editor favorito aqu, con un tampn que contiene abrir el contenido actual de la propiedad svn: keywords. Puede agregar varios valores a una propiedad fcilmente aqu mediante la introduccin de un valor por lnea.> Establecer un nuevo valor para la propiedad 'svn: keywords' on 'foo.c'

230 Referencia completa de Subversion

Nom bre
svn propget - Imprime el valor de una propiedad.

Sinopsis
svn propget PROPNAME [OBJETIVO [@ REV] ...] svn propget PROPNAME - revprop-r REV [URL]

Descripcin
Imprimir el valor de una propiedad en archivos, directorios o revisiones. La primera forma imprime el

versionado propie-dad de un elemento o elementos en su copia de trabajo, mientras que la segunda imprime propiedades no versionadas remotas en un revisin del repositorio. Vea la seccin "Propiedades" para ms informacin sobre las propiedades.

Nombres alternativos
pget, pg

Cambios
Copia de trabajo, repositorio si opera sobre una URL

Accede al repositorio
Slo si opera sobre una URL

Switches
- Recursive (-R) - Revision (-r) REV - Revprop - Strict USUARIO nombre de usuario - Password PASS - No-auth-cache - Non-interactive - Config-dir DIR

Ejemplos
Examine una propiedad de un fichero en su copia de trabajo: $ Svn propget svn: keywords foo.c Autor Fecha Ap Lo mismo ocurre con una propiedad de revisin:

231 Referencia completa de Subversion $ Svn propget svn: log - revprop-r 20 comenz revista.

232 Referencia completa de Subversion

Nombre
svn proplist - Lista de todas las propiedades.

Sinopsis
svn proplist [OBJETIVO [@ REV] ...] svn proplist - revprop-r REV [URL]

Descripcin
Enumere todas las propiedades de ficheros, directorios o revisiones. La primera forma muestra las propiedades versionadas en su copia de trabajo, mientras que la segunda muestra propiedades remotas no versionadas en una revisin de repositorio.

Nombres alternativos
plist, pl

Cambios
Copia de trabajo, repositorio si opera sobre una URL

Accede al repositorio
Slo si opera sobre una URL

Switches
Verbose (-v) Recursive (-R) Revision (-r) REV Quiet (-q) Revprop USUARIO nombre de usuario Password PASS No-auth-cache Non-interactive Config-dir DIR

Ejemplos
Usted puede utilizar proplist para ver las propiedades de un elemento en su copia de trabajo: $ Svn proplist foo.c Propiedades en 'foo.c': svn: mimetype svn: Propietario de palabras clave Pero con la opcin - verbose, svn proplist es muy til ya que tambin muestra los valores de las propiedades:

233 Referencia completa de Subversion $ Svn proplist - verbose foo.c Propiedades en 'foo.c': svn: mime-type: text / svn claro: palabras clave: Autor Fecha Rev. propietario: Sally

234 Referencia completa de Subversion

Nom bre
svn propset - PROPNAME a PROPVAL de archivos, directorios o revisiones.

Sinopsis
svn propset PROPNAME [PROPVAL |-F VALFILE] RUTA ... svn propset PROPNAME - revprop-r REV [PROPVAL |-F VALFILE] [URL]

Descripcin
PROPNAME a PROPVAL de archivos, directorios o revisiones. El primer ejemplo se crea un cambio versionado de una propiedad local en la copia de trabajo, y la segunda crea una, cambio de propiedad no versionado en una revisin de repositorio.

Punta
Subversion tiene una serie de propiedades "especiales" que afectan su comportamiento. Consulte laseccin "Propiedades especiales" para ms informacin sobre estas propiedades.

Nombres alternativos
pset, ps

Cambios
Copia de trabajo, repositorio si opera sobre una URL

Accede al repositorio
Slo si opera sobre una URL

Switches
- File (-F) FILE - Quiet (-q) - Revision (-r) REV - Targets FILENAME - Recursive (-R) - Revprop USUARIO nombre de usuario - Password PASS - No-auth-cache - Non-interactive - Encoding ENC - Force - Config-dir DIR

Ejemplos
Establecer el tipo MIME de un archivo:

235 Referencia completa de Subversion $ Svn propset svn: mime-type image / jpeg propiedad foo.jpg: set 'svn mime-type' en 'foo.jpg' En un sistema UNIX, si quiere que un fichero tenga activado el permiso de ejecucin: $ Svn propset svn: ejecutable en propiedad somescript 'svn: ejecutable' set en "somescript ' Tal vez usted tiene una poltica interna para establecer ciertas propiedades para el beneficio de sus compaeros de trabajo: Set "propietario" $ svn propset propietario Sally propiedad foo.c en "foo.c ' Si ha cometido un error en un mensaje de registro de una revisin particular y desea cambiarla, utilice - revprop y establecer svn: log al nuevo mensaje de registro: $ Svn propset - revprop-r 25 svn: log "de diario sobre el viaje a Nueva York." propiedad 'svn: log' set de revisin del repositorio '25 ' O, si usted no tiene una copia de trabajo, puede proporcionar una URL. $ Svn propset - revprop-r 26 svn: log "siesta del documento." http://svn.redbean.com/repo propiedad 'svn: log' set de revisin del repositorio '25 ' Por ltimo, se puede decir propset tomar su entrada desde un archivo. Incluso puede utilizar esta opcin para definir el contenido de una propiedad a algo binario: $ Svn propset propietario-pic-F sally.jpg propiedad moo.c "propietario-pic 'set en el' moo.c '

Not a
De forma predeterminada, no se puede modificar propiedades de revisiones en un repositorio Subversion. El administrador de repos-itory debe habilitar explcitamente modificaciones de las propiedades de revisin creando un gancho llamado pre-revprop de cambio. Vea la seccin "Scripts de enganche" para ms in-formacin sobre los scripts gancho.

236 Referencia completa de Subversion

Nombre

svn resolved - Resuelve el estado "conflictivo" en trabajar copiar archivos o directorios.

Sinopsis
svn CAMINO resuelto ...

Descripcin
Retire el estado "conflictivo" en ficheros o directorios de la copia de trabajo. Esta rutina no semnticamente volver a resolver marcadores de conflicto, sino que simplemente elimina los ficheros artefacto relacionados con el conflicto y permite que PATH pueda ser com-ted de nuevo, es decir, le dice a Subversion que los conflictos han sido "resueltos". Consulte la seccinllamado "Resolver conflictos (fusionando los cambios de otros)" para una mirada en profundidad a la resolucin de conflictos.

Nombres alternativos
Ninguno

Cambios
Copia de trabajo

Accede al repositorio
No

Switches
Targets FILENAME Recursive (-R) Quiet (-q) Config-dir DIR

Ejemplos
Si obtiene un conflicto en una actualizacin, su copia de trabajo brotar tres archivos nuevos: $ Svn update C foo.c Se ha actualizado a la revisin 31. $ Ls foo.c foo.c.mine foo.c.r30 foo.c.r31 Una vez que se haya resuelto el conflicto y foo.c est listo para comprometerse, ejecutar svn resolved para indicarle a su copia de trabajo local que se ha encargado de todo.

237 Referencia completa de Subversion

Adverte ncia
Usted puede simplemente eliminar los ficheros del conflicto y, pero corrige resueltos svn

up algunos datos de la agenda de mantenimiento en la copia de trabajo rea administrativa, adems de eliminar los ficheros del conflicto, por lo que le recomendamos que utilice este comando. 238 Referencia completa de Subversion

Nombre
svn revert - Deshacer todas las ediciones locales.

Sinopsis
svn revert RUTA ...

Descripcin
Revierte cualquier cambio local sobre un fichero o directorio y resuelve cualquier estado de conflicto. svn revert no solamente revertir el contenido de un artculo en su copia de trabajo, sino tambin cualquier cambio de propiedad. Por ltimo, se puede utilizar para deshacer todas las operaciones de programacin que t puedes haber hecho (por ejemplo, archivos programados para la adicin o supresin pueden ser "programadas").

Nombres alternativos
Ninguno

Cambios
Copia de trabajo

Accede al repositorio
No

Switches
Targets FILENAME Recursive (-R) Quiet (-q) Config-dir DIR

Ejemplos
Descartar cambios en un archivo: $ Svn revert foo.c Revertidas foo.c Si usted desea volver un directorio completo de archivos, utilice la opcin - recursive: $ Svn revert - recursive. Revertidos newdir / afile Revertidas foo.c Bar.txt Revertidos Por ltimo, puede deshacer las operaciones de programacin:

239 Referencia completa de

Subversion $ A A A Svn add mistake.txt gritos mistake.txt gritos gritos / oopsie.c

$ Svn revert mistake.txt gritos Revertidos mistake.txt Revertidos los gritos $ Svn status ? mistake.txt ? gritos

Not a
Si no proporciona objetivos a svn revert, no har nada-para protegerse de accidentes aliado perder cambios en su copia de trabajo, svn revert requiere que proporcione al menos un objetivo.

240 Referencia completa de Subversion

Nom bre
svn status - Imprime el estado de los archivos y directorios de su copia de trabajo.

Sinopsis
svn ...] status [RUTA

Descripcin
Imprime el estado de los archivos y directorios de su copia de trabajo. Sin argumentos, imprime slo los elementos modificados localmente (sin acceder al repositorio). Con - show-updates, aade revisin de trabajo y el servidor fuera de la fecha de la informacin. Con - verbose, imprime la informacin de revisin en cada artculo. Las primeras seis columnas de la salida son cada una un carcter, y cada columna le da informacin sobre diferentes aspectos de cada elemento de su copia de trabajo. La primera columna indica que se aadi un elemento, eliminar o cambiar de otro modo. '' No hay modificaciones. 'A' Artculo est programado para ser aadido.

'D' Elemento est programado para su eliminacin. 'M' Artculo ha sido modificado. 'R' Artculo ha sido reemplazado en su copia de trabajo. Esto significa que el archivo se ha marcado para su eliminacin, y luego un nuevo archivo con el mismo nombre fue programado para la adicin en su lugar. 'C' El contenido (en oposicin a las propiedades) del conflicto artculo con actualizaciones recibidas desde el repositorio. 'X' Artculo est relacionado con una definicin externa. 'I' Se hace caso omiso del artculo (por ejemplo, con la propiedad svn: ignore). " ? " El artculo no est bajo control de versiones. '!' Falta el elemento (por ejemplo, que ha movido o borrado sin usar svn). Esto tambin indica que un directorio es incompleto (la obtencin o actualizacin se interrumpe). '~' Elemento est versionado como un tipo de objeto (archivo, directorio, enlace), pero ha sido sustituido por otro tipo de objeto.

241 Referencia completa de Subversion La segunda columna indica el estado de un archivo o directorio de propiedades. '' No hay modificaciones. 'M' Las propiedades de este elemento se han modificado. 'C' Las propiedades de este elemento estn en conflicto con la actualizacin de propiedades recibida del repositorio. La tercera columna slo se rellena si el directorio de la copia de trabajo est bloqueada. (Vea el"svn limpieza ".) '' El artculo no est bloqueado. 'L' Artculo est bloqueado. La cuarta columna slo se rellena si el artculo est programado para la adicin-con-

historial. '' No se program historia para el. '+' Historia programada para el envo. La quinta columna slo se rellena si el elemento no est relacionada con su padre (ver elseccin llamada "Cambiando la copia local de trabajo"). '' El artculo es un hijo de su directorio padre. 'S' Elemento es de otra. La sexta columna se llena con informacin de bloqueo. '' Cuando - se usa show-cambios, el archivo no est bloqueado. Si - no se utiliza show-updates, esto simplemente significa que el archivo no est bloqueado en esta copia de trabajo. K El archivo est bloqueado en esta copia de trabajo. O El archivo est bloqueado, ya sea por otro usuario o en otra copia de trabajo. Esto slo aparece cuando - showupdates se utiliza. T

242 Referencia completa de Subversion El archivo se ha bloqueado en esta copia de trabajo, pero el bloqueo ha sido "robada" y no es vlido. El archivo est bloqueado actualmente en el repositorio. Esto slo aparece cuando se usa - show-updates. B El archivo se ha bloqueado en esta copia de trabajo, pero el bloqueo se ha "roto" y no es vlido. El archivo ya no est bloqueada Esto slo aparece cuando se usa - show-updates. La informacin fuera de fecha aparece en la sptima columna (slo si pasa los - show-updates cambiar). '' El artculo en su copia de trabajo est al da. '*' Existe una nueva versin del tema en el servidor. Los campos restantes son de ancho variable y delimitados por espacios. La revisin de trabajo es el siguiente campo si se pasan los interruptores - verbose - show-updates o. Si pasa el parmetro - verbose la ltima revision confirmada y ltimo autor comprometido se visualizan siguiente. La ruta de la copia de trabajo siempre es el ltimo campo, por lo que puede incluir espacios.

Nombres alternativos
stat, st

Cambios
Nada

Accede al repositorio
Slo si se utiliza - show-updates

Switches
Show-updates (-u) Verbose (-v) Non-recursive (-N) Quiet (-q) No-ignore USUARIO nombre de usuario Password PASS No-auth-cache Non-interactive Config-dir Ignore-externals

Ejemplos
Esta es la forma ms fcil de averiguar lo que los cambios que ha realizado en su copia de trabajo: $ Svn status wc 243 Referencia completa de Subversion M wc / bar.c A + wc / qax.c Si quieres saber qu archivos en su copia de trabajo estn fuera de fecha, pasar el parmetro - showupdates (esto no va a hacer ningn cambio en su copia de trabajo). Aqu se puede ver que wc / foo.c ha cambiado en el repositorio desde la ltima vez que actualizamos nuestra copia de trabajo: $ Svn status - show-updates wc M 965 wc / bar.c * 965 wc / foo.c A + 965 wc / qax.c Estado contra la revisin: 981

Not a
- Show-updatesslocoloca un asterisco junto a los elementos que estn fuera de fecha (es decir, los elementos que se van a actualizar en el repositorio si ejecuta svn update). Show-updates no hace que la lista de estado para reflejar la versin del repositorio del artculo. Y, por ltimo, la mayora de la informacin se puede obtener del subcomando status:

$ Svn status - show-updates - verbose wc M 965 938 Sally wc / bar.c * 965 922 harry wc / foo.c A + 965 687 harry wc / qax.c 965 687 harry wc / zig.c Revisin de la cabeza: 981 Para ms ejemplos de svn status, Consulte la seccin "svn status".

244 Referencia completa de Subversion

Nom bre
svn switch - Actualizar copia de trabajo a una URL distinta.

Sinopsis
svn URL [ruta] interruptor

switch - relocate de a [RUTA ...]

Descripcin
Este subcomando actualiza su copia de trabajo para reflejar un nuevo URL, por lo general un URL que comparte un ancestro comn con su copia de trabajo, aunque no necesariamente. Esta es la forma Subversion de mover una copia de trabajo a una nueva rama. Consulte laseccin titulada "Cambiando la copia local de trabajo" para una mirada en profundidad a cambiar.

Nombres alternativos
S O

Cambios
Copia trabajo de

Accede al repositorio
S

Switches
- Revision (-r) REV - Non-recursive (-N) - Quiet (-q) - Diff3-cmd CMD Trasladar USUARIO nombre de usuario - Password PASS - No-auth-cache - Non-interactive - Config-dir DIR

Ejemplos
Si en la actualidad dentro de los proveedores de directorio que fue ramificado a los vendedores-con-fix y desea cambiar su copia de trabajo a la rama: $ Svn interruptor http://svn.red-bean.com/repos/branches/vendorswith-fix . U miproyecto / foo.txt U miproyecto / bar.txt U miproyecto / baz.c U miproyecto / qux.c Se ha actualizado a la revisin 31. 245 Referencia completa de Subversion Y para volver, slo proporcionar la direccin URL de la ubicacin del repositorio de la que originalmente obtuvo su copia local de trabajo: $ Svn switch http://svn.red-bean.com/repos/trunk/vendors . U miproyecto / foo.txt U miproyecto / bar.txt U miproyecto / baz.c U miproyecto / qux.c Se ha actualizado a la revisin 31.

Punta
Slo puede cambiar parte de su copia de trabajo a una sucursal si no desea cambiar toda su copia de trabajo. A veces, un administrador puede cambiar la "ubicacin de la base" de su repositorio-en otras palabras, el contenido del depsito no cambia, pero la URL principal que se utiliza para llegar a la raz del repositorio tiene. Por ejemplo, el nombre de host puede cambiar el esquema de URL, o cualquier parte de la URL que conduce al mismo repositorio. En lugar de la salida de una nueva copia de trabajo, puede hacer que el comando svn switch "reescribir" el comienzo de todas las URL de su copia de trabajo. Utilice la opcin - reubicar opcin de hacer la sustitucin. Ningn contenido de los archivos se cambian, ni se pone en contacto el repositorio. Es similar a ejecutar un script de Perl sobre su copia de trabajo. Svn / directorios que corre s / OldRoot / NewRoot /. $ Svn checkout file :/ / / tmp / repos prueba Una prueba / a Un test / b . . . $ Mv repos newLocation Test $ cd /

$ Svn update svn: No se puede abrir una sesin ra_local de URL svn: No se puede abrir repositorio 'file :/ / / tmp / repos' $ Svn switch - relocate file :/ / / tmp / repos file :/ / / tmp / newLocation. $ Svn update en la revisin 3.

Adverte ncia
Tenga cuidado al usar la opcin - reubicarse. Si se equivoca al escribir el argumento, podra terminar la creacin de URLs sin sentido dentro de su copia de trabajo que hacer todo el trabajo-espacio inutilizable y difcil de solucionar. Tambin es importante entender exactamente cundo se debe o no se debe usar - reubicarse. Esta es la regla de oro: Si la copia de trabajo debe reflejar un nuevo directorio en el repositorio, utilice slo svn switch. Si la copia de trabajo todava refleja el mismo directorio del repositorio, pero la ubicacin del propio repositorio ha cambiado, a continuacin, utilizar svn switch relocate.

246 Referencia completa de Subversion

Nombre
svn unlock - Desbloquea rutas de la copia de trabajo o URLs.

Sinopsis
svn unlock OBJETIVO ...

Descripcin
Desbloquear cada objetivo. Si alguno de destino est bloqueado por otro usuario o no existe ningn token de bloqueo vlido en la copia de trabajo, imprimir un aviso y continuar abriendo el resto de los objetivos. Use - force para romper un bloqueo que pertenece a otro usuario o la copia de trabajo.

Nombres alternativos
Ninguno

Cambios
Trabajo de copia, repositorio

Accede al repositorio
S

Switches
Objetivos ARG Nombre de usuario ARG Contrasea de ARG No-auth-cache Non-interactive ARG config-dir Force

Ejemplos
Desbloquear dos archivos en su copia de trabajo: $ Svn unlock tree.jpg house.jpg 'tree.jpg' desbloqueado. 'House.jpg' desbloqueado. Abrir un archivo en su copia de trabajo que est actualmente bloqueado por otro usuario: $ Svn desbloquear tree.jpg svn: 'tree.jpg' no est bloqueado en esta copia de trabajo $ Svn unlock - force tree.jpg 'tree.jpg' desbloqueo.

247 Referencia completa de Subversion Desbloquear un archivo sin una copia de trabajo: $ Svn desbloquear http://svn.redbean.com/repos/test/tree.jpg 'Tree.jpg desbloqueado. Para ms detalles, consulte la seccin "Bloqueo".

248 Referencia completa de Subversion

Nom bre
svn update - Actualiza su copia de trabajo.

Sinopsis
svn ...] update [RUTA

Descripcin
svn updatetrae cambios del repositorio en su copia de trabajo. Si no hay revisin dada, trae su copia de trabajo al da con la revisin HEAD. De lo contrario, se sincroniza la copia de trabajo a la revisin propuesta por el parmetro - revision. Como parte de la sincronizacin, svn actualizar tambin remueve los viejos bloqueos (vase la seccin "svn cleanup") Que se encuentra en la copia de trabajo. Para cada elemento actualizado una lnea comenzar con un personaje de la accin tomada. Estos caracteres tienen el siguiente significado:

La Adicional D Suprimido U Actualizado C Conflicto T Fusionada Un carcter en la primera columna significa una actualizacin para el archivo real, mientras que cambios a las propiedades del archivo se muestran en la segunda columna.

Nombres alternativos
hasta

Cambios
Copia de trabajo

Accede al repositorio
S

Switches
- Revision (-r) REV - Non-recursive (-N) - Quiet (-q) 249 Referencia completa de Subversion Diff3-cmd CMD USUARIO nombre de usuario Password PASS No-auth-cache Non-interactive Config-dir DIR Ignore-externals

Ejemplos
Recoge cambios del repositorio que se han producido desde la ltima actualizacin: $ Svn update A newdir / toggle.c A newdir / disclose.c A newdir / launch.c D newdir / README Actualizado a revisin 32.

Usted tambin puede actualizar su copia de trabajo a una revisin anterior (Subversion no tiene el concepto de Ficheros "pegajosos" como CVS,, ver Apndice A, Subversion para usuarios de CVS): $ Svn update-r30 A newdir / README D newdir / toggle.c D newdir / disclose.c D newdir / launch.c U foo.c Se ha actualizado a la revisin 30.

svnadmin
Punta
Si desea examinar una versin antigua de un solo archivo, es posible que desee usar svn cat. svnadmines la herramienta administrativa para el seguimiento y la reparacin de su repositorio Subversion. Para de- informacin de cola, consulte la seccin "svnadmin". Dado que svnadmin trabaja va acceso directo al repositorio (y por lo tanto slo se puede utilizar en el equipo que tiene el repositorio), se refiere al repositorio con una ruta, no una URL.

Interruptores svnadmin
- Bdb-log-keep (Berkeley DB especfico) Desactivar el borrado automtico de archivos de registro de base de datos. - Bdb-txn-nosync (Berkeley DB especfico) Desactiva fsync cuando las transacciones de bases de datos. - Derivacin ganchos Ignorar el sistema de ganchos del repositorio.

250 Referencia completa de Subversion - Clean-logs Elimina los registros de base de datos Berkeley no utilizados. - Force-uuid De forma predeterminada, al cargar los datos en el repositorio que ya contiene revisiones, svnadmin ignorar el UUID del flujo de volcado. Esta funcin har que el repositorio est UUID que se establece en el UUID del flujo. - Ignore-uuid Por defecto, cuando carga un depsito vaco, svnadmin usar el UUID del flujo de volcado. Esta funcin har que el UUID sea ignorado. - Incremento Volcar una revisin slo como un diff contra la revisin anterior, en lugar de texto completo habitual.

- Parent-dir DIR Cuando se carga un archivo de volcado, el directorio raz ser DIR en lugar de /. - Revision(-R) ARG Especifica una revisin particular de operar. - Quiet No mostrar slo los errores normales de progreso-show. - Use-post-commit hookAl cargar un archivo de volcado, ejecute gancho post-commit del repositorio despus de la finalizacin de cada revisin recin cargada. - Use-pre-commit hookAl cargar un archivo de volcado, ejecute gancho pre-commit del repositorio antes de finalizar cada revisin recin cargada. Si el gancho falla, abortar el envo y terminar el proceso de carga.

Subcomandos de svnadmin
251 Referencia completa de Subversion

Nom bre
svnadmin create - Crea un repositorio nuevo vaca.

Sinopsis
svnadmin create REPOS_PATH

Descripcin
Crear un repositorio nuevo vaca en la ruta prevista. Si el directorio proporcionado no existe, ser creado para you.1 Desde Subversion 1.2, svnadmin crea nuevos repositorios con el backend fsfs sistema de ficheros por defecto.

Switches
Bdb-txn-nosync Bdb-log-keep Config-dir DIR Fs-type TIPO

Ejemplos
Creacin de un nuevo repositorio es as de fcil: $ Svnadmin create / usr / local / svn / repos En Subversion 1.0, siempre se crea un repositorio Berkeley DB. En Subversion 1.1, una base de datos Berkeley repos-itory es el tipo de repositorio por defecto, pero un repositorio FSFS se puede crear con la opcin - fs-type:

$ Svnadmin create / usr / local / svn / repos - fstipo fsfs

1Recuerda,

svnadmin slo funciona con rutas locales, no URLs.

252 Referencia completa de Subversion

Nom bre
svnadmin deltify - deltify rutas cambiadas en un rango de revisiones.

Sinopsis
svnadmin deltify [-r INFERIOR [: SUPERIOR]] REPOS_PATH

Descripcin
deltify svnadminslo existe en 1.0.x, debido a razones histricas. Este comando es obsoleto y ya no se necesita. Se remonta a una poca en que los administradores de Subversion ofrece un mayor control sobre las estrategias de compresin en el repositorio. Esto result ser una gran complejidad por muy poco beneficio, y esta "caracterstica" se de-precated.

Switches
- Revision (-r) - Quiet

253 Referencia completa de Subversion

Nom bre
svnadmin dump - Vuelca el contenido del sistema de archivos en la salida estndar.

Sinopsis
svnadmin dump REPOS_PATH incrementales] [-r INFERIOR [: SUPERIOR]] [-

Descripcin
Vierta el contenido del sistema de archivos en la salida estndar en un formato porttil "volcado", el envo de informacin a stderr. Volcado revisiones rev INFERIOR SUPERIOR travs rev. Si no se dan las revisiones, volcar todos los rboles de revisiones. Si slo se da INFERIOR, volcar que un rbol de revisin. Verla seccin llamada "Migrando un repositorio" para un uso prctico. De forma predeterminada, la secuencia de dumpfile Subversion contiene una nica revisin (la primera revisin en el rango revisin solicitada) en el que se presenta todos los archivos y directorios en el

repositorio en el que la revisin como esta todo el rbol a la vez, seguida de otras revisiones ( el resto de las modificaciones en la gama reques-ted) que contienen slo los archivos y directorios que se han modificado en las revisiones. Para un archivo modificado, la representacin completa texto completo de su contenido, as como todas sus propiedades, se presentan en el fichero de volcado; para un directorio, todas sus propiedades se presentan. Hay un par de opciones tiles que modifican el comportamiento del generador de volcado. El primero es el -Incrementalesopcin, que simplemente provoca que la primera revisin en la corriente del fichero del interfaz para contener slo los archivos y directorios modificados en esa revisin, en lugar de ser presentada como la adicin de un nuevo rbol, y exactamente de la misma manera que cualquier otra revisin en el fichero de volcado es presentado. Esto es til para la generacin de un fichero de volcado que se va a cargar en otro repositorio que ya tiene los archivos y directo-sorios que existen en el repositorio originales. La segunda opcin es til - deltas. Este parmetro hace que svnadmin dump para, en lugar de emitir representaciones texto completo del contenido de los archivos y listas de propiedades, emite slo deltas de los elementos en contra de sus versiones anteriores. Esto reduce (en algunos casos, drsticamente) el tamao del fichero de volcado que crea svnadmin dump. Hay, sin embargo, las desventajas de utilizar esta opcin deltified ficheros de volcado son ms intensivos en la CPU para crear, no pueden ser intervenidos por svndumpfilter, y no tienden a comprimir, as como sus homlogos no deltified al utilizar herramientas de terceros como gzip y bzip2 .

Switches
Revision (-r) Incremento Quiet Deltas

Ejemplos
Volcar toda su repositorio: $ Svnadmin dump / usr / local / svn / repos SVN-fsdump-format-Versin: 1 Revisin de nmeros: 0 * Dumped revisin 0. Propcontent-length: 56 Content-Length: 56

254 Referencia completa de Subversion ... Incremental volcar una sola transaccin de su repositorio: $ Svnadmin dump / usr / local / svn / repos-r 21 - incrementales * Objeto de dumping de revisin 21. SVN-fs-dump-format-Versin: 1 Revisin de nmeros: 21 Prop-Content-Length: 101 Content-Length: 101 ...

255 Referencia completa de

Subversion

Nombre
svnadmin help

Sinopsis
svnadmin help [SUBCOMMAND ...]

Descripcin
Este subcomando es til cuando ests atrapado en una isla desierta sin conexin a la red, ni una copia de este libro.

Nombres alternativos
?, H 256 Referencia completa de Subversion

Nom bre
hotcopy svnadmin - Hacer una copia en caliente de un repositorio.

Sinopsis
svnadmin hotcopy REPOS_PATH NEW_REPOS_PATH

Descripcin
Este subcomando realiza una copia de seguridad completa "en caliente" de su repositorio, incluyendo todos los ganchos, archivos de configuracin y, por supuesto, los archivos de base de datos. Si pasa la opcin - clean-logs switch, svnadmin realizar una copia en caliente del repositorio y, a continuacin, eliminar los registros de base de datos Berkeley no usados del repositorio inicial. Puede ejecutar este comando en cualquier momento y hacer una copia de seguridad del repositorio, con independencia de que otro proceso est utilizando el repositorio.

Switches
- Clean-logs

257 Referencia completa de Subversion

Nom bre
svnadmin list-dblogs - Pregunta Berkeley qu ficheros de registro existen para un repositorio Subversion dado (se aplica slo a los repositorios utilizando el backend bdb).

Sinopsis

svnadmin list-dblogs REPOS_PATH

Descripcin
Berkeley DB crea registros de todos los cambios en el repositorio, lo que le permite recuperarse frente a la cata-estrofa. A menos que se habilita DB_LOG_AUTOREMOVE, los archivos de registro se acumulan, aunque la mayora ya no se usan y pueden ser eliminados para recuperar espacio en disco. Consulte laseccin llamada "Gestin de espacio en disco" para ms informacin.

258 Referencia completa de Subversion

Nom bre
svnadmin list-unused-dblogs - Pregunta Berkeley DB que los archivos de registro se pueden eliminar con seguridad (se aplica slo a los repositorios utilizando el backend bdb).

Sinopsis
svnadmin list-unused-dblogs REPOS_PATH

Descripcin
Berkeley DB crea registros de todos los cambios en el repositorio, lo que le permite recuperarse frente a la cata-estrofa. A menos que se habilita DB_LOG_AUTOREMOVE, los archivos de registro se acumulan, aunque la mayora ya no se usan y pueden ser eliminados para recuperar espacio en disco. Consulte laseccin llamada "Gestin de espacio en disco" para ms informacin.

Ejemplos
Quite todos los archivos de registro no utilizados de un repositorio: $ Svnadmin list-unused-dblogs / ruta / al / repositorio / Path/to/repos/log.0000000031 / Path/to/repos/log.0000000032 / Path/to/repos/log.0000000033 $ Svnadmin list-unused-dblogs repositorio | xargs rm # # Espacio en disco recuperado! / ruta / al /

259 Referencia completa de Subversion

Nombre
svnadmin load - Lee un "volcado" con formato de secuencia de la entrada estndar.

Sinopsis
svnadmin load REPOS_PATH

Descripcin
Leer un "volcado" en formato stream de la entrada estndar, cometiendo nuevas revisiones en el repositorio de sistema de ficheros. Enviar Comentarios de los avances en la salida estndar.

Switches
Quiet (-q) Ignore-uuid Force-uuid Use-pre-commit hookUse-post-commit hookParent-dir

Ejemplo
Esto demuestra el principio de carga de un repositorio de un archivo de copia de seguridad (hecho, por supuesto, con svnadmin dump): Carga $ svnadmin / usr / local / svn / restaurado <repos-backup <<< Iniciado nueva txn, basado en la revisin original de 1 * aadiendo ruta: test ... hecho. * aadiendo ruta: test / a ... hecho. ... O si lo desea cargar en un subdirectorio: $ Svnadmin load - parent-dir nuevos / subdir / para / proyecto / usr / local / svn / restaurado <repo <<< Iniciado nueva txn, basado en la revisin original de 1 * aadiendo ruta: test ... hecho. * aadiendo ruta: test / a ... hecho. ...

260 Referencia completa de Subversion

Nombre
lslocks svnadmin - descripciones de impresin de todas las cerraduras.

Sinopsis
svnadmin lslocks REPOS_PATH

Descripcin
Imprimir descripciones de todos los bloqueos en un repositorio.

Switches
Ninguno

Ejemplo
Esto muestra un archivo bloqueado en el repositorio en / svn / repos $ Svnadmin lslocks / svn / repos Ruta: / tree.jpg UUID Token: opaquelocktoken: ab00ddf0-6afb-0310-9cd0dda813329753 Propietario: harry

Creado: 2005-07-08 17:27:36 -0500 (Fri, 08 Jul 2005) Expira: Comentarios (1 lnea): Rework las ramas ms altas del ciprs calvo en el primer plano.

261 Referencia completa de Subversion

Nombre
lstxns svnadmin - Imprimir los nombres de todas las transacciones no confirmadas.

Sinopsis
svnadmin lstxns REPOS_PATH

Descripcin
Escriba los nombres de todas las transacciones no confirmadas. Consulte laseccin "Limpieza del repositorio" para la in-formacin sobre cmo se crean las transacciones no confirmadas y lo que deben hacer con ellos.

Ejemplos
Enumere todas las operaciones pendientes en un repositorio. Lstxns $ svnadmin / usr / local / svn / repos / 1w 1x 262 Referencia completa de Subversion

Nom bre
svnadmin recover - Trae una base de datos de repositorio de nuevo en un estado consistente (se aplica slo a los repositorios utilizando el backend bdb). Adems, si repos / conf / passwd no existe, se crear un archivo de contraseas por defecto.

Sinopsis
svnadmin recover REPOS_PATH

Descripcin
Ejecute este comando si obtiene un error indicando que su repositorio debe ser recuperado.

Switches
Espere

Ejemplos
Recuperar un repositorio colgado:

$ Svnadmin recover / usr / local / svn / repos / repositorio cerradura adquiridos. Por favor espere, recuperar el repositorio puede algn tiempo ... La recuperacin completa. La ltima revisin de repos es 34.

llevar

La recuperacin de la base de datos requiere un bloqueo exclusivo en el repositorio. (. Esto es un "bloqueo de base de datos"; ver tres significados de "lock") Si otro proceso est accediendo al repositorio, entonces svnadmin recuperacin ser de error: $ Svnadmin recover / usr / local / svn / repos svn: No se pudo obtener acceso exclusivo al repositorio, tal vez otro proceso como httpd, svnserve o svn lo tiene abierto? $ La opcin - espera, sin embargo, har que svnadmin recover que esperar indefinidamente para otros procesos para desconectar: $ Svnadmin recover / usr / local / svn / repos - espere Esperando bloqueo del repositorio, tal vez otro proceso tiene abierto? # # # Pasa el tiempo ... Bloqueo repositorio adquirido. Por favor espere, algn tiempo ... La recuperacin completa. recuperar el repositorio puede llevar

263 Referencia completa de Subversion La ltima revisin de repos es 34.

264 Referencia completa de Subversion

Nombre
rmlocks svnadmin - eliminar incondicionalmente una o varias cerraduras de un repositorio.

Sinopsis
svnadmin rmlocks REPOS_PATH LOCKED_PATH ...

Descripcin

Eliminar bloqueo de cada uno LOCKED_PATH.

Switches
Ninguno

Ejemplo
Esto elimina los bloqueos de tree.jpg y house.jpg en el repositorio en / svn / repos $ Rmlocks svnadmin / svn / repos tree.jpg bloqueo house.jpg Eliminada el '/ tree.jpg. Eliminada el bloqueo '/ house.jpg.

265 Referencia completa de Subversion

Nombre
rmtxns svnadmin - Eliminar las transacciones de un repositorio.

Sinopsis
svnadmin rmtxns REPOS_PATH TXN_NAME ...

Descripcin
Eliminar las operaciones pendientes de un repositorio. Esto se trata en detalle en la seccin llamado "Limpieza del repositorio".

Switches
- Quiet (-q)

Ejemplos
Retire las transacciones con nombre: $ Rmtxns svnadmin / usr / local / svn / repos / 1w 1x Afortunadamente, la salida del lstxns funciona muy bien como entrada para rmtxns: $ Rmtxns svnadmin / usr / local / svn / repos / `lstxns svnadmin / usr / local / svn / repos /` Que eliminar todas las transacciones no confirmadas de su repositorio.

266 Referencia completa de Subversion

Nom bre
setlog svnadmin - Configurar el mensaje de registro en una revisin.

Sinopsis

svnadmin setlog REPOS_PATH-r Revisin del archivo

Descripcin
Ajuste el mensaje de inicio de sesin de revisin de revisin para el contenido del archivo. Esto es similar al uso de svn propset - revprop para establecer la propiedad svn: log en la revisin, pero usted tambin puede usar la opcin - Bypass-ganchos para no correr ningn gancho pre-o post-commit, lo cual es til si la modificacin de propiedades de revisin no se ha habilitado en el gancho pre-revprop de cambio.

Advertencia
Las propiedades de revisin no estn bajo el control de versiones, por lo que este comando de forma permanente sobre-escribir el mensaje de registro anterior.

Switches
- Revision (-r) ARG Derivacin ganchos

Ejemplos
Ajuste el mensaje de registro de la revisin 19 de los contenidos del archivo de error: $ Svnadmin setlog / usr / local / svn / repos /-r 19 msj

267 Referencia completa de Subversion

Nom bre
svnadmin verify - Compruebe que los datos almacenados en el repositorio.

Sinopsis
svnadmin REPOS_PATH verificar

Descripcin
Ejecute este comando si desea verificar la integridad de su repositorio. Esto se repite, bsicamente, a travs de todas las revisiones en el repositorio realizando un volcado de todas las revisiones y descartando la salida.

Ejemplos
Comprobar repositorio colgado: un

$ Svnadmin verify / usr / local / svn / repos / * Verificado revisin 1729.

svnlook
svnlookes una utilidad de lnea de comandos para examinar diferentes aspectos de un repositorio Subversion. No se realiza ningn cambio en el repositorio-es slo utilizado para "leerlo". svnlook es utilizada normalmente por los ganchos de repos-itory, sino un administrador de repositorio puede ser til para el diagnstico. Desde svnlook funciona mediante el acceso directo al repositorio (y por lo tanto slo se puede utilizar en el equipo que tiene el repositorio), se refiere al repositorio con una ruta, no una URL. Si no se especifica ninguna revisin o transaccin, svnlook por defecto es el ms joven (el ms reciente) de revisin del repositorio.

Interruptores svnlook
Interruptores de svnlook son globales, como en svn y svnadmin, sin embargo, la mayora de los interruptores slo se aplican a un subcomando ya que la funcionalidad de svnlook es (intencionadamente) limitada en su alcance. - No-diff-deleted Evita que svnlook de las diferencias de impresin para los archivos eliminados. El comportamiento por defecto cuando se elimina un archivo en un transaccin / revisin es imprimir las mismas diferencias que vera si hubiese dejado el fichero pero eliminando su contenido. - Revision(-R) Especifique un nmero en particular la revisin que desea examinar. - Revprop Funciona con una propiedad de revisin en lugar de una propiedad Subversion particular de un fichero o directorio. Este interruptor de recuadernillos que adems debe pasar una revisin con la opcin - revision (-r). Consulte laseccin llamada "versionados Propiedades " para ms detalles sobre las propiedades no versionadas. - Transaccin(-T)

268 Referencia completa de Subversion Especifique un ID de transaccin en particular que desea examinar. - Show-ids Mostrar los identificadores de revisiones de los nodos del sistema de ficheros para cada ruta en el rbol de archivos.

svnlook
269 Referencia completa de Subversion

Nombre
svnlook autor - Muestra el autor.

Sinopsis
svnlook autor REPOS_PATH

Descripcin
Imprima el autor de una revisin o transaccin en el repositorio.

Switches
- Revision (-r) - Transaccin (-t)

Ejemplos
svnlook autor es til, pero no es muy emocionante: $ Svnlook autor-r 40 / usr / local / svn / repos Sally

270 Referencia completa de Subversion

Nombre
svnlook cat - Imprimir el contenido de un archivo.

Sinopsis
svnlook cat REPOS_PATH PATH_IN_REPOS

Descripcin
Imprimir el contenido de un archivo.

Switches
- Revision (-r) - Transaccin (-t)

Ejemplos
Esto muestra el contenido de un archivo en una transaccin realizada AX8, ubicado en / trunk / README: $ Svnlook cat-t AX8 / usr / local / svn / repos / trunk / README Subversion, un sistema de control de versiones. ===================================== $ LastChangedDate: 2003-07-17 10:45:25 -0500 (Thu, 17 Jul 2003) $ Contenido:

...

I. Algunos indicadores II. DOCUMENTACIN III. PARTICIPACIN EN LA COMUNIDAD SUBVERSION

271 Referencia completa de Subversion

Nombre
svnlook cambiado - Imprima las rutas que fueron modificadas.

Sinopsis
svnlook cambi REPOS_PATH

Descripcin
Imprima las rutas que fueron modificadas en una revisin o transaccin en particular, as como de estilo "svn update" cartas de estado en las primeras dos columnas: 'A' Producto aadido al repositorio. 'D' Elemento eliminado del repositorio. 'U' Contenido del archivo cambiado. '_U' Propiedades del elemento cambiado. "UU" Contenido del archivo y las propiedades cambian. Los archivos y directorios se pueden distinguir, como rutas de directorios se muestran con un posterior carcter '/'.

Switches
- Revision (-r) - Transaccin (-t)

Ejemplos
Esto muestra una lista de todos los ficheros modificados en la revisin 39 de un repositorio de pruebas: $ Svnlook cambiado-r 39 / usr / local / svn / repos A trunk / vendors / deli / A trunk / vendors / deli / chips.txt A trunk / vendors / deli / sandwich.txt A trunk / vendors / deli / pickle.txt U trunk / vendors / panadera / bagel.txt _U Trunk / vendors / panadera / croissant.txt UU trunk / vendors / panadera / pretzel.txt D trunk / vendors / panadera / baguette.txt

272 Referencia completa de Subversion

Nombre
Fecha svnlook - Imprimir la marca de fecha.

Sinopsis
svnlook fecha REPOS_PATH

Descripcin
Imprima la marca de fecha de una revisin o transaccin en un repositorio.

Switches
- Revision (-r) - Transaccin (-t)

Ejemplos
Esto muestra la fecha de la revisin 40 de un repositorio de pruebas: $ Svnlook date-R 40 / tmp / repos / 2003-02-22 17:44:49 -0600 (sb, 22 de febrero de 2003)

273 Referencia completa de Subversion

Nombre
svnlook diff - diferencias de impresin de archivos y propiedades modificadas.

Sinopsis
svnlook diff REPOS_PATH

Descripcin
Imprimir diferencias de estilo GNU de ficheros y propiedades modificadas en un repositorio.

Switches
Revision (-r) Transaccin (-t) No-diff-aadido No-diff-deleted

Ejemplos
Este muestra un archivo que acaba de agregar (vaco), un archivo borrado, y un archivo de copia: $ Svnlook diff-r 40 / usr / local / svn / repos / Copiado: egg.txt (de rev 39, trunk / vendors / deli / pickle.txt) Aadido: trunk / vendors / deli / soda.txt ================================================== ============================

Modificado: trunk / vendors / deli / sandwich.txt ================================================== ============================ --- Trunk / vendors / deli / sandwich.txt (original) + + + Trunk / vendors / deli / sandwich.txt 2003-02-22 17:45:04.000000000 0600 @ @ @ @ -0,0 +1 + No te olvides de la mayonesa! Modificado: trunk / vendors / deli / logo.jpg ================================================== ============================ (Los archivos binarios difieren) Eliminado: trunk / vendors / deli / chips.txt ================================================== ============================ Eliminado: trunk / vendors / deli / pickle.txt ================================================== ============================ Si un archivo tiene un no-textual svn: mime-type propiedad, entonces no se muestran explcitamente las diferencias. 274 Referencia completa de Subversion

Nombre
svnlook dirs-changed - Imprimir los directorios que se vieron transformados.

Sinopsis
svnlook dirs-changed REPOS_PATH

Descripcin
Imprimir los directorios que se vieron cambiados (propiedad ediciones) o cuyos hijos archivos fueron cambiados.

Switches
- Revision (-r) - Transaccin (-t)

Ejemplos
Esto muestra los directorios que han cambiado en la revisin 40 en nuestro repositorio de pruebas: $ Svnlook dirs-changed-r 40 / usr / local / svn / repos trunk / vendors / deli /

275 Referencia completa de Subversion

Nombre
svnlook ayuda

Sinopsis
Tambin svnlook-hy svnlook -.

Descripcin
Muestra el mensaje de ayuda de svnlook. Este comando, al igual que su hermano svn help, es tambin su amigo, a pesar de no llamarlo y que olvid invitarlo a su ltima fiesta.

Nombres alternativos
?, H 276 Referencia completa de Subversion

Nombre
historia svnlook - Muestra informacin sobre la historia de una ruta en el repositorio (o el directorio raz si no especifica ruta).

Sinopsis
svnlook historia REPOS_PATH [PATH_IN_REPOS]

Descripcin
Imprime informacin sobre la historia de una ruta en el repositorio (o el directorio raz si no hay camino se suministra la alimentacin).

Switches
- Revision (-r) - Show-ids

Ejemplos
Esto muestra la salida de la historia de la ruta / tags/1.0 como de la revisin 20 en nuestro repositorio de pruebas. $ Svnlook historia-r 20 / usr / local / svn / repos / tags/1.0 show-ids REVISION CAMINO <ID> ----------------19 / tags/1.0 <01/02/12> 17 / branches/1.0-rc2 <1.1.10> 16 / branches/1.0-rc2 <1.1.x> 14 / trunk <1.0.q> 13 / trunk <1.0.o> 11 / trunk <1.0.k> 9 / trunk <1.0.g> 8 / trunk <1.0.e> 7 / trunk <1.0.b> 6 / trunk <1.0.9> 5 / trunk <1.0.7> 4 / trunk <1.0.6> 2 / trunk <1.0.3> 1 / trunk <1.0.2>

277

Referencia completa de Subversion

Nombre
svnlook info - Imprimir el autor, marca de fecha, tamao del mensaje de registro, y el mensaje de registro.

Sinopsis
svnlook info REPOS_PATH

Descripcin
Imprima el autor, marca de fecha, tamao del mensaje de registro, y el mensaje de registro.

Switches
- Revision (-r) - Transaccin (-t)

Ejemplos
Esto muestra la salida de informacin de la revisin 40 en nuestro repositorio de pruebas. $ Svnlook info-r 40 / usr / local / svn / repos Sally 2003-02-22 17:44:49 -0600 (sb, 22 de febrero de 2003) 15 Reorganizar el almuerzo.

278 Referencia completa de Subversion

Nombre
bloqueo svnlook - Si existe un bloqueo en una ruta en el repositorio, describirlo.

Sinopsis
svnlook bloqueo REPOS_PATH PATH_IN_REPOS

Descripcin
Imprimir toda la informacin disponible para la cerraduraPATH_IN_REPOS. SiPATH_IN_REPOSno est bloqueado, imprimir nada.

Switches
Ninguno

Ejemplos
Esto describe el bloqueo en el archivo tree.jpg. $ Svnlook bloqueo / svn / repos tree.jpg UUID Token: opaquelocktoken: ab00ddf0-6afb-0310-9cd0dda813329753 Propietario: harry Creado: 2005-07-08 17:27:36 -0500 (Fri, 08 Jul 2005) Expira:

Comentarios (1 lnea): Rework las ramas ms altas del ciprs calvo en el primer plano.

279 Referencia completa de Subversion

Nombre
svnlook log - Imprime el mensaje de registro.

Sinopsis
svnlook log REPOS_PATH

Descripcin
Imprime el mensaje de registro.

Switches
- Revision (-r) - Transaccin (-t)

Ejemplos
Esto muestra el resultado del registro de la revisin 40 en nuestro repositorio de pruebas: $ Svnlook log / tmp / repos / Reorganizar el almuerzo.

280 Referencia completa de Subversion

Nombre
svnlook propget - Imprime el valor crudo de una propiedad en una ruta en el repositorio.

Sinopsis
svnlook propget REPOS_PATH PROPNAME [PATH_IN_REPOS]

Descripcin
Anote el valor de una propiedad en una ruta en el repositorio.

Nombres alternativos
pg, pget

Switches
- Revision (-r) - Transaccin (-t) - Revprop

Ejemplos

Esto demuestra el valor de la propiedad "condimentos" en el fichero / trunk / sandwich en el CABEZA revi-sin: $ Svnlook pg / usr / local / svn / repos condimentos / trunk / sandwich de mostaza

281 Referencia completa de Subversion

Nombre
svnlook proplist - Imprimir los nombres y valores de fichero versionado y propiedades del directorio.

Sinopsis
svnlook proplist REPOS_PATH [PATH_IN_REPOS]

Descripcin
Enumere las propiedades de una ruta en el repositorio. Con - verbose, muestran los valores de la propiedad tambin.

Nombres alternativos
pl, plist

Switches
Revision (-r) Transaccin (-t) Verbose (-v) Revprop

Ejemplos
Esto muestra los nombres de las propiedades que figuran en el archivo / trunk / README en la revisin HEAD: $ Svnlook proplist / usr / local / svn / repos / trunk / README originales de los autores svn: mime-type Este es el mismo comando que en el ejemplo anterior, pero esta vez mostrando los valores de la propiedad, as: $ Svnlook - verbose proplist / usr / local / svn / repos / trunk / README originales de los autores: fitz svn: mime-type: text / plain

282 Referencia completa de Subversion

Nombre
svnlook tree - Imprimir el rbol.

Sinopsis

svnlook tree REPOS_PATH [PATH_IN_REPOS]

Descripcin
Imprimir el rbol, a partir de PATH_IN_REPOS (si se suministra, en la raz del rbol de otro modo), mostrando opcionalmente ID de revisiones de los nodos.

Switches
- Revision (-r) - Transaccin (-t) - Show-ids

Ejemplos
Esto muestra el rbol de salida (con IDs de nodo) para la revisin 40 en nuestro repositorio de pruebas: $ Svnlook tree-r 40 / usr / local / svn / repos - show-ids / <0.0.2j> trunk / vendors / <p.0.2j> <q.0.2j> deli / <1g.0.2j> egg.txt <1i.e.2j> soda.txt <1k.0.2j> sandwich.txt <1j.0.2j>

283 Referencia completa de Subversion

Nombre
svnlook uuid - Imprimir UUID del repositorio.

Sinopsis
svnlook uuid REPOS_PATH

Descripcin
Imprima el UUID del repositorio. el UUID es el identificador nico universal del repositorio. El cliente Subversion usa este identificador para diferenciar un repositorio a otro.

Ejemplos
$ Svnlook uuid / usr / local / svn / repos e7fe1b91-8cd5-0310-98DD-2f12e793c5e8

284 Referencia completa de Subversion

Nom bre
svnlook ms joven - Imprimir el nmero de revisin menor.

Sinopsis
svnlook joven REPOS_PATH m s

Descripcin
Imprime el nmero de versin ms joven de un repositorio.

Ejemplos
Esto muestra la revisin ms joven de nuestro repositorio de pruebas: $ Svnlook menor / tmp / repos / 42

svnserve
svnservepermite el acceso a repositorios de Subversion utilizando el protocolo de red svn. Puede ejecutar svn-servir tanto como un proceso servidor independiente, o puede tener otro proceso, como inetd, xinetd o sshd, lanzarlo para usted. Una vez que el cliente ha seleccionado un repositorio transmitiendo su URL, svnserve lee el fichero conf / svnserve.conf en el directorio del repositorio para determinar la configuracin repositorio especficos como lo autenticacin de base de datos a usar y qu polticas de autorizacin para aplicar. Consulte laseccin llamada "svnserve, un servidor personalizado " para ms detalles sobre el archivo svnserve.conf.

Parmetros de svnserve
A diferencia de los comandos anteriores que hemos descrito. svnserve no tiene sub-svnserve se controla exclusivamente mediante parmetros. - Demonio(D) Hace que svnserve se ejecute en modo demonio. svnserve s y antecedentes acepta y sirve TCP / IP de conexin ciones en el puerto svn (3690, de forma predeterminada). - Listen-port = PUERTO Hace que svnserve escuche en el puerto cuando se ejecuta en modo demonio. - Listen-host = HOST Hace que svnserve escuche en HOST, que puede ser un nombre de host o una direccin IP. Primer plano Cuando se utiliza junto con-d, este parmetro hace que svnserve se quede en primer plano. Este interruptor se usa sobre todo para la depuracin. - Inetd(-I) Hace que svnserve use los descriptores de fichero stdin / stdout, como es apropiado para un demonio que se ejecuta desde inetd.

285 Referencia completa de

Subversion - Help(-H) Muestra un resumen de uso y finaliza. - Version Muestra informacin de la versin, una lista de los mdulos de servidor de repositorios disponibles, y sale. - Root = root(-R = RAZ) Establece la raz virtual para repositorios servidos por svnserve. La ruta en las URLs proporcionada por el cliente ser interpretado en relacin con esta raz, y no se le permitir escapar de esta raz. - Tnel(-T) Hace que svnserve se ejecute en modo tnel, que es igual que el modo de operacin inetd (sirviendo una conexin sobre stdin / stdout), excepto que la conexin se considera pre-autenticado con el nombre de usuario de la corriente uid. Este indicador se ha seleccionado por el cliente cuando se ejecuta sobre un agente tnel como ssh. - NOMBRE tnel del usuario Se utiliza junto con - interruptor tnel, dice svnserve suponer que el nombre es el usuario autenticado, ms que el UID del proceso svnserve. Es til para los usuarios que deseen compartir una nica cuenta del sistema a travs de SSH, pero manteniendo las identidades compromisos separados. - Hilos(-T) Cuando se ejecuta en modo demonio, hace que svnserve lance un hilo en lugar de un procedimiento para cada conexin. El proceso svnserve todava fondos en s en el tiempo de inicio. - Listen-once(-X) Hace que svnserve acepte una conexin en el puerto svn, servir, y la salida. Esta opcin es principalmente til para demolesta ndo.

svnversion
286 Referencia completa de Subversion

Nombre
svnversion - Resumir la revisin local (s) de una copia de trabajo.

Sinopsis
svnversion [OPCIONES] RUTA_CDT [RESTO_URL]

Descripcin
svnversiones un programa para resumir la mezcla de la revisin de una copia de trabajo. El nmero de revisin, o la revisin rango resultante, se escribe en la salida estndar. RESTO_URL, si est presente, es la parte posterior de la URL que se utiliza para determinar si el propio

RUTA_CDT se activa (deteccin de interruptores dentro RUTA_CDT no se basa en RESTO_URL).

Switches
Al igual que svnserve, svnversion tiene subcomandos, slo tiene interruptores. - No-salto de lnea(-N) Omitir el habitual salto de lnea final de la salida. - Cometido(-C) Utilice las revisiones ltimo cambio en lugar de las revisiones actuales (es decir, ms alta disponible localmente). - Help(-H) Muestra un resumen ayuda. - Version Imprima la versin de svnversion y salir sin ningn error.

Ejemplos
Si la copia de trabajo es todo en la misma revisin (por ejemplo, inmediatamente despus de una actualizacin), entonces esa revi-sin se imprime: $ Svnversion. 4168 Puede agregar RESTO_URL para demostrar que la copia de trabajo no pasa de lo que se espera: $ Svnversion. / Repos / svn / trunk 4168 Para obtener una copia de trabajo mixto de revisin, el rango de revisiones presente se imprime: $ Svnversion. 4123:4168 287 Referencia completa de Subversion Si la copia de trabajo tiene modificaciones, una salida "M", se aade: $ Svnversion. 4168M Si se cambia la copia de trabajo, una salida "S" se aade: $ Svnversion. 4168S Por lo tanto, aqu es un mixto de revisin, cambi copia de trabajo contiene algunas modificaciones locales: $ Svnversion. 4212:4168 MS Si se invoca en un directorio que no es una copia de trabajo, svnversion asume que es una copia de trabajo exportada e imprime "exportado": $ Svnversion. exportado

mod_dav_svn
288 Referencia completa de Subversion

Nom bre
mod_dav_svnDirectivas de configuracin - directivas de configuracin de Apache para servir Subversion re-repositorios a travs de Apache HTTP Server.

Descripcin
En esta seccin se describe brevemente cada una de las directivas de configuracin de Apache Subversion. Para una descripcin detallada de la configuracin de Apache con Subversion, consulte laseccin llamada "httpd, el Apache HTTP servidor ".)

Directivas
DAV svn Esta directiva debe ser incluido en cualquier directorio o bloque Location para un repositorio Subversion. Cuenta httpd utilizar el servidor Subversion para mod_dav para manejar todas las peticiones. En SVNAutoversioning Esta directiva permite escribir peticiones de los clientes WebDAV para producir compromete automtico. Un registro genrico mensabio se genera automticamente y se une a cada revisin. Si habilita autoversionado, es probable que desee establecer ModMimeUsePathInfo En lo que mod_mime puede establecer svn: mime-type para el correcto tipo mime automticamente (lo mejor mod_mime puede, por supuesto). Para obtener ms informacin, consulte el ApndiceB, WebDAV y Autoversionado SVNPath Esta directiva especifica la ubicacin en el sistema de archivos para los archivos de un repositorio Subversion. En un bloque de configuracin para un repositorio Subversion, ya sea presente Directiva o SVNParentPath deben estar presentes, pero no ambos. SVNSpecialURI Especifica el componente URI (espacio de nombres) para los recursos especiales de Subversion. El valor predeterminado es "! Svn", y la mayora de los administradores no utilizar esta directiva. Slo ajustarlo si hay una necesidad urgente de tener un archivo llamado! Svn en su repositorio. Si cambia esto en un servidor que ya estn en uso, se romper todo el trabajo pendiente copias y tus usuarios te perseguir con horcas y antorchas encendidas. SVNReposName Especifica el nombre de un repositorio Subversion para su uso en las solicitudes HTTP GET. Este valor se antepondr al ttulo de todos los listados de directorios (que se sirven cuando se desplaza a un repositorio de Subversion con un navegador web). Esta directiva es opcional. SVNIndexXSLT Especifica el URI de una transformacin XSL para los ndices de directorio. Esta directiva es opcional. SVNParentPath Especifica la ubicacin del sistema de archivos de un directorio padre cuyo hijo directorios son repositorios de Subversion. En un bloque de configuracin de un repositorio Subversion, ya sea presente Directiva o SVNPath deben estar presentes, pero no ambos.

SVNPathAuthz Controlar la autorizacin basada en rutas, activando o desactivando subpeticiones. Consulte laseccin llamada "Desactivacin de la TrayectoriaControles basados en acciones " para ms detalles.

Las propiedades de Subversion


289 Referencia completa de Subversion

Nom bre
Propiedades de Subversion definidos - Propiedades definidas por Subversion para controlar el comportamiento.

Descripcin
Subversion permite a los usuarios inventan propiedades versionadas arbitrariamente con nombre de archivos y directorios, as como las propiedades no versionadas en las revisiones. La nica restriccin es en las propiedades prefijadas con "svn:". Propieda-des en ese espacio de nombres se reservan para uso propio de Subversion. Mientras que estas propiedades pueden ser establecidas por los usuarios para controlar el comportamiento de Subversion, los usuarios no pueden inventar nuevas "svn:" propiedades.

Propiedades verisonadas
svn: ejecutable Si est presente en un archivo, el cliente har que el archivo ejecutable en copias de trabajo Unix hospedados. Consulte la seccin "svn: executable". svn: mimetype Si est presente en un archivo, el valor indica el tipo mime del archivo. Esto permite que el cliente pueda decidir si la lnea de base fusin contextual es seguro para llevar a cabo durante las actualizaciones, y tambin puede afectar la manera en el archivo se comporta cuando descabellada travs navegador web. Vea la seccin "svn: mime-type". svn: ignore Si est presente en un directorio, el valor es una lista de patrones de ficheros no versionados a ser ignorado por svn status y otros subcomandos. Vea la seccin "svn: ignore" svn: keywords Si est presente en un archivo, el valor indica al cliente la forma de ampliar determinadas palabras clave en el archivo. Consulte laseccin "svn: keywords". svn: eolstyle Si est presente en un archivo, el valor indica al cliente cmo manipular el fin de lnea del archivo de la copia de trabajo. Ver

el "svn: eol-style". svn: externals Si est presente en un directorio, el valor es una lista de varias lneas de otros caminos y direcciones URL, el cliente debe comprobar hacia fuera. Ver el "svn: externals". svn: especial Si est presente en un archivo, indica que el archivo no es un archivo normal, sino un enlace simblico u otro objeto especial. Ver el "svn: especial". svn: needslock Si est presente en un archivo, le dice al cliente para que el archivo de slo lectura en la copia de trabajo, como un recordatorio de que el archivo debe ser cerrada antes de que comience la edicin. Vea la seccin "Comunicacin Lock".

Propiedades no versionadas
svn: author Si est presente, contiene el nombre de usuario autenticado de la persona que cre la revisin. (Si no est presente, entonces el revisin se cometi annima.) 290 Referencia completa de Subversion svn: date Contiene la hora UTC de la revisin fue creado, en formato ISO. El valor viene de la mquina del servidor reloj. svn: log Contiene el mensaje de registro que describe la revisin. svn: autoversioned Si est presente, la revisin fue creado a travs de la funcin autoversionado. Vea la seccin llamada "autoversionado".

291

Apndice A. Subversion para usuarios de CVS


Este apndice es una gua para nuevos usuarios de CVS a Subversion. Bsicamente se trata de una lista de las diferencias entre los dos sistemas, "visto desde 10,000 pies". Para cada seccin, proporcionamos referencias hacia atrs a los captulos pertinentes cuando sea posible. Aunque el objetivo de Subversion es hacerse cargo de la base de usuarios de CVS actual y futura, se requirieron algunas nuevas caractersticas y cambios de diseo para corregir ciertos comportamientos

"rotos" que tena CVS. Esto significa que, como usuario de CVS, puede necesitar romper hbitos-los que se le olvid fue extrao al principio.

Nmeros de revisin son diferentes ahora


En CVS, nmeros de revisin son por archivo. Esto se debe a CVS almacena sus datos en ficheros RCS, cada archivo tiene un archivo RCS correspondiente en el repositorio, y el depsito se coloca ms o menos de acuerdo con la estructura de su rbol de proyecto. En Subversion, el repositorio se ve como un nico sistema de archivos. Cada uno de los resultados de compromisos en un rbol del sistema de ficheros totalmente nuevo, en esencia, el repositorio es un conjunto de rboles. Cada uno de estos rboles se marca con un nico nmero de revisin. Cuando alguien habla de "revisin 54", estn hablando de un rbol en particular (e indirectamente, la forma en que el sistema de ficheros cuidado del envo 54). Tcnicamente, no es vlido hablar de "revisin 5 de foo.c". En su lugar, se podra decir "foo.c como aparece en la revisin 5". Adems, tenga cuidado al hacer suposiciones acerca de la evolucin de un archivo. En CVS, re-visiones 5 y 6 de foo.c son siempre diferentes. En Subversion, es muy probable que foo.c no cambi entre las revisiones 5 y 6. Para ms detalles sobre este tema, consulte la seccin "Revisiones".

Versiones Directorio
Subversion sigue estructura de rbol, y no slo los contenidos de archivo. Es una de las mayores razones por Subversion fue escrito para reemplazar CVS. Esto es lo que significa esto para usted, como un ex usuario de CVS: Los comandos svn delete svn add y trabajan en los directorios de ahora, a medida que trabajan en los ficheros. Lo mismo ocurre con svn copy y svn move. Sin embargo, estos comandos no causan ningn tipo de cambio inmediato en el repositorio. En cambio, los elementos de trabajo estn simplemente "programados" para la adicin o eliminacin. No hay cambios repos-itory suceden hasta que se ejecute svn commit. Los directorios no son contenedores estpidos nunca ms, sino que tienen nmeros de revisin, como archivos. (O ms apropiadamente, es correcto hablar de "directorio foo / en la revisin 5".)

Vamos a hablar ms sobre este ltimo punto. Versiones de Directory es un problema difcil, porque queremos permitir copias de trabajo con revisiones mezcladas, hay algunas limitaciones en lo lejos que podemos abusar de este modelo. Desde un punto de vista terico, definimos "revisin 5 del directorio foo" en el sentido de una coleccin especfica de directorios-entradas y propiedades. Supongamos ahora que empezamos a aadir y eliminar archivos de foo, y luego confirmar. Sera una mentira decir que todava tenemos la revisin 5 de foo. Sin embargo, si nos topamos con varias revi-sin de foo despus de la confirmacin, eso sera una mentira tambin, puede haber otros cambios en foo que todava no ha recibido, porque no se ha actualizado todava. Aborda este problema mediante el seguimiento de Subversion silencio comprometido aade y elimina en la zona. Svn.

292 Subversion para usuarios de CVS Cuando usted ejecuta finalmente svn update, todas las cuentas se liquidan con el repositorio, y el nuevo nmero de revisin de la gua se establece correctamente. Por lo tanto, slo despus de una actualizacin

es realmente seguro decir que usted tiene una revisin "perfecta" de un directorio. La mayora de las veces, su copia de trabajo contendr revisiones "imperfectas" directo de memoria. Del mismo modo, surge un problema si intenta confirmar los cambios de propiedad en un directorio. Normalmente, el envo chocara con el nmero de revisin local del directorio de trabajo. Pero una vez ms, eso sera una mentira, por-que no puede ser adiciones o eliminaciones que el directorio todav a no tiene, porque no hay ninguna actualizacin ha sucedido. Por lo tanto, no se le permite a cambioscaractersticas de un directorio a menos que el directorio est actualizado al da. Para ms discusin sobre las limitaciones del directorio de versiones, consulte laseccin llamada "Mixed Revi- Las copias de trabajo Sin ".

Operaciones ms desconectados
En los ltimos aos, el espacio de disco ha llegado a ser muy abundante y barata, pero no tiene el ancho de banda de red. Por lo tanto, la copia de trabajo de Subversion ha sido optimizada alrededor del recurso ms escaso. El directorio administrativo. Svn sirve el mismo propsito que el directorio CVS, excepto que tambin almacena slo lectura, copias "prstinas" de sus archivos. Esto le permite hacer muchas cosas fuera de lnea: svn status Le muestra los cambios locales que usted ha hecho (vase la seccin "svn status") svn diff Le muestra los detalles de los cambios (consulte la seccin "svn diff") svn revert Elimina los cambios locales (ver la seccin llamada "svn revert") Adems, los archivos prstinos almacenados permiten que el cliente Subversion enviar las diferencias al repositorio, lo que CVS no puede hacer. El ltimo subcomando en la lista es nueva, no slo eliminar los cambios locales, pero lo har sin horario opera-ciones tales como adiciones y eliminaciones. Es la mejor forma de revertir un archivo, se ejecuta el archivo rm; svn update seguir funcionando, pero se desdibuja el propsito de actualizar. Y, ya que estamos en este tema ...

Distincin entre Estado y Actualizacin


En Subversion, hemos intentado eliminar una gran parte de la confusi n entre el estado y cvs cvs update coman-dos. El comando cvs status tiene dos propsitos: primero, para mostrar al usuario las modificaciones locales en la copia de tra-bajo, y segundo, para mostrar al usuario qu archivos estn fuera de fecha. Desafortunadamente, debido a la CVS difcil de leer salida de estado, muchos usuarios de CVS no se aprovechan de este comando en absoluto. En cambio, han desarrollado un hbito de correr cvs update o cvs update-n para ver rpidamente los cambios. Si los usuarios olvidan usar la opcin-n, esto tiene el efecto secundario de la fusin de los cambios del repositorio que pueden no estar preparados para hacer frente a. Con Subversion, hemos intentado eliminar este desorden haciendo la salida de svn status fcil de leer para los humanos y analizadores. Tambin, svn update solo imprime informacin sobre los archivos que se actualizan, no modificaciones loc-al.

Estado
293

Subversion para usuarios de CVS svn status imprime todos los archivos con modificaciones locales. Por defecto, no se contacta con el repositorio. Mientras este subcomando acepta un nmero justo de las opciones, los siguientes son los ms utilizados: -U Contactar con el repositorio para determinar, y luego mostrar informacin fuera del grado de actualizacin. -V Mostrar todas las entradas bajo control de versiones. -N Ejecutar no recursiva (no descender en subdirectorios). El comando status tiene dos formatos de salida. En el formato "corto" por defecto, las modificaciones locales de este aspecto: $ Svn status M foo.c M bar / baz.c Si se especifica la opcin - show-updates (-u), se utiliza un formato de salida ms largo: $ Svn status-u M 1047 foo.c * 1045 faces.html * bloo.png M 1050 bar / Estado baz.c contra la revisin: 1066 En este caso, aparecen dos nuevas columnas. La segunda columna contiene un asterisco si el archivo o directorio est fuera de fecha. La tercera columna muestra el nmero de revisin de la copia de trabajo del artculo. En el ejemplo anterior, el asterisco indica que faces.html ser parcheado si actualizamos, y que bloo.png es un nuevo fichero aadido en el repositorio. (La ausencia de cualquier nmero de revisin junto a medios bloo.png que todava no existe en la copia de trabajo.) Por ltimo, aqu est un resumen rpido de los cdigos de estado ms comunes que puede ver: Un recurso est programado para ser aadido D recurso est previsto para el borrado M recursos tiene modificaciones locales C Recursos tiene conflictos (cambios no han sido completamente fusionado entre el repositorio y la versin copia de trabajo) X de recursos es externo a esta copia de trabajo (puede provenir de otra repositorio). Vea la seccin "svn: externals" ? El recurso no est bajo control de versiones ! Recursos falta o est incompleto (eliminado por otra herramienta de Subversion) Para una discusin ms detallada de la condicin de SVN, Consulte la seccin "svn status".

Actualizar
svn update actualiza su copia de trabajo, y slo muestra informacin sobre los archivos que se actualiza.

294 Subversion para usuarios de CVS Subversion ha combinado los cdigos U CVS P y en apenas U. Cuando ocurre una fusin o conflicto, Subversion simplemente imprime G o C, en lugar de una frase entera de ello.

Para una discusin ms detallada de SVN actualizacin, Consulte la seccin "Actualizar su copia de trabajo".

Ramas y etiquetas
Subversion no distingue entre el espacio del sistema de archivos y el espacio "sucursal", las ramas y las etiquetas son directorios or-dinarios en el sistema de archivos. Este es probablemente el mayor obstculo mental de un usuario de CVS tendrn que subir. Lea todo sobre esto en el Captulo 4, Crear ramas y fusionarlas.

Adverte ncia
Dado que Subversion trata las ramas y etiquetas como directorios ordinarios, recuerde siempre revisar el tronco (http://svn.example.com/repos/calc/trunk/) de su proyecto, y no el propio proyecto (http://svn.example.com/repos/calc/). Si comete el error de echar un vistazo al proyecto en s, vas a terminar con una copia de trabajo que contiene una copia de su proyecto para cada rama y etiqueta que have.1

Propiedades de metadatos
Una nueva caracterstica de Subversion es que se puede adjuntar metadatos arbitrarios (o "propiedades") para archivos y dir-ectories. Las propiedades son pares arbitrarios nombre / valor asociados con ficheros y directorios en su copia de trabajo. Para establecer u obtener un nombre de propiedad, utilice el svn propset y svn propget subcomandos. Para una lista de todas las propiedades de un objeto, use svn proplist. Para obtener ms informacin, consulte la seccin "Propiedades".

Resolucin de conflictos
CVS marca conflictos con in-line "marcas de conflicto", e imprime una C durante la actualizacin. Histricamente, esto ha causado problemas, porque CVS no est haciendo lo suficiente. Muchos usuarios se olvidan (o no ver) el C despus de que esta silbe en su terminal. A menudo se olvida que las marcas de conflicto son an presentes, y luego cometen ac-accidentalmente archivos que contienen las marcas de conflicto. Subversion resuelve este problema haciendo que los conflictos ms tangibles. Recuerda que un archivo est en un estado de conflicto, y no permitir que sus cambios hasta que ejecute svn resolved. Consulte laseccin denominado "Resolver conflictos (fusionando los cambios de otros)" para ms detalles.

Archivos binarios y traduccin


En el sentido ms general, Subversion maneja ficheros binarios ms elegantemente que CVS. Porque CVS usa RCS, solo puede almacenar copias completas sucesivas de un archivo binario que cambia. Sin embargo, Subversion expresa las diferencias entre ficheros usando un algoritmo de diferenciacin binario, independientemente de si contienen datos de texto o binario. Eso significa que todos los archivos se almacenan diferenciados (comprimidos) en el repositorio. Usuarios de CVS tienen que marcar los archivos binarios banderas con-kb, para evitar que los datos sean ilegibles (debido a la palabra clave

1Que es, siempre que no se quede sin espacio en disco antes de que termine su comprobacin.

295 Subversion para usuarios de CVS expansin y traducciones de final de lnea). A veces se olvidan de hacerlo. Subversion toma la ruta ms paranoica-primero, nunca lleva a cabo ningn tipo de clave o de fin de lnea de traduccin a menos que pedir explcitamente hacerlo (vase el"svn: keywords" y elseccin "svn: eol-style" para ms detalles). Por defecto, Subversion trata todos los datos del archivo como cadena literal de bytes, y los archivos siempre se almacenan en el repositorio en un estado sin traducir. Segundo, Subversion mantiene una nocin interna de si un archivo es datos "binarios" "texto" o, pero esta no-cin es slo existente en la copia de trabajo. Durante un svn update, Subversion realizar fusiones contextuales en ficheros de texto modificados localmente, pero no intentar hacerlo para archivos binarios. Para determinar si una fusin de contexto es posible, Subversion examina la propiedad svn: mime-type. Si el archivo no tiene ninguna propiedad svn: mime-type, o tiene un tipo MIME que es textual (por ejemplo, text / *), Subversion asume que es texto. De lo contrario, Subversion asume que el fichero es binario. Subversion tambin ayuda a los usuarios mediante la ejecucin de un algoritmo de deteccin de binarios en los comandos svn add y svn import. Estos comandos harn una buena conjetura y despus (posiblemente) establecer un svn binario: propiedad de tipo mime del archivo se agrega. (Si Subversion supone mal, el usuario siempre puede eliminar o editar a mano la propiedad.)

Mdulos versionados
A diferencia de CVS, una copia de trabajo de Subversion es consciente de que se ha extrado un mdulo. Eso significa que si alguien cambia la definicin de un mdulo (por ejemplo, agrega o quita componentes), a continuacin, una llamada a svn actualizar actualizar la copia de trabajo apropiada, agregar y quitar componentes. Subversion define los mdulos como una lista de directorios dentro de una propiedad del directorio: ver elseccin llamada "Externos".

Autenticacin
Con el servidor de CVS, usted est obligado a "login" en el servidor antes de cualquier lectura o escritura-incluso tienes que iniciar sesin para operaciones annimas. Con un repositorio de Subversion usando Apache httpd o svn-servir como servidor, no proporciona las credenciales de autenticacin en un principio, si una operacin que se realiza requiere autenticacin, el servidor le desafiar para sus credenciales (si esas credenciales son nombre de usuario y una contrasea, un certificado de cliente, o incluso ambos). As que si su depsito es de lectura global, que no ser necesario autenticarse en todas las operaciones de lectura. Al igual que con CVS, Subversion todava guarda en cach sus credenciales en disco (en el archivo ~ / .subversion / auth / dir-ectory) a menos que usted le indique no mediante el uso de la opcin - no-authcache. La excepcin a este comportamiento, sin embargo, es en el caso de acceder a un servidor svnserve sobre un tnel SSH, utilizando los + esquema :/ / URL ssh svn. En ese caso, el programa ssh exige incondicionalmente la autenticacin slo para iniciar el tnel.

Convirtiendo un repositorio de CVS a Subversion

Tal vez la forma ms importante para familiarizar a los usuarios de CVS con Subversion es dejarles seguir trabajando en sus proyectos utilizando el nuevo sistema. Y mientras que eso puede ser algo a cabo utilizando una importacin plana a un repositorio Subversion de un repositorio CVS exportado, la solucin ms completa implica no slo la transferencia de la ltima instantnea de sus datos, pero toda la historia detrs de l, as, de un sistema de a otro. Este es un problema muy difcil de resolver que consiste en deducir de cambios en la ausencia de atomicidad, y la traduccin entre las polticas completamente ortogonales de ramificacin de los sistemas, entre otras complicaciones. Sin embargo, hay un puado de herramientas que pretenden apoyar al menos parcialmente la capacidad de convertir los repositorios existentes de CVS en unos de Subversion.

296 Subversion para usuarios de CVS Una de estas herramientas es cvs2svn(Http://cvs2svn.tigris.org/), un script de Python creado originalmente por los miembros de la comunidad de desarrollo propio Subversion. Otros incluyen RefineCVS de Lev Serebryakov (ht-tp :/ / lev.serebryakov.spb.ru / refinecvs /). Estas herramientas tienen distintos niveles de integridad, y pueden hacer totalmente diferentes decisiones sobre cmo manejar su historial repositorio CVS. Cualquiera que sea la herramienta que se de-cide de usar, asegrese de realizar tanto la verificacin como se puede estar en la conversin de los resultados, despus de todo, usted ha trabajado duro para construir esa historia! Para una coleccin actualizada de enlaces a herramientas de conversin conocidos, visite la pgina de enlaces de la web Subversion- sitio (http://subversion.tigris.org/project_links.html). 297

Apndice B. WebDAV y autoversionado


WebDAV es una extensin de HTTP, y se est volviendo ms y ms popular como un estndar para el intercambio de archivos. Sistemas operativos de hoy en da son cada vez compatibles con la web, y muchos tienen ahora soporte integrado para el montaje "acciones" exportados por servidores WebDAV. Si utiliza Apache / mod_dav_svn como su servidor de red Subversion, entonces, hasta cierto punto, tambin est ejecutando un servidor WebDAV. Este apndice proporciona algunos antecedentes sobre la naturaleza de este protocolo, cmo Subversion usa, y qu tan bien interopera Subversion con otro software que es WebDAV-aware.

Conceptos bsicos de WebDAV


Esta seccin proporciona una visin general muy breve, muy general de las ideas detrs de WebDAV. Se debe sentar las bases para la comprensin de los problemas de compatibilidad WebDAV entre clientes y servidores.

Original WebDAV
RFC 2518 define un conjunto de conceptos y mtodos de extensin acompaantes a HTTP 1.1 que hacen de la web un medio de lectura / escritura ms universal. La idea bsica es que un servidor web compatible con WebDAV puede actuar como un servidor de archivos genricos, los clientes pueden montar las carpetas compartidas que se comportan de manera muy similar a NFS o SMB sistemas de archivos. La tragedia, sin embargo, es que la especificacin RFC 2518 WebDAV no proporciona ningn tipo de modelo para el control de versiones, a pesar de la "V" en el DAV. Clientes WebDAV bsicos y servidores asumen slo una versin de cada archivo o directorio existe y puede ser sobreescrita repetidamente.

Estos son los conceptos y los trminos introducidos en WebDAV bsica: Recursos Mazarota WebDAV se refiere a cualquier objeto del lado del servidor (que puede ser descrito con un URI) como un recurso. Los nuevos mtodos de escritura Ms all del mtodo estndar HTTP PUT (que crea o sobreescribe un recurso web), WebDAV define nueva COPIARy mover mtodos para duplicar o reacomodar recursos. Coleccione s Una coleccin es el trmino WebDAV para una agrupacin de recursos. En la mayora de los casos, es anlogo a un directorio. Considerando que los recursos de archivos pueden ser escritos o creados con un mtodo PUT, los recursos de recoleccin se crean con el nuevo mtodo MKCOL. Propiedad es Esta es la misma idea que est presente en Subversion-metadatos asociados a archivos y colecciones. Un cliente puede enumerar o propiedades re-cuperar unidos a un recurso con el nuevo mtodo PROPFIND, y puede cambiar con el mtodo PROP-PATCH. Algunas propiedades son completamente creadas y controladas por los usuarios (por ejemplo, una propiedad llamada "Color"), y otros son totalmente creados y controlados por el servidor WebDAV (por ejemplo, una propiedad que contiene la ltima vez modifica-cin de un archivo). El primer tipo se denominan propiedades muertos, y el segundo tipo se denominan propiedades en vivo. Cierre Un servidor WebDAV puede decidir ofrecer una funcin de bloqueo a los clientes-esta parte de la especificacin es opcional, si bien la mayora de servidores WebDAV ofrecen esta funcin. Si est presente, los clientes pueden utilizar el nuevo bloquear y desbloquear los mtodos para mediar el acceso a un recurso. En la mayora de los casos se utilizan estos mtodos para crear bloqueos exclusivos de escritura (como se explica enla seccin "La solucin bloquear-modificar-desbloquear"), Aunque los bloqueos de escritura compartida tambin

298 WebDAV y autoversionado posible en algunas implementaciones del servidor. El control de acceso Una especificacin ms reciente (RFC 3744) define un sistema para la definicin de las listas de control de acceso (ACL) en recursos WebDAV. Algunos clientes y servidores han comenzado a implementar esta funcin.

Extensiones DeltaV
Debido RFC 2518 dej fuera versionado conceptos, otro comit se qued con la responsabilidad de escribir el RFC 3253, que se suma a la de versiones WebDAV, tambin conocido como "DeltaV". Clientes y servidores WebDAV / DeltaV a menudo son llamados slo los programas "DeltaV", ya que DeltaV implica la existencia de WebDAV bsico. DeltaV introduce una gran cantidad de nuevas siglas, pero no te dejes intimidar. Las ideas son bastante simples: Versiones de los recursos por Como CVS y otros sistemas de control de versiones, DeltaV asume que cada recurso tiene un nmero potencialmente infinito de estados. Un cliente empieza poniendo un recurso bajo control de versiones con el

nuevo mtodo de control de versiones. Modelo copia de trabajo del lado del servidor Algunos servidores DeltaV apoyan la posibilidad de crear un espacio de trabajo virtual en el servidor, donde se realiza todo el trabajo. Los clientes utilizan el mtodo MKWORKSPACE para crear un rea privada, luego indican que quieren cambiar los recursos especficos "comprobar hacia fuera" en el espacio de trabajo de edicin, y "comprobar en" otra vez. En trminos de HTTP, la secuencia de mtodos sera CHECKOUT, PUT, CHECKIN. Modelo copia de trabajo del lado del cliente Algunos servidores DeltaV tambin soportan la idea de que el cliente puede tener una copia de trabajo privado en el disco local. Cuando el cliente quiere enviar cambios al servidor, que comienza por la creacin de una operacin temporal del servidor (llamado una actividad) con el mtodo NKACTIVITY. El cliente realiza una compra, en cada recurso que desee cambiar y enva peticiones PUT. Por ltimo, el cliente realiza un recurso de registro, o enva una solicitud MERGE para comprobar en todos los recursos a la vez. Configuracion es DeltaV le permite definir colecciones flexibles de recursos llamados "configuraciones", que no necesariamente se cor-responde a los directorios particulares. La configuracin se puede hacer para que apunte a versiones especficas de los archivos, y luego una instantnea "de referencia" se puede hacer, al igual que una etiqueta. Extensibilid ad DeltaV define un nuevo mtodo, REPORT, que permite que el cliente y el servidor para llevar a cabo los datos personalizados inter-cambios. Mientras DeltaV define una serie de informes de la historia estandarizados que un cliente puede solicitar, el servidor tambin es libre de definir informes personalizados. El cliente enva una solicitud de informe con un cuerpo XML adecuadamente etiquetado y lleno de datos personalizados, asumiendo que el servidor entiende el tipo de informe especfico, responde con un cuerpo XML igualmente personalizado. Esta tcnica es muy similar a XML-RPC.

Subversion y DeltaV
El estndar WebDAV original ha sido muy exitosa. Cada sistema operativo del ordenador moderno tiene un cliente WebDAV generales incorporada (detalles a seguir), y una serie de aplicaciones independientes populares tambin son capaces de hablar WebDAV - Microsoft Office, Dreamweaver y Photoshop, por nombrar algunos. En el lado del servidor, el servidor web Apache ha sido capaz de proporcionar servicios WebDAV desde 1998 y es considerado el estndar de cdigo abierto de-facto. Hay varios otros servidores WebDAV comerciales disponibles, incluyendo propio IIS de Microsoft. DeltaV, por desgracia, no ha tenido tanto xito. Es muy difcil encontrar clientes o servidores DeltaV.

299 WebDAV y autoversionado Los pocos que existen son productos comerciales relativamente desconocidos, y por lo tanto es muy difcil de probar en teroperability. No es del todo claro por qu DeltaV se ha mantenido estancada. Algunos argumentan que la espe-calcificacin es demasiado complejo, otros sostienen que, si bien las caractersticas de WebDAV tienen atractivo para las masas (incluso los usuarios menos tcnicos aprecian red de intercambio de archivos), las caractersticas de control de versiones que no son interesantes o necesarias para la mayora de usuarios. Por ltimo, algunos han argumentado que DeltaV sigue siendo impopular porque todava no hay producto de servidor de cdigo abierto que implementa. Cuando Subversion todava estaba en su fase de diseo, me pareci una gran idea de utilizar el servidor web Apache como servidor de red principal. Ya tena un mdulo para proporcionar servicios WebDAV. DeltaV es una especificacin relativamente nuevo. La esperanza era que el mdulo de servidor Subversion (mod_dav_svn) eventualmente evolucionar hacia una implementacin de referencia DeltaV de cdigo abierto. Desafortunadamente, DeltaV tiene un modelo de control de versiones muy especficas

que no acaba de alinearse con el modelo de Subversion. Algunos conceptos son asignables, otros no. El resultado es que 1. El cliente Subversion no es un cliente DeltaV totalmente implementado. El cliente necesita ciertas cosas desde el servidor DeltaV no puede proporcionar, por lo que es en gran parte de-pendiente de una serie de solicitudes de informes especficas de Subversion que slo mod_dav_svn entiende. 2. mod_dav_svn no es un servidor DeltaV totalmente implementado. Muchas partes de la especificacin DeltaV eran irrelevantes para Subversion, y por lo tanto dejaron unimplemen-ted. Todava hay un cierto debate en la comunidad de desarrolladores en cuanto a si o no vale la pena para remediar cualquiera de estas situaciones. Es bastante realista de cambiar el diseo de Subversion para que coincida con DeltaV, por lo que probablemente es imposible que el cliente siempre puede aprender a conseguir todo lo que necesita de un servidor DeltaV general. Por otro lado, mod_dav_svn podra desarrollarse an ms para ejecutar la totalidad de DeltaV, pero es difcil encontrar la motivacin para hacerlo, casi no hay clientes DeltaV para interoperar con.

Autoversionado
Mientras que el cliente Subversion no es un cliente DeltaV completo, ni el servidor de Subversion un completo servidor DeltaV, todava hay un rayo de interoperabilidad WebDAV para ser feliz: se llama autoversionado. Autoversionado es una caracterstica opcional definida en la norma DeltaV. Un servidor tpico DeltaV rechazar un cliente WebDAV ignorante tratando de hacer un PUT a un archivo que est bajo control de versiones. Para cambiar un archivo con control de versiones, el servidor espera una serie de solicitudes de versiones adecuadas: algo as como NKACTIVITY, CHECKOUT, PUT, CHECKIN. Pero si el servidor DeltaV soporta autoversionado, entonces se aceptan a prdidas y solicitudes de los clientes WebDAV bsicos. El servidor se comporta como si el cliente haba emitido la serie adecuada de las solicitudes de versiones, la realizacin de un compromiso bajo el cap. En otras palabras, se permite que un servidor DeltaV para interoperar con clientes WebDAV ordinarias que no entienden de versiones. Debido a que muchos sistemas operativos ya han integrado los clientes WebDAV, el caso de uso de esta caracterstica-tura raya en lo fantstico: imagine una oficina de usuarios ordinarios ejecutando Microsoft Windows o Mac OS. Cada usuario "monta" el repositorio Subversion, que parece ser una carpeta de red comn. Utilizan la carpeta compartida como siempre lo hacen: los archivos abiertos, editarlos, guardarlos. Mientras tanto, el servidor automticamente versiones de todo. Cualquier administrador (o el usuario profesional) todava puede usar un cliente de Subversion para buscar la historia y recuperar versiones anteriores de los datos. Este escenario no es ficcin: es real y funciona, desde Subversion 1.2 y posteriores. Para activar-ing autoversion en mod_dav_svn, use la directiva SVNAutoversioning dentro del bloque Location httpd.conf, as:

300 WebDAV y autoversionado <Location /repos> DAV svn SVNPath / path / to SVNAutoversioning / repositorio en </ Location>

Cuando SVNAutoversioning est activo, escribir solicitudes de los clientes WebDAV resultado automtico comete. Un mensaje de registro genrico se genera automticamente y se une a cada revisin. Antes de activar esta funcin, sin embargo, entiende lo que se est metiendo. Clientes WebDAV tienden a hacer muchas peticiones de escritura, lo que resulta en un gran nmero de revisiones entregadas automticamente. Por ejemplo, al guardar los datos, muchos clientes van a hacer un PUT de un archivo de 0 byte (como una forma de reservar un nombre) seguido de otro PUT con el filedata real. Los resultados individuales de archivos de escritura en sendos compromete. Tambin con-sider que muchas aplicaciones de auto-guardar cada pocos minutos, lo que compromete an ms. Si usted tiene un programa de post-commit hook que enva correo electrnico, es posible que desee deshabilitar la generacin de correo electrnico o bien por completo, o en determinados tramos del repositorio, sino que depende de si usted cree que la afluencia de emails an resultar ser notificaciones valiosos o no . Adems, un programa de post-commit hook inteligente puede distinguir entre una operacin creada por autoversionado y uno creado a travs de un comando svn com-mit. El truco es buscar una propiedad de revisin llamado svn: autoversioned. Si est presente, la confirmacin fue hecha por un cliente WebDAV genrico. Otra caracterstica que puede ser un complemento til para SVNAutoversioning viene de mod_mime mdulo de Apache. Si un cliente WebDAV genrica agrega un nuevo archivo en el repositorio, no hay oportuni-dad para el usuario para establecer el la propiedad svn: mime-type. Esto puede hacer que el archivo para que aparezca como icono "genrico" cuando se ve en una carpeta compartida WebDAV, que no tenga relacin con ninguna apli-cacin. Una solucin es tener un administrador de sistemas (u otra persona Subversion-eficiente) echa un vistazo a una copia de trabajo y establecer manualmente la propiedad svn: mime-type de los archivos necesarios. Pero hay potencialmente sin fin a este tipo de tareas de limpieza. En su lugar, puede utilizar la directiva ModMimeUsePathInfo en su bloque <Location> Subversion: <Location /repos> DAV svn SVNPath / path / to SVNAutoversioning / repositorio en ModMimeUsePathInfo en </ Location> Esta directiva permite mod_mime intentar deduccin automtica de mime-type en el que entran nuevos archivos al repositorio mediante autoversionado. El mdulo analiza el archivo con el nombre de extensin y, posiblemente, los contenidos, as, si el archivo coincide con algunos patrones comunes, entonces el archivo de svn; tipo MIME propie-dad se ajustar automticamente.

Interoperabilidad Cliente
Todos los clientes de WebDAV caen en una de tres categoras: aplicaciones independientes y extensiones de archivos, explorador o implementaciones de sistemas de archivos. Estas categoras definen ampliamente los tipos de funcionalidad WebDAV disponible para los usuarios.Tabla B.1, "Los clientes WebDAV comunes" da nuestra categorizacin y una rpida des-cripcin de algunas piezas comunes de software compatible con WebDAV. Ms detalles acerca de estos programas de-ferings, as como su categora general, se pueden encontrar en las secciones que siguen.

Tabla B.1. Los clientes WebDAV comunes


301 WebDAV y autoversionado Software Categora Descripcin

Adobe Photoshop

Aplicaciones WebDAV independientes Aplicaciones WebDAV independientes Aplicaciones WebDAV independientes WebDAV aplicacin del sistema de archivos File-explorer extensiones WebDAV File-explorer extensiones WebDAV WebDAV aplicacin del sistema de archivos Aplicaciones WebDAV independientes Aplicaciones WebDAV independientes File-explorer extensiones WebDAV

Cadver

Software de edicin de imagen, lo que permite dir-ect apertura de, y escribir, las direcciones URL WebDAV De lnea de comandos WebDAV cliente de transferencia apoyando archivo, rbol, y las operaciones de bloqueo Herramienta GUI para explorar recursos compartidos de WebDAV Controlador de sistema de archivos de Linux que le permite montar un recurso compartido WebDAV GUI explorador de archivos capaz de realizar operaciones de rboles en un recurso compartido WebDAV GUI explorador de archivos capaz de realizar operaciones de rboles en un recurso WebDAV Sistema compartido operativo con una funcin de apoyo para el montaje de recursos compartidos de WebDAV localmente Software de produccin Web capaz de dir-rectamente leer y escribir a las direcciones URL WebDAV Suite de productividad de oficina con varios componentes que pueden leer directamente desde y escribir a las direcciones URL de WebDAV GUI programa explorador de archivos capaz de realizar operaciones de rboles en un recurso compartido WebDAV Programa de Drive-asignacin para asignar letras de unidad de Windows en un recurso compartido WebDAV remoto montado Software de transferencia de archivos que, entre otras cosas, permite la asignacin de letras de unidad de Windows en un recurso compartido WebDAV remoto montado

DAV Explorador davfs2 GNOME Nautilus KDE Konqueror Mac OS X

Macromedia Dreamweaver

Microsoft Office

Carpetas Web de Microsoft

Novell NetDrive

WebDAV aplicacin del sistema de archivos WebDAV aplicacin del sistema de archivos

SRT WebDrive

Aplicaciones WebDAV independientes


Una aplicacin WebDAV es un programa que contiene una funcionalidad integrada por hablar a favor los protocolos WebDAV con un servidor WebDAV. Vamos a cubrir algunos de los programas ms populares con este tipo de soporte WebDAV.

Microsoft Office, Dreamweaver, Photoshop


En Windows, hay varias aplicaciones conocidas que contienen cliente WebDAV integrado funcionalidad, como Office de Microsoft, 1 Photoshop de Adobe, y los programas Dreamweaver de Macromedia. Son capaces de abrir y guardar directamente a las direcciones URL, y tienden a hacer un uso intensivo de las cerraduras WebDAV al editar un archivo. Tenga en cuenta que, si bien muchos de estos programas existen tambin para el Mac OS X, no parecen apoyar WebDAV directamente en esa plataforma. De hecho, en Mac OS X, Archivo-> Abrir el cuadro de dilogo no permite

Apoyo 1WebDAV fue retirado de Microsoft Access, por alguna razn, pero existe en el resto de la suite Office.

302 WebDAV y autoversionado

para escribir una ruta o URL en absoluto. Es probable que las caractersticas de WebDAV se dejaron deliberadamente fuera de las versiones para Macintosh de estos programas, ya que OS X ya provee tan excelente soporte del sistema de archivos de bajo nivel para WebDAV.

Cadaver, DAV Explorador


Cadaver es un escueto programa de lnea de comandos Unix para la navegacin y el cambio de recursos compartidos de WebDAV. Al igual que el cliente de Subversion, utiliza el HTTP neon biblioteca-como era de esperar, tanto nen y cadaver son auto-ten por el mismo autor. Cadaver es software libre (licencia GPL) y est disponible en ht-tp :/ / www.webdav.org/cadaver/. Usando cadver es similar al uso de un programa de FTP de lnea de comandos, por lo que es muy til para la depuracin WebDAV bsico. Se puede utilizar para cargar o descargar archivos en un apuro, y tambin para examinar propieda-des, copiar, mover, bloquear o desbloquear archivos: $ Cadver http://host/repos dav :/ repos /> ls Listado coleccin `/ repos / ': xito. Coll:> foobar 0 10 de mayo 16:19 > Playwright.el 04 de mayo 2864 16:18 > Proofbypoem.txt 05 de mayo 1461 15:09 > Westcoast.jpg 66737 05 de mayo 15:09 dav :/ repos /> poner README Carga README para `/ repos / README ': Progreso: [=============================>] 100,0% de 357 bytes sucedi. dav :/ repos /> get proofbypoem.txt Descarga de `/ repos / proofbypoem.txt 'a proofbypoem.txt: Progreso: [=============================>] 100,0% de 1461 bytes sucedi. DAV Explorer es otro cliente WebDAV independiente, escrito en Java. Es en virtud de un libre Apachecomo li-cencia y est disponible enhttp://www.ics.uci.edu/ ~ webdav /. DAV Explorer no todo cadver hace, pero tiene la ventaja de ser porttil y ser ms aplicacin con interfaz grfica fcil de usar. Es tambin uno de los primeros clientes para apoyar el nuevo Protocolo de control de acceso WebDAV (RFC 3744). Por supuesto, el apoyo ACL de DAV Explorer es intil en este caso, dado que mod_dav_svn no lo soporta. El hecho de que tanto el cadver y DAV Explorador apoyan algunos comandos DeltaV limitados no es particularmente til ya sea, ya que no permiten peticiones NKACTIVITY. Pero no es relevante de todas formas, estamos de asumir que todos estos clientes estn operando con un almacn de autoversionado.

File-explorer extensiones WebDAV


Algunos programas populares explorador de archivos GUI extensiones de WebDAV, que permiten al usuario navegar por una parte DAV como si fuera slo un directorio en el equipo local, y permitir rbol bsicas de edicin de operacio-nes de los elementos de esa accin. Por ejemplo, el Explorador de Windows es capaz de navegar por el servidor WebDAV como un "lugar de la red". Los usuarios pueden arrastrar archivos desde y hacia el escritorio, o puede cambiar el nombre, copiar o eliminar archivos de la forma habitual. Pero debido a que es slo una caracterstica del explorador de archivos, la participacin DAV no es visible para las aplicaciones Ordin-arias. Toda la interaccin DAV debe pasar a travs de la interfaz de explorador.

Carpetas Web de Microsoft


Microsoft fue uno de los patrocinadores originales de la especificacin WebDAV, y comenz el envo de un cli-ent en Windows 98, conocido como "Carpetas Web". Este cliente tambin fue enviado en Windows NT4 y 2000.

El cliente de carpetas web original era una extensin de Explorer, el programa principal de la GUI utiliza para navegar

303 WebDAV y autoversionado sistemas de archivos. Funciona bastante bien. En Windows 98, puede ser que necesite la funcin para ser instalado de forma explcita si las carpetas Web no son ya visibles dentro de "Mi PC". En Windows 2000, slo tiene que aadir un nuevo "lugar de la red", escriba la direccin URL y el recurso compartido WebDAV se abrir para la navegacin. Con el lanzamiento de Windows XP, Microsoft comenz a enviar una nueva implementacin de carpetas Web, conocida como la "mini-redirector WebDAV". La nueva implementacin es un cliente de sistema de archivos de nivel, permitiendo recursos compartidos de WebDAV que se montan como letras de unidad. Por desgracia, esta aplicacin es muy errneo. El cliente generalmente se trata de convertir URLs http (http://host/repos) a notacin compartido UNC (\ \ Host \ repos), sino que tambin a menudo trata de usar la autenticacin de dominio de Windows para responder a los desafos de autenticacin bsica-HTTP, enviar nombres de usuario como HOST \ nombre de usuario. Estos problemas de interoperabilidad son graves y documentados en numerosos lugares alrededor de la web, a la frustracin de muchos usuarios. Incluso Greg Stein, el autor original del mdulo de WebDAV de Apache, recomienda no tratar de utilizar carpetas Web XP en un servidor Apache. Resulta que el original "Explorador de slo" la aplicacin Carpetas Web no est muerto en XP, es slo bur-IED. Todava es posible encontrar que utilizando esta tcnica: 1. 2. 3. 4. Ir a "Mis sitios de red '. Aadir un nuevo sitio de red. Cuando se le solicite, introduzca la URL del repositorio, sino que incluyen un nmero de puerto en la URL. Por ejemplo,http://host/repos sera ingresado como http://host:80/repos lugar. Responda a autenticacin. los mensajes de

Hay una serie de soluciones a los problemas que se rumorea, pero ninguno de ellos parece funcionar en todas las versiones y patchlevels de Windows XP. En nuestras pruebas, slo el algoritmo anterior parece funcionar consistentemente en todos los sistemas. El consenso general de la comunidad WebDAV es que se debe evitar la nueva aplicacin Carpetas Web y utilice el viejo lugar, y que si usted necesita de verdad un cliente real del sistema de archivos de nivel para Windows XP, a continuacin, utilizar un programa de terceros como WebDrive o NetDrive. Un ltimo consejo: si usted est tratando de utilizar carpetas Web XP, asegrese de que usted tiene la absoluta ltima versin de Microsoft. Por ejemplo, Microsoft lanz una versin bug-fija en enero de 2005, disponible en: ht- tp :/ / support.microsoft.com /? kbid = 892211. En particular, esta versin es conocida para corregir un error de navegacin mediante el cual una parte DAV muestra una recursividad infinita inesperado.

Nautilus, Konqueror
Nautilus es el navegador oficial encargado / archivos para el escritorio GNOME(Http://www.gnome.org), y Konqueror es el administrador / explorador de escritorio KDE (http://www.kde.org). Ambas aplicaciones tienen un cliente WebDAV explorador de nivel incorporado, y funcionan muy bien contra un autoversionado reposit de memoria. En Nautilus de GNOME, en el men Archivo, seleccione Abrir ubicacin e introduzca la URL. El depsito se debe mostrar como cualquier otro sistema de archivos. En Konqueror de KDE, es necesario utilizar el :/ / webdav esquema al introducir la URL en la barra de

direcciones. Si introduce una URL http://, Konqueror se comportar como un navegador web normal. Es probable que note el listado del directorio HTML genrico producido por mod_dav_svn. Al entrar en la web dav :/ / host / repositorio en lugar dehttp://host/repos, Konqueror se convierte en un cliente WebDAV y muestra el repositorio como un sistema de archivos.

WebDAV aplicacin del sistema de archivos


La implementacin del sistema de archivos WebDAV es sin duda el mejor tipo de cliente WebDAV. Se implement

304 WebDAV y autoversionado como un mdulo de sistema de archivos de bajo nivel, por lo general dentro del ncleo del sistema operativo. Esto significa que la proporcin DAV se monta como cualquier otro sistema de archivos de red, similar a montar datos compartidos con NFS en Unix, o colocar un recurso compartido SMB como letra de unidad en Windows. Como resultado, este tipo de cliente proporciona completamente transparente lectura / escritura WebDAV a todos los programas. Las aplicaciones no son an conscientes de que las solicitudes WebDAV estn sucediendo.

WebDrive, NetDrive
Tanto WebDrive y NetDrive son excelentes productos comerciales que permite a un recurso compartido WebDAV que se adjunta como letras de unidad en Windows. Hemos tenido nada ms que xito con estos productos. En el momento de la escritura, WebDrive puede adquirirse en Tecnologas South River(Http://www.southrivertech.com). Barcos NetDrive con Netware, es gratis, y se puede encontrar mediante la bsqueda en la web para "netdrive.exe". A pesar de que est disponible gratuitamente en lnea, los usuarios estn obligados a tener una licencia de Netware. (Si nada de eso suena extrao para usted, usted no est solo Ver esta pgina en el sitio Web de Novell:. Ht- tp :/ / www.novell.com/coolsolutions/qna/999.html)

Mac OS X
Sistema operativo OS X de Apple tiene un cliente WebDAV sistema de archivos de nivel integrado. En el Finder, seleccio-nar la conexion con el tema del servidor desde el men Ir.. Introduzca una URL WebDAV, y aparece como un disco en el escritorio, al igual que cualquier otra montada volume.2. Tenga en cuenta que si su mod_dav_svn es anterior a la versin 1.2, OS X se niegan a montar el recurso compartido de lectura y escritura, sino que aparecer como de slo lectura. Esto es debido a que el OS X insiste en bloquear el apoyo a las acciones de lectura y escritura, y la capacidad de bloquear los archivos aparecieron por primera vez en Subversion 1.2. Una palabra de advertencia: El cliente WebDAV de OS X a veces puede ser demasiado sensible a HTTP redir-yectos. Si OS X no puede montar el repositorio en absoluto, puede que tenga que activar el BrowserMatch directo ive en httpd.conf del servidor Apache: BrowserMatch cuidado "^ WebDAVFS / 1. [012]" redirect-

Linux davfs2
Linux davfs2 es un mdulo de sistema de archivos para el kernel de Linux, cuyo desarrollo se encuentra en ht- tp :/ / dav.sourceforge.net /. Una vez instalado, una red compartida WebDAV se puede montar con el comando mount habitual Linux: $ Mount.davfs http://host/repos / Mnt / dav

2Desde la terminal de Darwin, tambin se puede ejecutar

mount-t webdav URL / punto de montaje

305

Apndice C. Herramientas de terceras partes


El diseo modular de Subversion (cubierto enla seccin "Biblioteca de diseo en capas") Y la disponibilidad de los enlaces de lenguaje (como se describe en elseccin titulada "Usando lenguajes distintos de C y C + +") Lo convierten en un probable candidato para su uso como una extensin o back-end a otras piezas de software. Para obtener una lista de las muchas herramientas de terceros que utilizan la funcionalidad de Subversion bajo el cap, echa un vistazo a la pgina de enlaces en el sitio web de Subversion (http://subversion.tigris.org/project_links.html).

306

Apndice D. Derecho de Autor


Copyright (c) 2002-2005 Ben Collins-Sussman, Brian W. Fitzpatrick, C. Michael Pilato. Este trabajo est licenciado bajo la licencia Creative Commons Attribution. Para ver una copia de esta licencia, visite http://creativecommons.org/licenses/by/2.0/ o enve una carta a Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, EE.UU.. Un resumen de la licencia se da a continuacin, seguido por el texto legal completo. -------------------------------------------------- -----------------Usted es libre de: * copiar, distribuir y comunicar pblicamente la obra * para hacer trabajos derivados * hacer un uso comercial de la obra Bajo las siguientes condiciones: Reconocimiento. Usted debe dar crdito al autor original. * Para cualquier reutilizacin o distribucin, deben establecer claramente a los dems los trminos de la licencia de esta obra. * Cualquiera de estas condiciones puede no aplicarse si se obtiene el permiso del autor. De usos legtimos u otros derechos no son de ninguna manera afectados por lo anterior. Lo anterior es un resumen de la licencia completa a continuacin. ================================================== ================== Creative Commons Reconocimiento 2.0 Cdigo Legal

CREATIVE COMMONS CORPORATION NO ES UN DESPACHO DE ABOGADOS Y NO PROPORCIONA SERVICIOS JURDICOS. LA DISTRIBUCIN DE ESTA LICENCIA NO CREA UNA RELACIN ABOGADO-CLIENTE. CREATIVE COMMONS PROPORCIONA ESTA INFORMACIN EN "TAL CUAL". CREATIVE COMMONS NO OFRECE GARANTAS SOBRE LA INFORMACIN SUMINISTRADA, NI ASUME RESPONSABILIDAD ALGUNA POR LOS DAOS DERIVADOS DE SU USO. Licencia LA OBRA (SEGN SE DEFINE MS ADELANTE) SE PROPORCIONA BAJO LOS TRMINOS DE ESTA LICENCIA PBLICA DE CREATIVE Commons ("CCPL" O "LICENCIA"). LA OBRA EST PROTEGIDA POR DERECHOS DE AUTOR Y / U OTRAS LEYES APLICABLES. CUALQUIER USO DE LA OBRA DIFERENTE A LO AUTORIZADO BAJO ESTA LICENCIA O LAS LEYES SE PROHBE. MEDIANTE EL EJERCICIO DE LOS DERECHOS QUE SE OTORGAN AQU, USTED ACEPTA Y SE COMPROMETE A RESPETAR LOS TRMINOS DE ESTA LICENCIA. EL LICENCIANTE LE CONCEDE LOS DERECHOS CONTENIDOS EN CONSIDERACIN DE LA ACEPTACIN DE ESTOS TRMINOS Y CONDICIONES.

307 Derechos de autor 1. Definiciones a. "Obra Colectiva" significa una obra, tal como una edicin peridica, antologa o enciclopedia, en la que la obra en su totalidad, sin modificacin, junto con un nmero de otras contribuciones, que constituyen obras separadas e independientes en s mismas, se ensamblan en un colectivo conjunto. Una obra que constituye una Obra Colectiva no ser considerada una Obra Derivada (como se define ms abajo) a los fines de esta Licencia. b. "Obra Derivada" significa una obra basada sobre la Obra o sobre la Obra y otras obras preexistentes, tales como una traduccin, arreglo musical, dramatizacin, ficcionalizacin, versin cinematogrfica, grabacin sonora, reproduccin artstica, resumen, condensacin, o cualquier otra forma en la cual la Obra puede ser reformulada, transformada o adaptada, excepto que una obra que constituye una Obra Colectiva no ser considerada una Obra Derivada a los fines de esta Licencia. Para evitar dudas, cuando la Obra es una composicin musical o grabacin de sonidos, la sincronizacin de la Obra en una relacin temporal con una imagen en movimiento ("sincronizacin") ser considerada una Obra Derivada a los fines de esta Licencia. c. "Licenciante" significa el individuo o entidad que ofrece la Obra bajo los trminos de esta Licencia. d. "Autor Original" significa el individuo o entidad que cre la Obra. e. "Obra" significa la obra sujeta al derecho de autor que se ofrece bajo los trminos de esta Licencia. f. "Usted" significa un individuo o entidad ejerciendo los derechos bajo esta Licencia que no ha violado previamente los trminos de esta Licencia con respecto a la Obra, o que ha recibido permiso expreso del Licenciante para ejercer derechos bajo esta Licencia pese a una violacin anterior. 2. Derechos de Uso Aceptable. Nada en esta licencia pretende reducir, limitar o restringir los derechos derivados del uso justo, la primera venta u otras limitaciones a los derechos

exclusivos del titular de los derechos bajo la ley de derechos de autor u otras leyes aplicables. 3. Concesin de licencia. Sujeto a los trminos y condiciones de esta Licencia, el Licenciante otorga a Usted una licencia mundial, libre de regalas, licencia no exclusiva, perpetua (por la duracin de los derechos de autor aplicable) para ejercer los derechos sobre la Obra como se indica a continuacin: a. Reproducir la Obra, incorporar la Obra en una o ms Obras Colectivas, y reproducir la Obra incorporada en las Obras Colectivas; b. para crear y reproducir obras derivadas; c. para distribuir copias o fonogramas, exhibir pblicamente, ejecutar pblicamente y ejecutar pblicamente por medio de una transmisin de audio digital las Obras, incluyendo las incorporadas en Obras Colectivas; d. para distribuir copias o fonogramas, exhibir pblicamente, ejecutar pblicamente y ejecutar pblicamente por medio de un audio digital las Obras Derivadas de transmisin.

308 Derechos de autor e. Para evitar dudas, cuando la Obra es una composicin musical: i. Regalas desempeo bajo licencias generales. Licenciante renuncia al derecho exclusivo de colectar, ya sea individualmente oa travs de una sociedad de derechos de rendimiento (Por ejemplo, ASCAP, BMI, SESAC), regalas por la ejecucin pblica o ejecucin pblica digital (por ejemplo, webcast) de la Obra. ii. Derechos Mecnicos y Regalas Estatutarias. Licenciante renuncia al derecho exclusivo de colectar, ya sea individualmente oa travs de una agencia de derechos de msica o el agente designado (por ejemplo, Harry Fox Agency), regalas por cualquier fonograma se crean desde el trabajo ("cover") y distribuya, sujeto a la licencia obligatoria creada por 17 USC Seccin 115 de la Ley de Derechos de Autor EE.UU. (o su equivalente en otras jurisdicciones). f. Derechos Difusin y Regalas Estatutarias. Para evitar dudas, cuando la Obra es una grabacin sonora, el Licenciante renuncia al derecho exclusivo de colectar, ya sea individualmente o por medio de una actuacin-la sociedad (por ejemplo, los derechos SoundExchange), regalas por la ejecucin pblica digital (por ejemplo, webcast) de la Obra, sujetos a la licencia obligatoria creada por 17 USC Seccin 114 de la Ley de Derechos de Autor EE.UU. (o su equivalente en otras jurisdicciones). Los derechos mencionados anteriormente pueden ser ejercidos en todos los medios y formatos ahora conocidos o por conocer. Los derechos mencionados incluyen el derecho a efectuar las modificaciones que sean tcnicamente necesarias para ejercer los derechos en otros medios y formatos. Todos los derechos no concedidos expresamente por el licenciador quedan reservados. 4. Restricciones del permiso concedido en la Seccin 3 est

expresamente sujeta y limitada por las siguientes restricciones: a. Usted puede distribuir, exhibir pblicamente, ejecutar pblicamente o ejecutar pblicamente la Obra slo bajo los trminos de esta Licencia, y Usted debe incluir una copia del Identificador de Recursos de la misma, esta Licencia con cada copia o fonograma de la Obra que distribuir, exhibir pblicamente, ejecutar pblicamente o ejecutar pblicamente de forma digital. Usted no puede ofrecer o imponer ninguna condicin sobre la Obra que altere o restrinja los trminos de esta licencia o el ejercicio de los derechos concedidos a los destinatarios. Usted no puede sublicenciar la Obra. Usted debe mantener intactos todos los avisos que se refieran a esta Licencia ya la limitacin de garantas. Usted no puede distribuir, exhibir pblicamente, ejecutar pblicamente o ejecutar pblicamente la Obra con medida tecnolgica alguna que controle el acceso o uso de la obra de una manera contraria a los trminos de esta Licencia Acuerdo. Lo anterior se aplica a la Obra incorporada a una Obra Colectiva, pero esto no requiere que la Obra Colectiva aparte de la obra misma quede sujeta a los trminos de esta Licencia. Si Usted crea una Obra Colectiva, bajo requerimiento de cualquier Licenciante Usted debe, en la medida de lo posible, quitar de la Obra Colectiva cualquier referencia a dicho Licenciante o al Autor Original, segn lo solicitado. Si Usted crea una Obra Derivada, bajo requerimiento de cualquier Licenciante Usted debe, en la medida de lo posible, quitar de la obra derivada cualquier referencia a dicho Licenciante o al Autor Original, segn lo solicitado. b. Si Usted distribuye, exhibe pblicamente, ejecutar pblicamente o ejecutar pblicamente la Obra o cualquier Obra Derivada o

309 Derechos de autor Obra Colectiva, debe mantener intactos todos los avisos de derechos de autor para la Obra y dar al Autor Original razonable crdito al medio oa los medios que usted est utilizando, transmitiendo el nombre (o seudnimo en su caso) del autor original si se suministra, el ttulo de la Obra si se incluye, en la medida en que sea posible, el Identificador Uniforme de Recursos, en su caso, que el licenciador especifica para ser asociado con la Obra, a menos que tal URI no se refiera al aviso de derechos de autor o informacin de licencia de la obra, y en el caso de un obra derivada, un aviso que identifique el uso de la obra en la obra derivada (por ejemplo, "Traduccin Francesa de la Obra del Autor Original," o "Guin basado en la Obra original del Autor Original"). Tal crdito puede ser implementado de cualquier forma razonable, siempre que, no obstante, que en el caso de una Obra Derivada u Obra Colectiva, con un mnimo dicho crdito aparecer donde aparece el crdito de cualquier otro autor comparable y de una manera, al menos, tan destacada como crdito de otro autor comparable. 5. Declaraciones, Garantas y Responsabilidad A MENOS QUE SE ACUERDE MUTUAMENTE POR ESCRITO ENTRE LAS PARTES, EL LICENCIANTE OFRECE LA OBRA TAL CUAL Y NO HACE NINGUNA REPRESENTACIN O GARANTA DE NINGN TIPO RESPECTO DE LA OBRA, YA SEA EXPRESA, IMPLCITA, LEGAL O DE OTRO TIPO, INCLUYENDO, SIN LIMITACIN, LAS GARANTAS DE TTULO, COMERCIALIZACIN, IDONEIDAD PARA UN PROPSITO PARTICULAR, NO INFRACCIN, O LA AUSENCIA DE LATENTES U OTROS DEFECTOS, EXACTITUD, O LA PRESENCIA DE LA AUSENCIA DE ERRORES, SEAN

O NO Visible. ALGUNAS JURISDICCIONES NO PERMITEN LA EXCLUSIN DE GARANTAS IMPLCITAS, POR LO QUE TAL EXCLUSIN NO SE APLIQUE EN SU CASO. 6. Limitacin de la Responsabilidad. SALVO EN LA MEDIDA REQUERIDA POR LA LEY APLICABLE, EN NINGN CASO EL LICENCIANTE SER RESPONSABLE ANTE USTED POR CUALQUIER TEORA LEGAL DE NINGN DAO ESPECIAL, INCIDENTAL, CONSECUENTE, PUNITIVO O EJEMPLAR QUE SURJA DE ESTA LICENCIA O EL USO DE LA OBRA, INCLUSO SI TIENE LICENCIA SIDO ADVERTIDO DE LA POSIBILIDAD DE TALES DAOS. 7. Terminacin a. Esta Licencia y los derechos aqu concedidos finalizarn automticamente en caso de cualquier incumplimiento de los trminos de esta licencia. Las personas o entidades que han recibido Obras Derivadas o Colectivas de Usted bajo esta licencia, sin embargo, no vern sus licencias finalizadas, siempre que tales personas o entidades se mantengan en el cumplimiento ntegro de esta licencia. Las secciones 1, 2, 5, 6, 7, y 8 subsistirn a cualquier finalizacin de esta licencia. b. Sujeto a los trminos y condiciones anteriores, la licencia otorgada aqu es perpetua (por la duracin de los derechos de autor aplicable a la Obra). No obstante lo anterior, el licenciador se reserva el derecho de difundir la Obra bajo diferentes trminos de Licencia o de detener la distribucin de la Obra en cualquier momento, siempre que, sin embargo, que esa eleccin no servir para revocar esta Licencia (o cualquier otra licencia que haya sido, o que se requiere para ser concedida bajo los trminos de esta licencia), y esta licencia continuar en pleno vigor y efecto a menos que termine como se indic anteriormente. 8. Diverso a. Cada vez que Usted distribuya o ejecute pblicamente la Obra o una Obra Colectiva, el Licenciante ofrece a los destinatarios una licencia para la Obra en los mismos trminos y condiciones que la licencia concedida a Usted bajo esta Licencia.

310 Derechos de autor b. Cada vez que Usted distribuye o realiza pblicamente una Obra Derivada, el Licenciante ofrece a los destinatarios una licencia para la Obra original en los mismos trminos y condiciones que la licencia concedida a Usted bajo esta Licencia. c. Si alguna disposicin de esta Licencia es invlida o no exigible bajo la ley aplicable, esto no afectar la validez o aplicabilidad del resto de los trminos de esta licencia y, sin ninguna accin adicional por las partes en este acuerdo, tal disposicin ser reformada en la medida mnima necesaria para que tal disposicin sea vlida y exigible. d. Ningn trmino o disposicin de esta Licencia se estimar renunciada y ninguna violacin consentida a menos que tal renuncia o consentimiento figure por escrito y firmado por la parte que por tal renuncia o consentimiento. e. Esta Licencia constituye el acuerdo completo entre las partes con respecto a la Obra licenciada aqu. No hay entendimientos, acuerdos o representaciones con respecto a la Obra que no se

especifica aqu. Licenciador no estar obligado por ninguna disposicin adicional que pueda aparecer en cualquier comunicacin proveniente de Usted. Esta Licencia no puede ser modificada sin el consentimiento mutuo por escrito del Licenciante y Usted. Creative Commons no es parte de esta Licencia y no ofrece ninguna garanta en relacin con la Obra. Creative Commons no ser responsable ante usted ni ante terceros por cualquier teora legal de ningn dao, incluyendo sin limitacin, cualquier dao general, especial, incidental o consecuente que surja en relacin con esta licencia. No obstante lo anterior, dos (2) oraciones, si Creative Commons se ha identificado expresamente como el Licenciante, tendr todos los derechos y obligaciones del licenciador. Excepto con el propsito limitado de indicar al pblico que la Obra est licenciada bajo la CCPL, ninguna parte utilizar la marca registrada "Creative Commons" o cualquier marca registrada o logotipo de Creative Commons relacionada sin el consentimiento previo por escrito de Creative Commons. Cualquier uso permitido se har de conformidad con Creative Commons ' directrices vigentes en ese momento de uso de marcas, como pueden ser publicados en su sitio web o se pongan a peticin de vez en cuando. Creative Commons puede ser contactado en http://creativecommons.org/. ================================================== ==================

311

Vous aimerez peut-être aussi