Académique Documents
Professionnel Documents
Culture Documents
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
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
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
179 182 182 183 184 184 185 185 188 250 250
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
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
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
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
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
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.
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 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.
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.
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
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.
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.
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 / /
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.
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.
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
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.
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
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.
11 Conceptos Bsicos
(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.
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 ".
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
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
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.
$ 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.
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.
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".
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
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
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.
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".
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
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.
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.
Realice cambios
svn revert
Combinar los cambios de otros en su copia de trabajo svn update svn resolved los
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.
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!
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
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.
$ 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
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
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:
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.
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
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").
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.
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.
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.
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.
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.
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.
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.
2.
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.
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
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
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 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.
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.
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.)
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,
$ 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
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.
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.
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.
65
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.
/ 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.
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
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.
Comparacin
Berkeley DB
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
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
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.
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
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
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).
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
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.
de
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:
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.
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.
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. .
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.
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
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.
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
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.
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
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
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
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).
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!
$ 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,
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 :/ /
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-
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.
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.
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.
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
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
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,
108 Configuracin del servidor instalar el plugin mod_dav_svn para mod_dav, que utiliza las bibliotecas de Subversion para acceder
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.
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.
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.
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.
# 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.
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".
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.
usuario juntos.
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.
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:
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-
120 Configuracin del servidor tema ATED; para ms detalles, lea el Apndice C, WebDAV y autoversionado.
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
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.
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.
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
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.
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:
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
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.
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-
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 ".
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.
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:
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.
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:
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.
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.
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.
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-
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.
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.)
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.
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.
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.
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.
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
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.
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.
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.
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.
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
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.
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.
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.
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.
2Subversion utiliza las llamadas al sistema ANSI y tipos de datos tanto como sea posible.
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.
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.
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.
"" "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:])
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/.
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.
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:
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.
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.
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.
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".
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.
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.
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.
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
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
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 .
- 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
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 . . .
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.
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-
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!
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.
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
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.
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 :/ / /
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.
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
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 >
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.
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)
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.
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
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
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 /
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".
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
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. -------------------------------------------------- ---------------------
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
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.
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
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.
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 '
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'
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.
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
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.
Nombre
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.
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:
$ 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.
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".
Nom bre
svn switch - Actualizar copia de trabajo a una URL distinta.
Sinopsis
svn URL [ruta] interruptor
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.
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".
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:
1Recuerda,
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
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 ...
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
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
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.
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 /
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. ...
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.
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
Nombre
rmlocks svnadmin - eliminar incondicionalmente una o varias cerraduras de un repositorio.
Sinopsis
svnadmin rmlocks REPOS_PATH LOCKED_PATH ...
Descripcin
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.
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.
Nom bre
setlog svnadmin - Configurar el mensaje de registro en una revisin.
Sinopsis
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
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
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
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:
...
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
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)
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 /
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
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.
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.
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.
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
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
Nombre
svnlook tree - Imprimir el rbol.
Sinopsis
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>
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
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.
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
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.
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
"rotos" que tena CVS. Esto significa que, como usuario de CVS, puede necesitar romper hbitos-los que se le olvid fue extrao al principio.
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 ...
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.
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.
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
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.
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
Macromedia Dreamweaver
Microsoft Office
Novell NetDrive
WebDAV aplicacin del sistema de archivos WebDAV aplicacin del sistema de archivos
SRT WebDrive
Apoyo 1WebDAV fue retirado de Microsoft Access, por alguna razn, pero existe en el resto de la suite Office.
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.
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.
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
305
306
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