2008/07/21 00:38:55 (r13512)
Tabla de contenidos
Lista de figuras
Lista de tablas
httpd.conf de ApacheTabla de contenidos
![]() |
¿Trabaja en equipo?
¿Alguna vez le ha ocurrido que estaba trabajando en un fichero, y alguien más también estaba trabajando en ese mismo fichero al mismo tiempo? ¿Perdió sus cambios en ese fichero por ese motivo?
¿Alguna vez ha grabado un fichero, y luego deseó deshacer los cambios que había hecho? ¿Alguna vez ha querido ver cómo estaba un fichero hace tiempo?
¿Alguna vez ha encontrado un error en su proyecto y ha querido saber cuándo se introdujo ese error en sus ficheros?
Si ha respondido sí a alguna de las preguntas anteriores, ¡entonces TortoiseSVN está hecho para usted! Siga leyendo para saber cómo puede TortoiseSVN ayudarle en su trabajo. No es tan dificil.
Este libro está escrito para usuarios informáticos que quieren usar Subversion para manejar sus datos, pero no están cómodos usando el cliente de línea de comandos para hacerlo. Dado que TortoiseSVN es una extensión del shell de Windows, se asume que el usuario está familiarizado con el Explorador de windows y sabe cómo usarlo.
This Prefacio explains a little about the TortoiseSVN project, the community of people who work on it, and the licensing conditions for using it and distributing it.
The Capítulo 1, Introducción explains what TortoiseSVN is, what it does, where it comes from and the basics for installing it on your PC.
In Capítulo 2, Conceptos básicos we give a short introduction to the Subversion revision control system which underlies TortoiseSVN. This is borrowed from the documentation for the Subversion project and explains the different approaches to version control, and how Subversion works.
Incluso muchos de los usuarios de Subversion nunca tendrán que preparar un servidor por ellos mismos. El siguiente capítulo trata sobre cómo preparar dicho servidor, y es útil para los administradores.
The chapter on Capítulo 4, El repositorio explains how to set up a local repository, which is useful for testing Subversion and TortoiseSVN using a single PC. It also explains a bit about repository administration which is also relevant to repositories located on a server.
The Capítulo 5, Guía de uso diario is the most important section as it explains all the main features of TortoiseSVN and how to use them. It takes the form of a tutorial, starting with checking out a working copy, modifying it, committing your changes, etc. It then progresses to more advanced topics.
Capítulo 6, El programa SubWCRev is a separate program included with TortoiseSVN which can extract the information from your working copy and write it into a file. This is useful for including build information in your projects.
The Apéndice B, ¿Cómo...? section answers some common questions about performing tasks which are not explicitly covered elsewhere.
The section on Apéndice D, Automatizando TortoiseSVN shows how the TortoiseSVN GUI dialogs can be called from the command line. This is useful for scripting where you still need user interaction.
The Apéndice E, Referencia cruzada del interface de línea de comandos give a correlation between TortoiseSVN commands and their equivalents in the Subversion command line client svn.exe.
TortoiseSVN es gratis. No tiene que pagar por él, y puede usarlo para lo que quiera. Está desarrollado bajo la Licencia Pública General GNU (GPL).
TortoiseSVN es un proyecto de Código Abierto. Eso significa que tiene acceso completo al código fuente de este programa. Puede verlo en este enlace http://tortoisesvn.tigris.org/svn/tortoisesvn/. (Usuario:guest, deje en blanco la contraseña). La versión más reciente (donde estamos trabajando) se encuentra bajo /trunk/, las versiones oficiales están bajo /tags/.
Tanto TortoiseSVN como Subversion están siendo desarrollados por una comunidad de gente que trabaja en estos proyectos. Provienen de diferentes países por todo el mundo y se juntan para crear programas estupendos.
por fundar el proyecto TortoiseSVN
por el duro trabajo de llevar a TortoiseSVN a lo que es hoy
por los bonitos iconos, el logo, la caza de errores, por traducir y administrar traducciones
por ayudar con la documentación y en la caza de bugs
por la gran introducción a Subversion y su capítulo 2 que hemos copiado aquí
por algunos de los estilos que están siendo reutilizados en esta documentación
por los parches, informes de errores y nuevas ideas, y por ayudar a otros respondiendo preguntas de nuestra lista de correo.
por la cantidad de horas de entretenimiento con la música que nos enviaron
Para hacer más facil la lectura de la documentación, los nombres de todas las pantallas y menús de TortoiseSVN están remarcados en un tipo de letra diferente. Por ejemplo, el Diálogo de Registro.
Las opciones de menú se indican con una flecha. → significa: seleccione Mostrar Registro desde el menú contextual TortoiseSVN.
Donde aparezca un menú contextual local dentro de uno de los diálogos de TortoiseSVN, se mostrará así: →
Los botones del interfaz de usuario se indican como este: Pulse para continuar.
User Actions are indicated using a bold font. Alt+A: press the Alt-Key on your keyboard and while holding it down press the A-Key as well. Right-drag: press the right mouse button and while holding it down drag the items to the new location.
La salida del sistema y la entrada por teclado se indica con una fuente también diferente.
Las notas importantes están marcadas con un icono.
Trucos que le facilitan la vida.
Lugares donde debe tener cuidado con lo que hace.
Donde hay que tener un cuidado extremo, porque puede ocurrir corrupción de datos u otras cosas horribles si se ignoran estas advertencias.
![]() |
Tabla de contenidos
El control de versiones es el arte de manejar cambios en la información. Ha sido desde siempre una herramienta crítica para los programadores, quienes típicamente emplean su tiempo haciendo pequeños cambios al software y luego deshaciendo o comprobando esos cambios al día siguiente. Imagine un equipo de estos programadores trabajando concurrentemente - ¡y quizás también simultáneamente en los mismos ficheros! - y podrá ver por qué se necesita un buen sistema para manejar el caos potencial.
TortoiseSVN es un cliente gratuito de código abierto para el sistema de control de versiones Subversion. Esto es, TortoiseSVN maneja ficheros y directorios a lo largo del tiempo. Los ficheros se almacenan en un repositorio central. El repositorio es prácticamente lo mismo que un servidor de ficheros ordinario, salvo que recuerda todos los cambios que se hayan hecho a sus ficheros y directorios. Esto permite que pueda recuperar versiones antiguas de sus ficheros y examinar la historia de cuándo y cómo cambiaron sus datos, y quién hizo el cambio. Esta es la razón por la que mucha gente piensa que Subversion, y los sistemas de control de versiones en general, son una especie de “máquinas del tiempo”.
Algunos sistemas de control de versiones también son sistemas de manejo de configuración del software (SCM). Estos sistemas están diseñados específicamente para manejar árboles de código fuente, y tienen muchas características que son específicas para el desarrollo de software - tales como el entendimiento nativo de los lenguajes de programación, o proporcionan herramientas para compilar software. Subversion, sin embargo, no es uno de estos sistemas; es un sistema general que puede ser utilizado para manejar cualquier colección de ficheros, incluyendo código fuente.
En 2002, Tim Kemp se dio cuenta que Subversion era un sistema de control de versiones muy bueno, pero le faltaba un buen cliente GUI. La idea de tener un cliente de Subversion integrado en el shell de Windows se inspiró por el cliente similar que ya existía para CVS llamado TortoiseCVS.
Tim estudió el código fuente de TortoiseCVS y lo utilizó como base de TortoiseSVN. Entonces inició el proyecto, registró el dominio tortoisesvn.org y puso el código fuente en línea. Durante ese tiempo, Stefan Küng estaba buscando un sistema de control de versiones bueno y gratuito, y encontró Subversion y el código fuente de TortoiseSVN. Como TortoiseSVN todavía no estaba listo para usarse, se unió al proyecto y empezó a programar. Pronto reescribió la mayor parte del código existente y empezó a añadir comandos y características, hasta el punto de que no quedó nada del código original.
Según se fue estabilizando Subversion, atrajo más y más usuarios que también empezaron a utilizar TortoiseSVN como su cliente de Subversion. Los usuarios de TortoiseSVN se incrementaron rápidamente (y aún crecen día a día). Entonces Lübbe Onken se ofreció a ayudar con algunos iconos más vistosos y un logo para TortoiseSVN. Y también se encarga de la página web y de administrar las traducciones.
¿Qué hace de TortoiseSVN tan buen cliente de Subversion? Aquí hay una pequeña lista de sus características.
TortoiseSVN se integra perfectamente en el shell de Windows (por ejemplo, el explorador). Esto significa que puede seguir trabajando con las herramientas que ya conoce. ¡Y que no tiene que cambiar a una aplicación diferente cada vez que necesite las funciones del control de versiones!
Y ni siquiera está obligado a usar el Explorador de Windows. Los menús contextuales de TortoiseSVN también funcionan en otros administradores de archivos, y en el diálogo Fichero/Abrir que es común a la mayoría de aplicaciones estándar de Windows. Sin embargo, debe tener en cuenta que TortoiseSVN está desarrollado con la mirada puesta en hacerle extensión del Explorador de Windows. Por este motivo, puede que en otras aplicaciones la integración no sea tan completa y que, por ejemplo, los iconos sobreimpresionados en las carpetas no se muestren.
El estado de cada carpeta y fichero versionado se indica por pequeños iconos sobreimpresionados. De esta forma, puede ver fácilmente el estado en el que se encuentra su copia de trabajo.
Todos los comandos de Subversion están disponibles desde el menú contextual del explorador. TortoiseSVN añade su propio submenú allí.
Dado que TortoiseSVN es un cliente de Subversion, también queremos enseñarle algunas de las características del propio Subversion:
CVS sólo controla la historia de ficheros individuales, pero Subversion implementa un sistema “virtual” de ficheros versionados que sigue la pista de los cambios en todos los árboles de directorios en el tiempo. Los ficheros y los directorios están versionados. Como resultado, hay comandos reales en el lado del cliente como mover y copiar que operan en ficheros y directorios.
Una confirmación o bien entra en el repositorio completamente, o no entra en absoluto. Esto permite a los desarrolladores construir y confirmar cambios como unidades lógicas.
Cada fichero y directorio tiene un conjunto invisible de “propiedades” adjuntos. PUede inventarse y almacenar cualquier par de clave/valor que desee. Las propiedades se versionan en el tiempo, igual que el contenido de los ficheros.
Subversion tiene una noción abstracta del acceso al repositorio, haciéndo que la gente pueda implementar nuevos mecanismos de red fácilmente. El “avanzado” servidor de red de Subversion es un módulo para el servidor web Apache, que habla una variante de HTTP llamada WebDAV/DeltaV. Esto dota a Subversion una gran ventaja en estabilidad e interoperatividad, y proporciona varias características importantes gratis: autentificación, autorización, compresión de la transmisión y navegación del repositorio, por ejemplo. También está disponible un proceso servidor de Subversion independiente. Este servidor habla un protocolo propio que puede encapsularse fácilmente sobre ssh.
Subversion expresa las diferencias entre ficheros usando un algoritmo de diferenciación binario, que funciona exactamente igual tanto en ficheros de texto (legibles por los humanos) como en ficheros binarios (que no son legibles por nosotros). Ambos tipos de ficheros se almacenan igualmente comprimidos en el repositorio, y las diferencias se transmiten en ambas direcciones por la red.
El coste de crear una rama o una etiqueta no necesita ser proporcional al tamaño del proyecto. Subversion crea ramas y etiquetas símplemente copiando el proyecto, utilizando un mecanismo similar a los vínculos duros. Por tanto estas operaciones llevan un tiempo pequeño y constante, y muy poco espacio en el repositorio.
Subversion no tiene lastre histórico; está implementado como una colección de librerías C compartidas con APIS bien definidas. Esto hace que Subversion sea extremadamente mantenible y se pueda utilizar por otras aplicaciones y lenguajes.
TortoiseSVN se ejecuta en Windows 2000 SP2, Windows XP o superiores. Windows 98, Windows ME y Windows NT4 ya no se soportan desde TortoiseSVN 1.2.0, pero aún puede descargar las versiones más antiguas si realmente las necesita.
Si encuentra algún problema durante o después de la instalación de TortoiseSVN, por favor visite primero Apéndice A, Preguntas más frecuentes (FAQ).
TortoiseSVN viene con un instalador fácil de utilizar. Haga doble click en el fichero de instalación y siga las instrucciones. El instalador se encargará del resto.
Necesita privilegios de Administrador para instalar TortoiseSVN.
El interfaz de usuario de TortoiseSVN se ha traducido a muchos idiomas distintos, por lo que es posible que pueda descargar un pack de idioma que se ajuste a sus necesidades. Puede encontrar los packs de idioma en nuestra página de estado de las traducciones. Y si aún no hay un pack de idioma disponible, por qué no unirse al equipo y enviar su propia traducción ;-)
Cada pack de idioma está empaquetado como un instalador .exe. Sólo tiene que ejecutar el programa de instalación y seguir las instrucciones. La siguiente vez que reinicie, tendrá disponible la traducción.
TortoiseSVN incluye un corrector ortográfico que le permite comprobar sus mensajes de registro en las confirmaciones. Esto es especialmente útil si el idioma del proyecto no es su lengua materna. El corrector ortográfico utiliza los mismos diccionarios que OpenOffice y Mozilla.
El instalador automáticamente añade los diccionarios de inglés de EE.UU. y de Reino Unido. Si desea tenerlos en otros idiomas, la opción más sencilla es símplemente instalar uno de los packs de idiomas de TortoiseSVN. Eso instalará los ficheros de diccionario adecuados junto con el interface de usuario de TortoiseSVN en ese idioma. La siguiente vez que reinicie, el diccionario también estará disponible.
O puede instalar los diccionarios usted mismo. Si tiene OpenOffice o Mozilla instalados, puede copiar esos diccionarios, que se encuentran en las carpetas de instalación de esas aplicaciones. Si no, deberá descargar los ficheros de diccionario necesarios desde http://wiki.services.openoffice.org/wiki/Dictionaries
Una vez que tenga los ficheros de diccionario, seguramente deberá cambiarlos de nombre para que los nombres de los ficheros sólo contengan los caracteres del idioma. Por ejemplo:
es_ES.aff
es_ES.dic
Luego sólo tiene que copiarlos en la subcarpeta bin de la carpeta de instalación de TortoiseSVN. Normalmente ésta será C:\Archivos de programa\TortoiseSVN\bin. Si no desea jugar con la subcarpeta bin, también puede poner los ficheros del corrector ortográfico en C:\Archivos de programa\TortoiseSVN\Languages. Si esa carpeta no está ahí, tendrá que crearla primero. La siguiente vez que inicie TortoiseSVN, podrá utilizar el corrector ortográfico.
Si instala múltiples diccionarios, TortoiseSVN utilizará estas reglas para seleccionar cuál utilizar.
Compruebe la configuración tsvn:projectlanguage. Lea “Configuración del proyecto” para encontrar información sobre cómo se establecen propiedades de proyecto.
Si no se ha establecido un idioma del proyecto, o ese idioma no está instalado, inténtelo con el idioma que corresponde al de Windows.
Si no funciona el idioma exacto de Windows, pruebe el idioma “Base”, por ejemplo, es_MX (Español-México) se transformaría en es_ES (Español).
Si nada de lo anterior funciona, entonces el idioma por defecto es el Inglés, que se incluye con la instalación estándar.
Tabla de contenidos
Este capítulo es una versión ligeramente modificada del mismo capítulo en el libro de Subversion. Una versión en línea del libreo de Subversion está disponible aquí: http://svnbook.red-bean.com/.
Este capítulo es una introducción corta e informal a Subversion. Si el control de versiones es nuevo para usted, este capítulo es definitivamente para usted. Empezamos con una discusión de los conceptos generales de control de versiones, nos hacemos camino dentro de las ideas específicas que hay tras Subversion, y mostramos algunos ejemplos sencillos de Subversion en acción.
Incluso aunque los ejemplos en este capítulo muestran a gente compartiendo colecciones de código fuente de programas, tenga en cuenta que Subversion puede manejar cualquier collección de ficheros - no está limitado a ayudar a los programadores de ordenadores.
Subversion es un sistema centralizado para compartir información. En su núcleo está un repositorio, que es un almacén central de datos. El respositorio almacena información en forma de un árbol de ficheros - una jerarquía típica de ficheros y directorios. Cualquier número de clientes se conectan al repositorio, y luego leen o esriben esos ficheros. Al escribir datos, el cliente hace que la información esté disponible para los otros; al leer los datos, el cliente recibe la información de los demás.
¿Y ésto por qué es interesante? Por ahora, eso suena a la definición típica de un servidor de ficheros típico. Y de hecho, el repositorio es una clase de servidores de ficheros, pero no el habitual. Lo que hace al repositorio de Subversion especial es que recuerda todos los cambios que alguna vez se hayan escrito en él: cada cambio en cada fichero, e incluso los cambios en el propio árbol de directorios, como el añadir, borrar o reorganizar ficheros y directorios.
Cuando un cliente lee datos de un repositorio, normalmente ve únicamente la última versión del árbol de ficheros. Pero el cliente también tiene la capacidad de ver estados previos del sistema de ficheros. Por ejemplo, un cliente puede hacer preguntas históricas, como “¿qué contenía este directorio el último miércoles?”, o “¿quién fue la última persona que cambió este fichero, y qué cambios hizo?” Esta es la clase de preguntas que forman el corazón de cualquier sistema de control de versiones: son sistemas que están diseñados para guardar y registrar los cambios a los datos a lo largo del tiempo.
Todos los sistemas de control de versiones tienen que resolver los mismos problemas fundamentales: ¿cómo permitirá el sistema compartir información entre usuarios, pero evitando que ellos accidentalmente se pisen unos a otros? Es demasiado sencillo que los usuarios accidentalmente sobreescriban los cambios del otro en el repositorio.
Considere este escenario: suponga que tiene dos compañeros de trabajo, Harry y Sally. Cada uno decide editar el mismo fichero del repositorio a la vez. Si Harry graba sus cambios en el repositorio primero, el posible que (unos momentos después) Sally pueda accidentalmente sobreescribirlos con su propia versión nueva del fichero. Mientras que la versión del fichero de Harry no se ha perdido para siempre (porque el sistema recuerda cada cambio), cualquier cambio que Harry hizo no estará en la versión nueva del fichero de Sally, porque para empezar ella nunca vió los cambios de Harry. El trabajo de Harry está aún efectivamente perdido - o al menos falta en la última versión del fichero - y probablemente por accidente. ¡Esta es una situación que definitivamente tenemos que evitar!
Muchos sistemas de control de versiones utilizan un modelo bloquear-modificar-desbloquear para enfrentarse a este problema, que es una solución muy simple. En estos sistemas, el repositorio sólo permite que una persona cambie un fichero al mismo tiempo. Harry primero debe bloquear el fichero antes de que pueda empezar a hacer cambios en él. Bloquear un fichero se parece mucho a tomar prestado un libro de la biblioteca; si Harry ha bloqueado un fichero, entonces Sally no puede hacer ningún cambio en él. Si ella intenta bloquear el fichero, el repositorio le denegará la petición. Todo lo que ella puede hacer es leer el fichero, y esperar a que Harry termine sus cambios y libere su bloqueo. Después de que Harry desbloquee el fichero, se acabó su turno, y ahora Sally puede bloquear y editar.
El problema con el modelo bloquear-modificar-desbloquear es que es un poco restrictivo, y a menudo se convierte en una calle cortada para los usuarios:
El bloqueo causa muchos problemas administrativos. A veces Harry bloqueará un fichero y luego se olvidará de ello. Mientras tanto, dado que Sally está aún esperando para editar el fichero, sus manos están atadas. Y Harry se va de vacacioens. Ahora Sally tiene que buscar a un administrador para que libere el bloqueo de Harry. La situación acaba causando un montón de retraso y pérdida de tiempo innecesarios.
El bloqueo puede causar procesos en serie innecesarios. ¿Qué ocurre si Harry está editando el inicio de un fichero de texto, y Sally simplemente quiere cambiar la parte final del mismo fichero? Esos cambios no se superponen en absoluto. Ellos podrían fácilmente editar el fichero de forma simultánea, y no habría ningún daño, asumiendo que los cambios se fusionaran correctamente. No hay necesidad de que se turnen en esta situación.
El bloqueo puede causar una falsa sensación de seguridad. Imagine que Harry bloquea y edita el fichero A, mientras Sally simultáneamente bloquea y edita el fichero B. Pero suponga que A y B dependen uno del otro, y que los cambios hechos a cada uno son semánticamente incompatibles. De repente A y B ya no funcionan juntos. El sistema de bloqueo no tiene forma de prevenir este problema - sin embargo, de alguna forma dió una sensación de falsa seguridad. Es fácil para Harry y Sally imaginar que al bloquear los ficheros, cada uno está empezando una tarea segura y aislada, y por tanto les inhibe de discutir sus cambios incompatibles en un momento temprano.
Subversion, CVS y otros sistemas de control de versiones utilizan un modelo copiar-modificar-fusionar como alternativa al bloqueo. En este modelo, el cliente de cada usuario lee el repositorio y crea una copia de trabajo personal del fichero o del proyecto. Luego, los usuarios trabajan en paralelo, modificando sus copias privadas. Finalmente, las copias privadas se fusionan juntas en una nueva versión final. El sistema de control de versiones a menudo ofrece ayuda en la fusión, pero al final la persona es la responsable de hacer que ocurra correctamente.
Aquí hay 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 al mismo fichero A dentro de sus copias. Sally es la primera en grabar sus cambios en el repositorio. Cuando Harry intenta grabar sus cambios más tarde, el repositorio le informa que su fichero A está desactualizado. En otras palabras, que el fichero A en el repositorio ha cambiado de alguna forma desde la última vez que lo copió. Por lo que Harry le pide a su cliente que fusione cualquier nuevo cambio del repositorio dentro de su copia de trabajo del fichero A. Lo más seguro es que los cambios de Sally no se superpongan a los suyos; por lo que una vez que ambos conjuntos de cambios se han integrado, él graba su copia de trabajo de nuevo en el repositorio.
¿Pero qué ocurre si los cambios de Sally sí se superponen a los cambios de Harry? ¿Qué hacemos entonces? La situación se denomina un conflicto, y normalmente no es mucho 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 que está 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 automáticamente; sólo los humanos son capaces de entender y hacer las elecciones necesarias de forma inteligente. Una vez que Harry haya resuelto manualmente los cambios que se superponían (¡quizás discutiendo el conflicto con Sally!), puede volcar de forma segura el fichero fusionado al repositorio.
El modelo copiar-modificar-fusionar puede sonar un poco caótico, pero en la práctica, funciona extremadamente bien. Los usuarios pueden trabajar en paralelo, sin que tengan que esperar nunca uno por otro. Cuando trabajan en los mismos ficheros, resulta que la mayoría de los cambios concurrentes no se superponen en absoluto; los conflictos no son frecuentes. Y el tiempo que lleva resolver conflictos es mucho menor que el tiempo perdido por un sistema bloqueante.
Al final, todo se reduce a un factor crítico: la comunicación entre usuarios. Cuando los usuarios se comunican de forma pobre, aumentan los conflictos sintácticos y semánticos. No hay sistema capaz de forzar a los usuarios a comunicarse perfectamente, y no hay sistema que pueda detectar conflictos semánticos. Por lo que no hay motivo para que se le prometa falsamente que un sistema con bloqueos prevendrá de alguna forma los conflictos; en la práctica, el bloqueo parece inhibir la productividad más que otra cosa.
Hay una situación común donde el modelo bloquear-modificar-desbloquear resulta mejor, y es cuando tiene ficheros no-fusionables. Por ejemplo si su repositorio contiene algunas imágenes gráficas, y dos personas cambian la imagen a la vez, no hay forma de fusionar esos cambios. O Harry o Sally perderán sus cambios.
Subversion utiliza la solución copiar-modificar-mezclar por defecto, y en muchos casos esto es todo lo que necesitará. Sin embargo, desde la Versión 1.2, Subversion también admite bloqueo de ficheros, por lo que si tiene ficheros no-fusionables, o si simplemente está forzado a una política de bloqueo por la dirección, Subversion seguirá teniendo las características que necesita.
Ya ha oído hablar sobre las copias de trabajo; ahora le demostraremos cómo las crea y las utiliza el cliente de Subversion.
Una copia de trabajo de Subversion es un árbol de directorios ordinario en su sistema local, conteniendo una colección de ficheros. Puede editar estos ficheros como desee, y si son ficheros de código fuente, puede compilar su programa de la forma habitual. Su copia de trabajo es su propia área de trabajo privada: Subversion nunca incorporará los cambios de otra gente, ni hará que sus cambios estén disponibles para los demás, a menos que se lo pida explícitamente.
Después de que haya hecho algunos cambios en los ficheros dentro de su copia de trabajo y haya verificado que funcionan correctamente, Subversion le provee de comandos para publicar sus cambios para los demás que trabajan con usted en su proyecto (escribiendo en el repositorio). Si los demás publican sus propios cambios, Subversion le provee de comandos para fusionar esos cambios dentro de su copia de trabajo (leyendo desde el repositorio).
Una copia de trabajo también contiene algunos ficheros extra, creados y mantenidos por Subversion, para ayudarse a llevar a cabo esos comandos. En particular, cada directorio detnro de su copia de trabajo contiene un subdirectorio llamado .svn, también conocido como el directorio administrativo de la copia de trabajo. Los ficheros dentro de los directorios administrativos ayudan a Subversion a reconocer qué ficheros contienen cambios no publicados, y qué ficheros están desactualizados respecto al trabajo de los demás.
Un repositorio típico de Subversion a menudo contiene los ficheros (o el código fuente) de varios proyectos; usualmente, cada proyecto es un subdirectorio en el árbol de ficheros del repositorio. Con esta disposición, una copia de trabajo de un usuario normalmente corresponderán a un subárbol particular del repositorio.
Por ejemplo, suponga que tiene un repositorio que contiene dos proyectos de software.
En otras palabras, el directorio raíz del repositorio tiene dos subdirectorios, paint y calc.
Para obtener una copia de trabajo, primero debe obtener algún subárbol del repositorio. (El término obtener puede sonar como que tenga algo que ver con el bloqueo o la reserva de recursos, pero no es cierto; simplemente crea una copia privada del proyecto para usted).
Suponga que ha hecho cambios a button.c. Dado que el directorio .svn recuerda la fecha de modificación y los contenidos originales del fichero, Subversion puede decirle que ha cambiado el fichero. Sin embargo, Subversion no hace públicos sus cambios hasta que explícitamente se lo pida. El acto de publicar sus cambios se conoce más comúnmente como confirmar (o enviar) los cambios al repositorio.
Para publicar sus cambios para los demás, puede utilizar el comando de Subversion commit.
Ahora que sus cambios a button.c se han confirmado en el respositorio, si cualquier otro usuario obtiene una copia de trabajo de /calc, verán sus cambios en la última versión del fichero.
Suponga que tiene un colaborador, Sally, que obtuvo una copia de trabajo de /calc al mismo tiempo que usted. Cuando ha confirmado sus cambios en button.c, la copia de trabajo de Sally se queda sin cambios; Subversion sólo modifica las copias de trabajo cuando lo pide el usuario.
Para poner al día su proyecto, Sally puede pedirle a Subversion actualizar su copia de trabajo, utilizando el comando de Subversion actualizar. Esto incorporará sus cambios en la copia de trabajo de Sally, junto con cualquier otro que se haya confirmado desde que ella lo obtuvo.
Tenga en cuenta que Sally no necesita especificar qué ficheros actualizar; Subversion utiliza la información en el directorio .svn, y más información desde el repositorio, para decidir qué ficheros deben ponerse al día.
Los repositorios de Subversion pueden ser accedidos por muchos métodos diversos - en discos locales, o a través de varios protocolos de red. La ruta de un repositorio es siempre, sin embargo, una URL. El esquema URL indica el método de acceso:
Tabla 2.1. URLs de acceso al repositorio
| Esquema | Método de acceso |
|---|---|
file://
| Acceso directo al repositorio en el disco local o de red. |
http://
| Acceso utilizando el protocolo WebDAV a un servidor Apache configurado para Subversion. |
https://
| Lo mismo que http://, pero con encriptación SSL. |
svn://
| Acceso TCP/IP sin autentificación utilizando un protocolo personalizado a un servidor svnserve. |
svn+ssh://
| Acceso TCP/IP autentificado y encriptado utilizando un protocolo propio a un servidor svnserve. |
For the most part, Subversion's URLs use the standard syntax, allowing for server names and port numbers to be specified as part of the URL. The file:// access method is normally used for local access, although it can be used with UNC paths to a networked host. The URL therefore takes the form file://hostname/path/to/repos. For the local machine, the hostname portion of the URL is required to be either absent or localhost. For this reason, local paths normally appear with three slashes, file:///path/to/repos.
Also, users of the file:// scheme on Windows platforms will need to use an unofficially “standard” syntax for accessing repositories that are on the same machine, but on a different drive than the client's current working drive. Either of the two following URL path syntaxes will work where X is the drive on which the repository resides:
file:///X:/ruta/al/repositorio ... file:///X|/ruta/al/repositorio ...
Tenga en cuenta que las URLs utilizan las barras hacia delante (las de dividir) incluso aunque la forma nativa (no-URL) de una ruta en Windows utiliza las barras contrarias.
Puede acceder con seguridad a un repositorio FSFS utilizando una carpeta compartida de red, pero no puede acceder a un repositorio BDB de esta forma.
No cree o acceda a un repositorio Berkeley DB en una unidad de red compartida. No puede existir en un sistema de archivos remoto. Ni siquiera si tiene la unidad de red mapeada a una letra de unidad. Si intenta usar Berkeley DB en una unidad de red compartida, los resultados son imprevisibles - puede ver desde el principio errores misteriosos, o pueden pasar meses antes de que descubra que su base de datos del repositorio está corrupta de una forma inimaginable.
Una operación svn commit puede publicar los cambios de cualquier número de ficheros y carpetas como una única transacción atómica. En su copia de trabajo, puede cambiar el contenido de los ficheros, crear, borrar, renombrar y copiar ficheros y directorios, y luego confirmar el conjunto completo de cambios como una unidad.
En el repositorio, cada confirmación se trata como una transacción atómica: o bien todos los cambios de la confirmación se llevan a cabo, o bien ninguno de ellos se realiza. Subversion aplica 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 confirmación, crea un nuevo estado del árbol de ficheros, llamado revisión. A cada revisión se le asigna un número natural único, un número mayor que la revisión anterior. La revisión inicial de un repositorio recién creado se numera como cero, y consiste únicamente en un directorio raíz vacío.
Una buena forma de visualizar el repositorio es como una serie de árboles. Imagine una fila de números de revisiones, empezando en 0, de izquierda a derecha. Cada número de revisión tiene un árbol colgando debajo, y cada árbol es una “foto” de cómo estaba el repositorio tras cada confirmación.
Es importante que tenga en cuenta que las copias de trabajo no siempre se corresponden a una única revisión en el repositorio; pueden contener ficheros de varias revisiones.Por ejemplo, suonga que obtiene una copia de trabajo de un repositorio cuya revisión más reciente es la 4:
calc/Makefile:4
integer.c:4
button.c:4
En este momento, esta copia de trabajo corresopnde exactamente a la revisión 4 en el respositorio. Sin embargo, suponga que ha hecho cambios al fichero button.c, y confirme ese cambio. Asumiendo que no se haya llevado a cambio ninguna otra confirmación, su confirmación creará la revisión 5 en el repositorio, y su copia de trabajo quedará así:
calc/Makefile:4
integer.c:4
button.c:5
Suponga que, en este punto, Sally hace un cambio a integer.c, creando la revisión 6. Si utiliza svn update para actualizar su copia de trabajo, obtendrá ésto:
calc/Makefile:6
integer.c:6
button.c:6
Los cambios de Sally a integer.c aparecerán en su copia de trabajo, y su cambio estará aún presente en button.c. En este ejemplo, el texto de Makefile es idéntico en las revisiones 4, 5, y 6, pero Subversion marcará su copia de trabajo de Makefile con la revisión 6 para indicar que aún está actualizado. Por lo que, después de que haga una actualización limpia en la parte superior de su copia de trabajo, generalmente obtendrá exactamente una revisión del repositorio.
Por cada fichero en un directorio de trabajo, Subversion grabará dos piezas esenciales de información en el área administrativa .svn/:
en qué revisión se basa su fichero de trabajo (lo que se denomina la revisión de trabajo), y
una fecha que indica cuándo se actualizó por última vez la copia local por el repositorio.
Con esta información, hablando con el repositorio, Subversion puede decirle en cuál de los siguientes cuatro estados está un fichero de trabajo:
El fichero no se ha cambiado en el directorio de trabajo, y no se han confirmado cambios a ese fichero en el repositorio desde su revisión de trabajo. Una confirmación de ese fichero no hará nada, y una actualización de ese fichero no hará nada.
El fichero ha sido cambiado en el directorio de trabajo, y no se ha confirmado ningún cambio a ese fichero en el repositorio desde su revisión base. Hay cambios locales que no se han confirmado en el repositorio, por lo que al confirmar el fichero se conseguirá publicar sus cambios, y al actualizar el fichero no se realizará nada.
El fichero no ha sido cambiado en el directorio de trabajo, pero ha sido cambiado en el repositorio. El fichero deberá ser actualizado en algún momento, para actualizarlo con la revisión pública. Un comando confirmar sobre el fichero no hará nada, y al actualizar el fichero se traerán los últimos cambios a su copia de trabajo.
El fichero se ha cambiado tanto en el directorio de trabajo como en el repositorio. Un comando confirmar sobre el fichero fallará con un error desactualizado. El fichero debería actualizarse primero; al actualizar se intentará fusionar los cambios públicos con los cambios locales. Si Subversion no puede completar la fusión de una forma plausible automáticamente, le dejará al usuario la tarea de resolver el conflicto.
Hemos cubierto un número de conceptos fundamentales de Subversion en este capítulo:
Hemos introducido las nociones de un repositorio central, la copia de trabajo del cliente, y la lista de árboles de revisiones del repositorio.
Hemos visto algunos ejemplos simples sobre cómo dos colaboradores pueden utilizar Subversion para publicar y recibir los cambios de uno a otro, utilizando el modelo 'copiar-modificar-fusionar'.
Hemos hablado un poco sobre la forma en la que Subversion controla y maneja la información en una copia de trabajo.
Tabla de contenidos
To use TortoiseSVN (or any other Subversion client), you need a place where your repositories are located. You can either store your repositories locally and access them using the file:// protocol or you can place them on a server and access them with the http:// or svn:// protocols. The two server protocols can also be encrypted. You use https:// or svn+ssh://. This chapter shows you step by step on how you can set up such a server on a Windows machine.
Puede encontrar información más detallada sobre las opciones del servidor de Subversion, y sobre cómo elegir la mejor arquitectura para su situación, en el libro de Subversion bajo Configuración del servidor.
If you don't have a server and you work alone then local repositories are probably your best choice. You can skip this chapter and go directly to Capítulo 4, El repositorio.
Si estaba pensando configurar un repositorio multiusuario en una unidad compartida de red, piénselo de nuevo. Lea “Accediendo a un repositorio en una unidad de red” para averiguar por qué creemos que eso es una mala idea.
La configuración más flexible de todas las instalaciones de servidor posibles para Subversion es la que se basa en Apache. Aunque es un poco más complicada de preparar, ofrece beneficios que otros servidores no pueden dar:
El servidor de Subversion basado en Apache utiliza el protocolo WebDAV que se utiliza por muchos otros programas. Por ejemplo, podría montar dicho repositorio como una “Carpeta web” en el explorador de Windows y luego acceder a ella como cualquier otra carpeta en su sistema de ficheros.
Puede apuntar su navegador a la URL del repositorio y navegar por sus contenidos sin tener un cliente de Subversion. Esto da acceso a sus datos a un mayor círculo de usuarios.
Puede utilizar cualquier mecanismo de autentificación que Apache soporte, incluyendo SSPI y LDAP.
Dado que Apache es muy estable y seguro, automáticamente obtendrá la misma seguridad para su repositorio. Esto incluye la encriptación SSL.
La primera cosa que necesita antes de instalar Apache es un ordenador con Windows 2000, Windows XP con SP1, Windows 2003, Vista o Server 2008.
Por favor tenga en cuenta que utilizar Windows XP sin el Service Pack 1 corrompe datos de la red y por tanto ¡podría corromper su repositorio!
Descargue la última versión del servidor web Apache desde http://httpd.apache.org/download.cgi. Asegúrese de que descarga la versión 2.2.x - ¡las versiones 1.3.xx no servirán!
El instalador MSI de Apache se puede encontrar haciendo click en other files (otros ficheros), y luego navegando a binaries/win32. Puede que quiera seleccionar el fichero MSI apache-2.2.x-win32-x86-openssl-0.9.x.msi (el que incluye OpenSSL).
Una vez que tenga el instalador de Apache2 puede hacer doble click en él y le guiará a través del proceso de instalación. Asegúrese de que ha introducido la URL del servidor correctamente (si no tiene un nombre DNS para su servidor introduzca la dirección IP). Es recomendable que instale Apache para Todos los usuarios, en el Puerto 80, como un Servicio. Nota: si ya tiene IIS u otro programa ejecutándose que escuche en el puerto 80 la instalación puede fallar. Si esto ocurre, vaya al directorio de Archivos de programa, \Apache Group\Apache2\conf y localice el fichero httpd.conf. Edite dicho fichero para cambiar Listen 80 por un puerto libre, por ejemplo, Listen 81. Luego reinicie la instalación - esta vez debería terminar sin problemas.
Ahora compruebe si el servidor web Apache funciona correctamente apuntando desde su navegador web a la dirección http://localhost/ - debería aparecer un sitio web preconfigurado.
Si decide instalar Apache como un servicio, queda avisado de que por defecto se ejecutará con la cuenta de sistema local. Sería una práctica más segura que creara una cuenta separada para que Apache se ejecutara bajo ella.
Asegúrese de que la cuenta en el servidor bajo la que se ejecuta Apache tenga una entrada explícita en la lista de control de acceso del directorio del repositorio (click con el botón derecho en el directorio | propiedades | seguridad), con control total. Si no lo hace así, los usuarios no podrán confirmar sus cambios.
Incluso si Apache se ejecuta como sistema local, aún así necesitará dicha entrada (que en este caso debería ser la cuenta SYSTEM).
Si Apache no tiene este permiso configurado, sus usuarios tendrán mensajes de error “Acceso denegado”, que se mostrarán en el registro de errores de Apache como error 500.
Descarge la última versión de los binarios de Subversion para Apache y Windows 32. Asegúrese de obtener la versión correcta para integrarla en su versión de Apache, porque si no obtendrá un oscuro mensaje de error cuando intente reiniciar. Si tiene Apache 2.2.x acuda a http://subversion.tigris.org/servlets/ProjectDocumentList?folderID=8100.
Ejecute el instalador de Subversion y siga las instrucciones. Si el instalador de Subversion reconoce que ha instalado Apache, habrá casi terminado. Si no puede encontrar un servidor de Apache entonces tendrá que realizar algunos pasos adicionales.
Utilizando el explorador de Windows, vaya al directorio de instalación de Subversion (normalmente C:\Archivos de programa\Subversion) y busque los ficheros /httpd/mod_dav_svn.so y mod_authz_svn.so. Copie estos ficheros al directorio de módulos de Apache (normalmente C:\Archivos de programa\Apache Group\Apache2\modules).
Copie el fichero /bin/libdb*.dll y /bin/intl3_svn.dll desde el directorio de instalación de Subversion al directorio bin de Apache.
Edite el fichero de configuración de Apache (normalmente C:\Archivos de Programa\Apache Group\Apache2\conf\httpd.conf) con un editor de texto como el Bloc de Notas y haga los siguientes cambios:
Descomente (quitando la marca '#') las siguientes líneas:
#LoadModule dav_fs_module modules/mod_dav_fs.so #LoadModule dav_module modules/mod_dav.so
Añada las dos líneas siguientes al final de la sección LoadModule.
LoadModule dav_svn_module modules/mod_dav_svn.so LoadModule authz_svn_module modules/mod_authz_svn.so
Ahora ya ha preparado Apache y Subversion, pero Apache aún no sabe cómo manejar los clientes de Subversion como TortoiseSVN. Para que Apache sepa qué URL debe utilizarse para los repositorios de Subversion debe editar el fichero de configuración de Apache (normalmente está en C:\Archivos de programa\Apache Group\Apache2\conf\httpd.conf) con cualquier editor de texto que desee (por ejemplo, el Bloc de notas):
At the end of the config file add the following lines:
<Location /svn> DAV svn SVNListParentPath on SVNParentPath D:\SVN #SVNIndexXSLT "/svnindex.xsl" AuthType Basic AuthName "Subversion repositories" AuthUserFile passwd #AuthzSVNAccessFile svnaccessfile Require valid-user </Location>
This configures Apache so that all your Subversion repositories are physically located below D:\SVN. The repositories are served to the outside world from the URL: http://MyServer/svn/ . Access is restricted to known users/passwords listed in the passwd file.
Para crear el fichero passwd, abra el Símbolo del sistema o la línea de comandos (ventana DOS) de nuevo, cambie a la carpeta Apache2 (normalmente C:\Archivos de programa\Apache Group\Apache2) y cree el fichero mediante
bin\htpasswd -c passwd <nombreusuario>
Esto creará un nuevo fichero con el nombre passwd que se utilizará para la autentificación. Se pueden crear usuarios adicionales con
bin\htpasswd passwd <nombreusuario>
Reinice el servicio de Apache de nuevo.
Apunte su navegador a http://MiServidor/svn/MiNuevoRepositorio (donde MiNuevoRepositorio es el nombre del repositorio de Subversion que creó antes). Si todo ha ido bien debería ver una ventana preguntando por un usuario y una contraseña, y luego podrá ver los contenidos de su repositorio.
A short explanation of what you just entered:
Tabla 3.1. Configuración de httpd.conf de Apache
| Configuración | Explicación |
|---|---|
| <Location /svn> | significa que los repositorios de Subversion están disponibles en la URL http://MiServidor/svn/ |
| DAV svn | le dice a Apache qué módulo será responsable de servir esa URL - en este caso, el módulo de Subversion. |
| SVNListParentPath on | Para Subversion 1.3 y superiores, esta directiva habilita el listado de todos los repositorios disponibles bajo SVNParentPath. |
| SVNParentPath D:\SVN | le dice a Subversion que busque repositorios bajo D:\SVN |
| SVNIndexXSLT "/svnindex.xsl" | Utilizado para mejorar la visualización desde un navegador de web. |
| AuthType Basic | se utiliza para activar la autentificación básica, es decir, Usuario/contraseña |
| AuthName "Subversion repositories" | se utiliza cuando le aparezca un diálogo de autentificación al usuario como información para decirle para qué se necesita su autentificación |
| AuthUserFile passwd | especifica qué fichero de contraseñas se utiliza para la autentificación |
| AuthzSVNAccessFile | lugar del fichero de Acceso para las rutas dentro del repositorio de Subversion |
| Require valid-user | especifica que sólo los usuarios que hayan introducido un par usuario/contraseña válido podrán acceder a la URL |
But that's just an example. There are many, many more possibilities of what you can do with the Apache web server.
Si desea que su repositorio tenga acceso de lectura para todo el mundo pero el acceso de escritura sólo para usuarios específicos, puede cambiar la línea
Require valid-user
por
<LimitExcept GET PROPFIND OPTIONS REPORT> Require valid-user </LimitExcept>
Using a passwd file limits and grants access to all of your repositories as a unit. If you want more control over which users have access to each folder inside a repository you can uncomment the line
#AuthzSVNAccessFile svnaccessfile
and create a Subversion access file. Apache will make sure that only valid users are able to access your /svn location, and will then pass the username to Subversion's AuthzSVNAccessFile module so that it can enforce more granular access based upon rules listed in the Subversion access file. Note that paths are specified either as repos:path or simply path. If you don't specify a particular repository, that access rule will apply to all repositories under SVNParentPath. The format of the authorization-policy file used by mod_authz_svn is described in “Autorización basada en rutas”
To make browsing the repository with a web browser 'prettier', uncomment the line
#SVNIndexXSLT "/svnindex.xsl"
and put the files svnindex.xsl, svnindex.css and menucheckout.ico in your document root directory (usually C:/Program Files/Apache Group/Apache2/htdocs). The directory is set with the DocumentRoot directive in your Apache config file.
Puede obtener estos tres ficheros directamente desde nuestro repositorio de código fuente en http://tortoisesvn.tigris.org/svn/tortoisesvn/trunk/contrib/other/svnindex. Si se le pide autenticación para este enlace, utilice guest como nombre de usuario y deje la contraseña vacía.
The XSL file from the TortoiseSVN repository has a nice gimmick: if you browse the repository with your web browser, then every folder in your repository has an icon on the right shown. If you click on that icon, the TortoiseSVN checkout dialog is started for this URL.
If you used the SVNParentPath directive then you don't have to change the Apache config file every time you add a new Subversion repository. Simply create the new repository under the same location as the first repository and you're done! In my company I have direct access to that specific folder on the server via SMB (normal windows file access). So I just create a new folder there, run the TortoiseSVN command → and a new project has a home...
Si está utilizando Subversion 1.3 o posterior, puede utilizar la directiva SVNListParentPath on para permitir que Apache produzca un listado de todos los proyectos disponibles si apunta su navegador a la ruta raíz en vez de a un repositorio en concreto.
The mod_authz_svn module permits fine-grained control of access permissions based on user names and repository paths. This is available with the Apache server, and as of Subversion 1.3 it is available with svnserve as well.
Esto sería un fichero de ejemplo:
[groups] admin = john, kate devteam1 = john, rachel, sally devteam2 = kate, peter, mark docs = bob, jane, miguel training = zak # Regla de acceso por defecto para TODOS los repositorios # Todo el mundo puede leer, los administradores pueden escribir, # Donpe Ligro está exluído. [/] * = r @admin = rw donpeligro = # Permitir a los desarrolladores acceso completo # al repositorio de su proyecto [proj1:/] @devteam1 = rw [proj2:/] @devteam2 = rw [bigproj:/] @devteam1 = rw @devteam2 = rw trevor = rw # Dar a los documentadores acceso de escritura # a todas las carpetas de documentación [/trunk/doc] @docs = rw # Dar a los becarios acceso de escritura # sólo al repositorio de pruebas [TrainingRepos:/] @training = rw
Tenga en cuenta que comprobar cada ruta puede ser una operación costosa, particularmente en el caso del registro de revisiones. El servidor toma cada ruta cambiada en cada revisión y comprueba si se puede leer, lo que puede ser lento en revisiones que afecten a un gran número de ficheros.
Authentication and authorization are separate processes. If a user wants to gain access to a repository path, she has to meet both, the usual authentication requirements and the authorization requirements of the access file.
Como habrá notado necesita introducir una entrada usuario/contraseña en el fichero passwd para cada usuario de forma separada. Y si (por razones de seguridad) quiere que sus usuarios cambien periódicamente sus contraseñas tendrá que hacer el cambio de forma manual.
But there's a solution for that problem - at least if you're accessing the repository from inside a LAN with a windows domain controller: mod_auth_sspi!
The original SSPI module was offered by Syneapps including source code. But the development for it has been stopped. But don't despair, the community has picked it up and improved it. It has a new home on SourceForge.
Download the module which matches your apache version, then copy the file mod_auth_sspi.so into the Apache modules folder.
Edit the Apache config file: add the line
LoadModule sspi_auth_module modules/mod_auth_sspi.so
to the LoadModule section. Make sure you insert this line before the line
LoadModule auth_module modules/mod_auth.so
To make the Subversion location use this type of authentication you have to change the line
AuthType Basic
to
AuthType SSPI
also you need to add
SSPIAuth On SSPIAuthoritative On SSPIDomain <domaincontroller> SSPIOmitDomain on SSPIUsernameCase lower SSPIPerRequestAuth on SSPIOfferBasic On
within the <Location /svn> block. If you don't have a domain controller, leave the name of the domain control as <domaincontroller>.
Note that if you are authenticating using SSPI, then you don't need the AuthUserFile line to define a password file any more. Apache authenticates your username and password against your windows domain instead. You will need to update the users list in your svnaccessfile to reference DOMAIN\username as well.
La autenticación SSPI sólo está habilitada para conexiones seguras por SSL (https). Si únicamente está utilizando conexiones http normales a su servidor, no funcionará.
Para habilitar SSL en su servidor, vea el capítulo: “Asegurando el servidor con SSL”
Subversion AuthzSVNAccessFile files are case sensitive in regard to user names (JUser is different from juser).
In Microsoft's world, Windows domains and user names are not case sensitive. Even so, some network administrators like to create user accounts in CamelCase (e.g. JUser).
La diferencia puede morderle cuando utilice la autentificación SSPI ya que el dominio de Windows y los nombres de usuario se pasan a Subversion exactamente como los haya tecleado el usuario en la ventana. Internet Explorer a menudo pasa el nombre de usuario a Apache automáticamente utilizando el formato con el que se creó la cuenta.
The end result is that you may need at least two entries in your AuthzSVNAccessFile for each user -- a lowercase entry and an entry in the same case that Internet Explorer passes to Apache. You will also need to train your users to also type in their credentials using lower case when accessing repositories via TortoiseSVN.
Apache's Error and Access logs are your best friend in deciphering problems such as these as they will help you determine the username string passed onto Subversion's AuthzSVNAccessFile module. You may need to experiment with the exact format of the user string in the svnaccessfile (e.g. DOMAIN\user vs. DOMAIN//user) in order to get everything working.
También es posible tener más de un origen de autentificación para su repositorio de Subversion. Para conseguirlo, debe hacer que cada tipo de autentificación sea no-autoritario, para que Apache compruebe múltiples orígenes buscando un par usuario/contraseña que concuerden.
Un escenario común es utilizar tanto la autentificación de dominio de Windows como un fichero passwd, para que pueda dar acceso a SVN a usuarios que no tienen usuario en el dominio de Windows.
To enable both Windows domain and passwd file authentication, add the following entries within the <Location> block of your Apache config file:
AuthBasicAuthoritative Off SSPIAuthoritative Off
Here is an example of the full Apache configuration for combined Windows domain and passwd file authentication:
<Location /svn> DAV svn SVNListParentPath on SVNParentPath D:\SVN AuthName "Subversion repositories" AuthzSVNAccessFile svnaccessfile.txt # NT Domain Logins. AuthType SSPI SSPIAuth On SSPIAuthoritative Off SSPIDomain <domaincontroller> SSPIOfferBasic On # Htpasswd Logins. AuthType Basic AuthBasicAuthoritative Off AuthUserFile passwd Require valid-user </Location>
Incluso aunque Apache 2.2.x tiene soporte para OpenSSL, no está activado por defecto. Necesitará activarlo manualmente.
In the apache config file, uncomment the lines:
#LoadModule ssl_module modules/mod_ssl.so
and at the bottom
#Include conf/extra/httpd-ssl.conf
then change the line (on one line)
SSLMutex "file:C:/Program Files/Apache Software Foundation/\ Apache2.2/logs/ssl_mutex"
to
SSLMutex default
Next you need to create an SSL certificate. To do that open a command prompt (DOS-Box) and change to the Apache folder (e.g. C:\program files\apache group\apache2) and type the following command:
bin\openssl req -config bin\openssl.cnf -new -out my-server.csr
You will be asked for a passphrase. Please don't use simple words but whole sentences, e.g. a part of a poem. The longer the phrase the better. Also you have to enter the URL of your server. All other questions are optional but we recommend you fill those in too.
Normally the privkey.pem file is created automatically, but if it isn't you need to type this command to generate it:
bin\openssl genrsa -out conf\privkey.pem 2048
Next type the commands
bin\openssl rsa -in conf\privkey.pem -out conf\server.key
and (on one line)
bin\openssl req -new -key conf\server.key -out conf\server.csr \ -config conf\openssl.cnf
and then (on one line)
bin\openssl x509 -in conf\server.csr -out conf\server.crt
-req -signkey conf\server.key -days 4000
This will create a certificate which will expire in 4000 days. And finally enter (on one line):
bin\openssl x509 -in conf\server.cert -out conf\server.der.crt
-outform DER
These commands created some files in the Apache conf folder (server.der.crt, server.csr, server.key, .rnd, privkey.pem, server.cert).
Reinicie el servicio de Apache.
Apunte su navegador a https://nombredelservidor/svn/project ...
Si está asegurando su servidor con SSL y utiliza la autentificación contra un dominio de Windows se encontrará que la navegación de repositorios con el Internet Explorer ya no funcionará. No se preocupe - es sólo que Internet Explorer no se puede autentificar. Los demás navegadores no tienen ese problema y tanto TortoiseSVN como cualquier otro cliente de Subversion todavía podrán autentificarse.
Si todavía quiere utilizar IE para navegar en el repositorio, puede:
define a separate <Location /path> directive in the Apache config file, and add the SSPIBasicPreferred On. This will allow IE to authenticate again, but other browsers and Subversion won't be able to authenticate against that location.
Ofrezca también la navegación sin autentificación encriptada (sin SSL). Extrañamente, IE no tiene ningún problema para autentificarse si la conexión no está asegurada con SSL.
In the SSL "standard" setup there's often the following statement in Apache's virtual SSL host:
SetEnvIf User-Agent ".*MSIE.*" \
nokeepalive ssl-unclean-shutdown \
downgrade-1.0 force-response-1.0
There are (were?) good reasons for this configuration, see http://www.modssl.org/docs/2.8/ssl_faq.html#ToC49 But if you want NTLM authentication you have to use keepalive. If You uncomment the whole SetEnvIf you should be able to authenticate IE with windows authentication over SSL against the Apache on Win32 with included mod_auth_sspi.
When you've set up SSL to make your repository more secure, you might want to disable the normal access via non-SSL (http) and only allow https access. To do this, you have to add another directive to the Subversion <Location> block: SSLRequireSSL.
An example <Location> block would look like this:
<Location /svn> DAV svn SVNParentPath D:\SVN SSLRequireSSL AuthType Basic AuthName "Subversion repositories" AuthUserFile passwd #AuthzSVNAccessFile svnaccessfile Require valid-user </Location>
Enviado a la lista de correo de TortoiseSVN por Nigel Green. ¡Gracias!
En algunas configuraciones de servidor puede que necesite configurar un único servidor que contenga 2 hosts SSL virtuales: el primero para acceso web público, sin requerimientos de un certificado de cliente; el segundo, seguro requiriendo un certificado de cliente, y ejecutando un servidor Subversion.
Al añadir una directiva SSLVerifyClient Optional en la sección por-servidor de la configuración de Apache (es decir, fuera de cualquier bloque VirtualHost y Directory), se fuerza a Apache a pedir un certificado de cliente en el saludo inicial SSL. Debido a un bug en mod_ssl, es esencial que el certificado se pida en este punto, ya que no funciona si la conexión SSL se re-negocia.
La solución es añadir la siguiente directiva en el directorio del host virtual que quiere bloquear para Subversion:
SSLRequire %{SSL_CLIENT_VERIFY} eq "SUCCESS"
Esta directiva da acceso al directorio sólo si se recibió y verificó correctamente un certificado de cliente.
Para resumir, las líneas relevantes de la configuración de Apache son:
SSLVerifyClient Optional
### Configuración del virtual host para el host PÚBLICO
### (sin necesidad de un certificado de cliente)
<VirtualHost 127.0.0.1:443>
<Directory "rutaalaraizdeficherospublicos">
</Directory>
</VirtualHost>
### Configuración del virtual host para SUBVERSION
### (necesita un certificado de cliente)
<VirtualHost 127.0.0.1:443>
<Directory "ruta a la raiz del host de subversion">
SSLRequire %{SSL_CLIENT_VERIFY} eq "SUCCESS"
</Directory>
<Location /svn>
DAV svn
SVNParentPath /rutaalrepositorio
</Location>
</VirtualHost>
Puede haber situaciones donde no es posible utilizar Apache como servidor. Afortunadamente, Subversion incluye Svnserve - un ligero servidor aislado que utiliza un protocolo propio sobre una conexión TCP/IP ordinaria.
In most cases svnserve is easier to setup and runs faster than the Apache based server. And now that SASL support is included it is easy to secure as well.
Obtenga la última versión de Subversion desde http://subversion.tigris.org/servlets/ProjectDocumentList?folderID=91. Alternativamente obtenga un instalador pre-empaquetado desde CollabNet en http://www.collab.net/downloads/subversion. Este instalador pondrá svnserve como un servicio de Windows, y también incluye algunas de las herramientas que necesitará si va a utilizar SASL para la seguridad.
Si ya tiene una versión de Subversion instalada, y svnserve se está ejecutando, necesitará pararlo antes de continuar.
Run the Subversion installer. If you run the installer on your server (recommended) you can skip step 4.
Open the windows-explorer, go to the installation directory of Subversion (usually C:\Program Files\Subversion) and in the bin directory, find the files svnserve.exe, intl3_svn.dll, libapr.dll, libapriconv.dll, libapriutil.dll, libdb*.dll, libeay32.dll and ssleay32.dll - copy these files, or just copy all of the bin directory, into a directory on your server e.g. c:\svnserve
Ahora que svnserve está instalado, necesitará ejecutarlo en su servidor. La forma más sencilla es ejecutar lo siguiente desde una ventana DOS o bien crear un acceso directo de Windows:
svnserve.exe --daemon
svnserve ahora se iniciará esperando peticiones entrantes en el puerto 3690. La opción --daemon le dice a svnserve que se ejecute como un servicio, por lo que continuará ejecutándose hasta que manualmente se le mande terminar.
Si aún no ha creado un repositorio, siga las instrucciones dadas en la instalación del servidor basado en Apache “Configuración”.
Para comprobar que svnserve está funcionando, utilice → para ver un repositorio.
Asumiendo que su repositorio está en c:\repos\TestRepo, y que su servidor se llama localhost, introduzca:
svn://localhost/repos/TestRepo
cuando le pregunte el navegador de repositorios.
You can also increase security and save time entering URLs with svnserve by using the --root switch to set the root location and restrict access to a specified directory on the server:
svnserve.exe --daemon --root drive:\path\to\repository\root
Using the previous test as a guide, svnserve would now run as:
svnserve.exe --daemon --root c:\repos
And in TortoiseSVN our repo-browser URL is now shortened to:
svn://localhost/TestRepo
Note that the --root switch is also needed if your repository is located on a different partition or drive than the location of svnserve on your server.
Svnserve podrá servir un número de repositorios arbitrario. Simplemente colóquelos en algún lugar bajo la carpeta raíz que acaba de definir, y acceda a ellos utilizando una URL relativa a esa raíz.
No cree o acceda a un repositorio Berkeley DB en una unidad de red compartida. No puede existir en un sistema de archivos remoto. Ni siquiera si tiene la unidad de red mapeada a una letra de unidad. Si intenta usar Berkeley DB en una unidad de red compartida, los resultados son imprevisibles - puede ver desde el principio errores misteriosos, o pueden pasar meses antes de que descubra que su base de datos del repositorio está corrupta de una forma inimaginable.
Running svnserve as a user is usually not the best way. It means always having a user logged in on your server, and remembering to restart it after a reboot. A better way is to run svnserve as a windows service. Starting with Subversion 1.4, svnserve can be installed as a native windows service.
To install svnserve as a native windows service, execute the following command all on one line to create a service which is automatically started when windows starts.
sc create svnserve binpath= "c:\svnserve\svnserve.exe --service
--root c:\repos" displayname= "Subversion" depend= tcpip
start= auto
If any of the paths include spaces, you have to use (escaped) quotes around the path, like this:
sc create svnserve binpath= "
\"C:\Program Files\Subversion\bin\svnserve.exe\"
--service --root c:\repos" displayname= "Subversion"
depend= tcpip start= auto
You can also add a description after creating the service. This will show up in the Windows Services Manager.
sc description svnserve "Subversion server (svnserve)"
Tenga en cuenta el formato no muy usual de la línea de comandos utilizado por sc. En los pares key= value no debe haber espacio entre la clave y el = pero sí debe haber un espacio antes del valor.
Microsoft now recommend services to be run as under either the Local Service or Network Service account. Refer to The Services and Service Accounts Security Planning Guide. To create the service under the Local Service account, append the following to the example above.
obj= "NT AUTHORITY\LocalService"
Note that you would have to give the Local Service account appropriate rights to both Subversion and your repositories, as well as any applications which are used by hook scripts. The built-in group for this is called "LOCAL SERVICE".
Una vez que haya instalado el servicio, necesitará ir al administrador de servicios para arrancarlo (sólo por esta vez; arrancará automáticamente cuando se reinicie el servidor).
Para obtener información más detallada, refiérase a Soporte de servicio de Windows para Svnserve.
Si ha instalado una versión anterior de svnserve utilizando el programa SVNService, y ahora quiere utilizar el soporte nativo, deberá desregistrar el programa SVNService como servicio (¡recuerde parar el servicio antes!). Símplemente utilice el comando
svnservice -remove
para eliminar la entrada del registro del servicio.
The default svnserve setup provides anonymous read-only access. This means that you can use an svn:// URL to checkout and update, or use the repo-browser in TortoiseSVN to view the repository, but you won't be able to commit any changes.
Para permitir acceso de escritura en un repositorio, necesitará editar el fichero conf/svnserve.conf en el directorio de su repositorio. Este fichero controla la configuración del servicio svnserve, y también contiene información útil.
Puede habilitar el acceso anónimo para escritura simplemente poniendo:
[general] anon-access = write
Sin embargo, no sabrá quién ha hecho cambios en el repositorio, dado que la propiedad svn:author estará vacía. Tampoco podrá controlar quién puede hacer cambios en el repositorio. ¡Esta es una configuración algo arriesgada!
One way to overcome this is to create a password database:
[general] anon-access = none auth-access = write password-db = userfile
Where userfile is a file which exists in the same directory as svnserve.conf. This file can live elsewhere in your file system (useful for when you have multiple repositories which require the same access rights) and may be referenced using an absolute path, or a path relative to the conf directory. If you include a path, it must be written /the/unix/way. Using \ or drive letters will not work. The userfile should have a structure of:
[users] username = password ...
This example would deny all access for unauthenticated (anonymous) users, and give read-write access to users listed in userfile.
If you maintain multiple repositories using the same password database, the use of an authentication realm will make life easier for users, as TortoiseSVN can cache your credentials so that you only have to enter them once. More information can be found in the Subversion book, specifically in the sections Create a 'users' file and realm and Client Credentials Caching
La Capa de seguridad y autenticación simple Cyrus (Cyrus Simple Authentication and Security Layer) es un software de código abierto escrito por la Universidad de Carnegie Mellon. Añade capacidades genéricas de autenticación y encriptación a cualquier protocolo de red, y desde Subversion 1.5 y posteriores, tanto el servidor svnserve como el cliente TortoiseSVN saben cómo hacer uso de esta biblioteca.
Para una discusión más completa de las opciones disponibles, debería leer el libro de Subversion en la sección Utilizando svnserve con SASL. Si simplemente está buscando una forma sencilla para poner autenticación y encriptación en un servidor Windows, para que su repositorio pueda accederse seguramente a través del gran e inseguro Internet, siga leyendo.
Para activar los mecanismos específicos SASL en el servidor, necesitará hacer tres cosas. Primero, cree una sección [sasl] en el fichero svnserve.conf de su repositorio, con este par de clave-valor:
use-sasl = true
En segundo lugar, cree un fichero llamado svn.conf en un lugar conveniente - típicamente en el directorio donde está instalado Subversion.
En tercer lugar, cree dos nuevas entradas de registro para indicar a SASL dónde encontrar las cosas. Cree una clave de registro llamada [HKEY_LOCAL_MACHINE\SOFTWARE\Carnegie Mellon\Project Cyrus\SASL Library] y ponga dos nuevos valores de cadena dentro: SearchPath establecido a la carpeta que contiene los plug-ins sasl*.dll (normalmente en la carpeta de instalación de Subversion), y ConfFile establecido a la carpeta que contiene el fichero svn.conf. Si ha utilizado el instalador CollabNet, estas claves de registro ya habrán sido creadas por usted.
Edite el fichero svn.conf para que contenga lo siguiente:
pwcheck_method: auxprop auxprop_plugin: sasldb mech_list: DIGEST-MD5 sasldb_path: C:\TortoiseSVN\sasldb
La última línea muestra el lugar de la base de datos de autenticación, que es un fichero llamado sasldb. Este puede estar en cualquier sitio, pero una elección conveniente es la carpeta padre del repositorio. Asegúrese de que el servicio svnserve tiene acceso de lectura sobre este fichero.
Si svnserve ya está ejecutándose, necesitará reiniciarlo para asegurarse de que lee la configuración actualizada.
Ahora que todo está preparado, todo lo que necesita es crear algunos usuarios y contraseñas. Para hacerlo, necesitará el programa saslpasswd2. Si ha usado el instalador CollabNet, ese programa estará en el diretorio de instalación. Utilice un comando como este:
saslpasswd2 -c -f C:\TortoiseSVN\sasldb -u realm username
La opción -f establece el lugar de la base de datos, realm debe ser el mismo valor que ha definido en el fichero svnserve.conf de su repositorio, y el nombre de usuario es exactamente lo que se supone que es. Tenga en cuenta que el realm no admite espacios en blanco.
Puede listar los nombres de usuarios almacenados en la base de datos utilizando el programa sasldblistusers2.
Para habilitar o deshabilitar diferentes niveles de encriptación, puede poner dos valores en el fichero svnserve.conf de su repositorio:
[sasl] use-sasl = true min-encryption = 128 max-encryption = 256
Las variables min-encryption y max-encryption controlan el nivel de encriptación demandado por el servidor. Para deshabilitar la encriptación completamente, establezca ambos valores a 0. Para habilitar la suma simple de comprobación (por ejemplo, previene alteraciones y garantiza la integridad de los datos sin encriptación), establezca ambos valores a 1. Si desea permitir (pero no requerir) encriptación, establezca el valor mínimo a 0 y el valor máximo a alguna longitud de bits. Para requerir encriptación incondicional, establezca ambos valores a números mayores de 1. En nuestro ejemplo anterior, requerimos a los clientes encriptación de al menos 128-bits, pero no más de 256-bits.
Another way to authenticate users with a svnserve based server is to use a secure shell (SSH) to tunnel requests through. It is not as simple to set up as SASL, but it may be useful is some cases.
Con esta aproximación, svnserve no se ejecuta como un servicio, en cambio, el shell seguro inicia svnserve por usted, ejecutándolo como el usuario autentificado SSH. Para habilitar esto, necesita un servicio de shell seguro en su servidor.
En Apéndice G, Asegurando Svnserve utilizando SSH tiene un método básico para preparar su servidor. Puede encontrar otros temas SSH en el FAQ buscando “SSH”.
Further information about svnserve can be found in the Version Control with Subversion.
Empezando con Subversion 1.3, svnserve soporta el mismo esquema de autorización basada en rutas que está disponible en el módulo mod_authz_svn de Apache. Necesita editar el fichero conf/svnserve.conf dentro del directorio de su repositorio y añadir una línea refiriéndose a su fichero de autorización.
[general] authz-db = authz
Aquí, authz es un fichero que debe existir y que define los permisos de acceso. Puede utilizar un fichero separado por cada repositorio, o utilizar el mismo fichero para varios repositorios. Si desea una descripción del formato del fichero, lea “Autorización basada en rutas”.
Tabla de contenidos
Sin importar el protocolo que use para acceder a sus repositorios, siempre necesita crear al menos un repositorio. Esto puede hacerse o bien con el cliente de línea de comandos de Subversion o con TortoiseSVN.
Si todavía no ha creado un repositorio de Subversion, ahora es el momento de hacerlo.
You can create a repository with the FSFS backend or with the older Berkeley Database (BDB) format. The FSFS format is generally faster and easier to administer, and it works on network shares and Windows 98 without problems. The BDB format was once considered more stable simply because it has been in use for longer, but since FSFS has now been in use in the field for several years, that argument is now rather weak. Read Choosing a Data Store in the Subversion book for more information.
Cree una carpeta vacía con el nombre SVN (por ejemplo, D:\SVN\), que se usará como la raíz de todos sus repositorios.
Cree otra carpeta MiNuevoRepositorio dentro de D:\SVN\
Abra un símbolo del sistema (o ventana MS-DOS), vaya a D:\SVN\ y escriba
svnadmin create --fs-type bdb MiNuevoRepositorio
o
svnadmin create --fs-type fsfs MiNuevoRepositorio
Ahora ya tiene un nuevo repositorio que se encuentra en D:\SVN\MiNuevoRepositorio.
Abra el explorador de Windows
Cree una nueva carpeta y llámela por ejemplo SVNRepositorio
Haga click con el botón derecho sobre la carpeta recién creada y seleccione → .
Entonces se creará un repositorio dentro de la nueva carpeta. ¡¡¡No edite los ficheros!!!. Si obtiene algún error asegúrese de que la carpeta esté vacía y que no esté protegida contra escritura.
TortoiseSVN ya no ofrece la opción de crear repositorios BDB, aunque aún puede utilizar el cliente de línea de comandos para crearlos. Los repositorios FSFS son generalmente más sencillos de mantener, y también nos facilita el mantenimiento de TortoiseSVN debido a los problemas de compatibilidad entre las diferentes versiones de BDB.
Future versions of TortoiseSVN will not support file:// access to BDB repositories due to these compatibility issues, although it will of course always support this repository format when accessed via a server through the svn://, http:// or https:// protocols. For this reason, we strongly recommend that any new repository which must be accessed using file:// protocol is created as FSFS.
Of course we also recommend that you don't use file:// access at all, apart from local testing purposes. Using a server is more secure and more reliable for all but single-developer use.
Para acceder a su repositorio local, necesita la ruta a esa carpeta. Recuerde que Subversion espera todas las rutas de repositorios con el formato file:///C:/RepositorioSVN/. Tenga en cuenta el uso de las barras de dividir.
Para acceder a un repositorio que se encuentre en una unidad de red compartida puede o bien utilizar mapeado de unidades, o bien usar la ruta UNC. El formato de una ruta UNC es file://NombreDelServidor/ruta/al/repositorio/. Observe que sólo hay 2 barras invertidas aquí.
Antes de SVN 1.2, las rutas UNC tenían que estar dadas en la forma más oscura file:///\NombreDelServidor/ruta/al/repositorio. Esta forma aún se puede utilizar, pero no está recomendada.
Do not create or access a Berkeley DB repository on a network share. It cannot exist on a remote file system. Not even if you have the network drive mapped to a drive letter. If you attempt to use Berkeley DB on a network share, the results are unpredictable - you may see mysterious errors right away, or it may be months before you discover that your repository database is subtly corrupted.
Although in theory it is possible to put a FSFS repository on a network share and have multiple users access it using file:// protocol, this is most definitely not recommended. In fact we would strongly discourage it, and do not support such use.
En primer lugar, está dando a todos los usuarios acceso directo de escritura en el repositorio, por lo que cualquier usuario podría accidentalmente borrar el repositorio completo o hacerlo inutilizable de cualquier otra forma.
En segundo lugar, no todos los protocolos de compartición de ficheros de red soportan el bloqueo que Subversion necesita, por lo que puede encontrar que su repositorio se corrompe. Puede que no ocurra al principio, pero un día dos usuarios intentarán acceder al repositorio al mismo tiempo.
En tercer lugar, también debe establecer los permisos de los ficheros. Puede ser sencillo en una unidad de red nativa de Windows, pero en SAMBA esto es particularmente dificil.
file:// access is intended for local, single-user access only, particularly testing and debugging. When you want to share the repository you really need to set up a proper server, and it is not nearly as difficult as you might think. Read Capítulo 3, Preparando un servidor for guidelines on choosing and setting up a server.
Antes de que importe sus datos al repositorio, primero debería pensar cómo quiere organizar sus datos. Si utiliza uno de los patrones recomendados lo tendrá luego mucho más fácil.
There are some standard, recommended ways to organize a repository. Most people create a trunk directory to hold the “main line” of development, a branches directory to contain branch copies, and a tags directory to contain tag copies. If a repository holds only one project, then often people create these top-level directories:
/trunk /branches /tags
Si un repositorio contiene múltiples proyectos, la gente a menudo indexa por ramas:
/trunk/paint /trunk/calc /branches/paint /branches/calc /tags/paint /tags/calc
...o por proyecto:
/paint/trunk /paint/branches /paint/tags /calc/trunk /calc/branches /calc/tags
Indexar por proyecto tiene sentido si los proyectos no están muy relacionados y cada uno se obtiene de forma individual. Para proyectos relacionados donde puede querer obtener todos los proyectos de golpe, o donde los proyectos están unidos y forman un paquete de distribución único, a menudo es mejor indexar por rama. De esta forma sólo tendrá un tronco para obtener, y las relaciones entre sub-proyectos se ven más fácilmente.
Si adopta una aproximación de primer nivel /trunk /tags /branches, no es necesario decir que tendrá que copiar el tronco completo para cada rama y etiqueta, y de alguna forma esta estructura ofrece la mayor flexibilidad.
Para proyectos que no tienen que ver, puede preferir utilizar repositorios separados. Cuando confirma los cambios, lo que cambia es el número de revisión del repositorio completo, no el número de revisión del proyecto. Si tiene 2 proyectos que no tengan que ver compartiendo un repositorio, eso puede llevar a que ocurran grandes lagunas en los números de revisión. Los proyectos Subversion y TortoiseSVN aparecen en el mismo servidor, pero son dos repositorios totalmente separados que permiten un desarrollo independiente, y no hay confusión sobre los números de compilación.
Por supuesto, tiene libertad para ignorar estos patrones comunes. Puede crear cualquier variación, la que mejor le venga a usted o a su equipo. Recuerde que cualquiera que sea la que elija, no es una elección inamovible. Puede reorganizar su repositorio en cualquier momento. Dado que las ramas y las etiquetas son directorios normales, TortoiseSVN puede mover o renombrarlas como desee.
Cambiar de una disposición a otra es sólo una cuestión de ejecutar una serie de movimientos en el lado del servidor; si no le gusta la forma en la que están organizadas las cosas en el repositorio, sólo tiene que ir moviendo los directorios.
So if you haven't already created a basic folder structure inside your repository you should do that now. There are two ways to achieve this. If you simply want to create a /trunk /tags /branches structure, you can use the repository browser to create the three folders (in three separate commits). If you want to create a deeper hierarchy then it is simpler to create a folder structure on disk first and import it in a single commit, like this:
cree una nueva carpeta en su disco duro
cree la estructura de carpetas de primer nivel dentro de esa carpeta - ¡no ponga ningún fichero allí todavía!
importe esta estructura en el repositorio via click con el botón derecho en la carpeta y seleccionando → . Esto importará su carpeta temporal a la raíz del repositorio para crear la estructura básica del repositorio.
Tenga en cuenta que el nombre de la carpeta que está importando no aparece en el repositorio, sólo sus contenidos. Por ejemplo, cree la siguiente estructura de carpetas:
C:\Temp\New\trunk C:\Temp\New\branches C:\Temp\New\tags
Importe C:\Temp\New en la raíz del repositorio, que entonces contendrá:
/trunk /branches /tags
Cualquiera que sea el tipo de repositorio que use, es de vital importancia que mantenga copias de seguridad regulares, y que verifique la copia. Si el servidor falla, puede ser capaz de acceder a la versión más reciente de sus ficheros, pero sin el repositorio toda su historia se perderá para siempre.
La manera más sencilla (pero no recomendada) es tan simple como copiar la carpeta del repositorio a un medio de backup. Sin embargo, tiene que estar absolutamente seguro de que no hay ningún proceso accediendo a los datos. En este contexto, acceder significa cualquier tipo de acceso. En un repositorio BDB se escribe incluso cuando la operación sólo parece que necesite leer, como obtener el estado. Si se accede a su repositorio durante la copia (se deja un navegador web abierto, WebSVN, etc.) la copia puede que no valga para nada.
El método recomendado es ejecutar
svnadmin hotcopy ruta/al/repositorio ruta/al/backup --clean-logs
para crear una copia del repositorio de forma segura. Entonces hacer una copia de seguridad de la copia. La opción --clean-logs no es necesaria, pero quita cualquier fichero de log redundante cuando hace una copia de seguridad de un repositorio BDB; lo que puede ahorrar algo de espacio.
La herramienta svnadmin se instala automáticamente cuando instala el cliente de línea de comandos de Subversion. Si está instalando las herramientas de línea de comandos en un PC con Windows, la mejor forma de hacerlo es descargar la versión con Windows installer. Está comprimido de forma más eficiente que la versión .zip, por lo que la descarga es menor, y se encarga de establecer las rutas por usted. Puede descargar la última versión del cliente de línea de comandos desde http://subversion.tigris.org/servlets/ProjectDocumentList?folderID=91.
A hook script is a program triggered by some repository event, such as the creation of a new revision or the modification of an unversioned property. Each hook is handed enough information to tell what that event is, what target(s) it's operating on, and the username of the person who triggered the event. Depending on the hook's output or return status, the hook program may continue the action, stop it, or suspend it in some way. Please refer to the chapter on Hook Scripts in the Subversion Book for full details about the hooks which are implemented.
Estos scripts gancho se ejecutan por el servidor que hospeda el repositorio. TortoiseSVN también le permite configurar scripts ganchos del lado del cliente que se ejecutan localmente en ciertos eventos. Para más información consulte “Scripts gancho del lado del cliente”.
Puede encontrar scripts de ganchos en el directorio hooks del repositorio. Estos scripts de ejemplo son válidos para servidores Unix/Linux pero necesitan modificarse si su servidor está basado en Windows. El gancho puede ser un fichero batch o un ejecutable. El siguiente ejemplo muestra un fichero batch que puede ser usado para implementar un ganch pre-revprop-change.
rem Solo se permite cambiar mensajes de registro. if "%4" == "svn:log" exit 0 echo No se puede cambiar la property '%4' >&2 exit 1
Tenga en cuenta que cualquier cosa que mande a la salida estándar se descartará. Si desea que aparezca un mensaje en el diálogo Confirmación Rechazada debe enviarlo a la salida de error. En un fichero batch esto se consigue usando >&2
If you want to make your Subversion repository available to others you may want to include a link to it from your website. One way to make this more accessible is to include a checkout link for other TortoiseSVN users.
When you install TortoiseSVN, it registers a new tsvn: protocol. When a TortoiseSVN user clicks on such a link, the checkout dialog will open automatically with the repository URL already filled in.
To include such a link in your own html page, you need to add code which looks something like this:
<a href="tsvn:https://tortoisesvn.tigris.org/svn/tortoisesvn/trunk"> </a>
Of course it would look even better if you included a suitable picture. You can use the TortoiseSVN logo or you can provide your own image.
<a href="tsvn:https://tortoisesvn.tigris.org/svn/tortoisesvn/trunk"> <img src=TortoiseCheckout.png></a>
Tabla de contenidos
Este documento describe el uso diario del cliente TortoiseSVN. No es una introducción a los sistemas de control de versiones, y no es una introducción a Subversion (SVN). Es más como un lugar donde puede venir cuando sepa qué quiere hacer, pero no recuerde exactamente cómo hacerlo.
If you need an introduction to version control with Subversion, then we recommend you read the fantastic book: Version Control with Subversion.
Este documento es también un trabajo en progreso, igual que lo son TortoiseSVN y Subversion. Si encuentra algún error, por favor háganoslo saber en la lista de correo para que podamos actualizar la documentación. Algunas de las capturas de pantalla en la Guía de Uso Diario (GUD) puede que no reflejen el estado actual del software. Le rogamos nos disculpe. Trabajamos en TortoiseSVN en nuestro tiempo libre.
In order to get the most out of the Daily Use Guide:
Debe tener ya instalado TortoiseSVN.
Debe estar familiarizado con los sistemas de control de versiones.
Debe conocer las bases de Subversion.
Debe haber preparado un servidor y/o tener acceso a un repositorio de Subversion.
One of the most visible features of TortoiseSVN is the icon overlays which appear on files in your working copy. These show you at a glance which of your files have been modified. Refer to “Iconos sobreimpresionados” to find out what the different overlays represent.
Todos los comandos de TortoiseSVN se invocan desde el menú contextual del explorador de Windows. La mayoría se ven directamente, cuando hace click con el botón derecho en un fichero o una carpeta. Los comandos disponibles dependen de si el fichero o la carpeta o su carpeta padre está bajo el control de versiones o no. También puede ver el menú de TortoiseSVN como parte del menú archivo del explorador.
Some commands which are very rarely used are only available in the extended context menu. To bring up the extended context menu, hold down the Shift key when you right-click.
En algunos casos puede ver varias entradas de TortoiseSVN. ¡Esto no es un error!
Este ejemplo es para un acceso directo sin versionar dentro de una carpeta versionada, y en el menú de archivo del Explorador hay tres entradas para TortoiseSVN. Una es para la carpeta, otra para el acceso directo en sí mismo, y otra para el objeto al que apunta el acceso directo. Para ayudarle a distinguir entre ellos, los iconos tienen un indicador en la esquina inferior derecha para mostrarle que la entrada del menú es para un fichero, una carpeta, un acceso directo o para múltiples ítems seleccionados.
Si está utilizando Windows 2000 verá que los menús contextuales se muestran sólo como texto, sin los iconos de menú mostrados arriba. Sabemos que esto funcionaba en las versiones anteriores, pero Microsoft ha cambiado la forma en la que los iconos de menú funcionan en Vista, y eso nos ha forzado a utilizar una forma para mostrarlos que desafortunadamente no funciona en Windows 2000.
Otros comandos están disponibles como manejadores de arrastre, cuando arrastra con el botón derecho ficheros o carpetas a un nuevo destino dentro de copias de trabajo, o cuando arrastra con el botón derecho un fichero o una carpeta no versionados a un directorio que está bajo el control de versiones.
Some common operations have well-known Windows shortcuts, but do not appear on buttons or in menus. If you can't work out how to do something obvious, like refreshing a view, check here.
La ayuda, por supuesto.
Refresca la vista actual. Este es quizás el comando de una tecla más útil. Por ejemplo... en el Explorador esto refresca los iconos sobreimpresionados en su copia de trabajo. En el diálogo de confirmación volverá a reescanear la copia de trabajo para ver qué puede necesitar ser confirmado. En el diálogo de Mostrar Registro contactará con el repositorio de nuevo buscando los cambios más recientes.
Selecciona todo. Esto puede ser útil si obtiene un mensaje de error y quiere copiar y pegarlo en un email. Utilice Ctrl-A para seleccionar el mensaje de error y luego...
... copia el texto seleccionado.
If the repository that you are trying to access is password protected, an authentication Dialog will show up.
Enter your username and password. The checkbox will make TortoiseSVN store the credentials in Subversion's default directory: %APPDATA%\Subversion\auth in three subdirectories:
svn.simple contiene las credenciales para la autentificación básica (usuario/contraseña).
svn.ssl.server contiene los certificados SSL de servidor.
svn.username contiene las credenciales para autentificación sólo por usuario (sin necesidad de contraseña).
If you want to clear the authentication cache for all servers, you can do so from the Saved Data page of TortoiseSVN's settings dialog. That button will clear all cached authentication data from the Subversion auth directories, as well as any authentication data stored in the registry by earlier versions of TortoiseSVN. Refer to “Datos de configuración almacenados”.
Para más información sobre cómo preparar su servidor para la autentificación y el control de acceso, vea Capítulo 3, Preparando un servidor
Muchos de los diálogos de TortoiseSVN tienen montones de información que mostrar, pero a menudo es más útil maximizar sólo la altura o sólo la anchura, mejor que maximizar para ocupar toda la pantalla. Como ayuda existen atajos para esto en el botón Maximizar. Utilice el botón central del ratón para maximizar verticalmente, y el botón derecho del ratón para maximizar horizontalmente.
Si está importando en un repositorio que ya tiene algunos proyectos, entonces la estructura del repositorio ya estará decidida. Si está importando datos a un nuevo repositorio entonces merece la pena tomar el tiempo para pensar en cómo debería organizarse. Lea “Organización del repositorio” para más información.
Esta sección describe el comando importar de Subversion, que fue diseñado para importar una jerarquía de directorios en el repositorio de una vez. Aunque funciona, tiene algunos inconvenientes:
No hay forma de seleccionar los ficheros y carpetas a incluir, salvo si utiliza la configuración del patrón global de ignorar.
La carpeta importada no se convierte en una copia de trabajo. Tiene que hacer una obtención para copiar los ficheros de nuevo desde el servidor.
It is easy to import to the wrong folder level in the repository.
Por estas razones le recomendamos que no utilice el comando importar en absoluto, y en cambio siga el método de dos pasos descrito en “Importar en el sitio”. Pero dado que ya está aquí, así es como funciona el comando importar básico ...
Antes de importar su proyecto en un repositorio debería:
Quitar todos los ficheros que no se necesitan para construir el proyecto (ficheros temporales, ficheros que se generan por un compilador como los *.obj, binarios compilados, ...)
Organize the files in folders and sub-folders. Although it is possible to rename/move files later it is highly recommended to get your project's structure straight before importing!
Ahora seleccione la carpeta superior de la estructura de directorios del proyecto en el explorador de Windows, y haga click con el botón derecho para abrir el menú contextual. Seleccione el comando → y aparecerá un cuadro de diálogo:
En este diálogo tiene que introducir la URL del lugar del repositorio donde desea importar su proyecto. Es muy importante darse cuenta de que la carpeta local que está importando no aparece en sí misma en el repositorio, sólo su contenido. Por ejemplo, si tiene una estructura:
C:\Proyectos\Widget\source C:\Proyectos\Widget\doc C:\Proyectos\Widget\images
e importa C:\Proyectos\Widget en http://mydomain.com/svn/trunk entonces puede que se sorprenda al encontrar que sus subdirectorios van directos a trunk en vez de estar en un subdirectorio Widget. Necesita especificar el subdirectorio como parte de la URL, http://mydomain.com/svn/trunk/Widget-X. Tenga en cuenta que el comando importar automáticamente crea los subdirectorios en el repositorio si no existen.
El mensaje de importación se utiliza como un mensaje de registro.
Por defecto, los ficheros y carpetas que concuerden con los patrones globales de ignorar no se importan. Para cambiar este comportamiento, puede utilizar la casilla Incluir ficheros ignorados. Lea “Configuración general” para más información sobre cómo establecer un patrón global de ignorar.
As soon as you press TortoiseSVN imports the complete directory tree including all files into the repository. The project is now stored in the repository under version control. Please note that the folder you imported is NOT under version control! To get a version-controlled working copy you need to do a Checkout of the version you just imported. Or read on to find out how to import a folder in place.
Asumiendo que ya tiene un repositorio, y que quiere añadir una nueva estructura de carpetas e él, sólo tiene que seguir estos pasos:
Use the repository browser to create a new project folder directly in the repository.
Ejecute la operación obtener de la nueva carpeta sobre la carpeta de más alto nivel que desea importar. Obtendrá una advertencia porque la carpeta local no está vacía. Ahora tiene una carpeta de más alto nivel versionada con contenido no versionado.
Use → on this versioned folder to add some or all of the content. You can add and remove files, set svn:ignore properties on folders and make any other changes you need to.
Confirme la carpeta de más alto nivel, y ya tiene un nuevo árbol versionado, y una copia de trabajo local, creada desde su carpeta existente.
A veces necesitará tener un fichero bajo control de versiones que contenga datos específicos del usuario. Esto significa que tiene un fichero que cada desarrollador/usuario necesita modificar para que se ajuste a su configuración local. Pero versionar ese fichero es dificil, porque cada usuario haría confirmaciones de sus cambios cada vez en el repositorio.
In such cases we suggest to use template files. You create a file which contains all the data your developers will need, add that file to version control and let the developers check this file out. Then, each developer has to make a copy of that file and rename that copy. After that, modifying the copy is not a problem anymore.
Por poner un ejemplo, puede mirar el script de compilación de TortoiseSVN. Se invoca a un fichero llamado TortoiseVars.bat que no existe en el repositorio. Sólo existe el fichero TortoiseVars.tmpl. TortoiseVars.tmpl es el fichero plantilla del que cada desarrollador tiene que hacer una copia y cambiarla de nombre a TortoiseVars.bat. Dentro de ese fichero, hemos añadido comentarios para que los usuarios vean qué lineas tienen que editar y cambiar de acuerdo a sus configuraciones locales para que funcione.
Para no molestar a los usuarios, también hemos añadido el fichero TortoiseVars.bat a la lista de ignorados de su carpeta padre, es decir, hemos cambiado la propiedad de Subversion svn:ignore para incluir ese nombre de fichero. De esta forma no se mostrará como no versionado en cada confirmación.
A veces es útil construir una copia de trabajo que está hecho de un número de obtenciones diferentes. Por ejemplo, puede querer que diferentes carpetas vengan de orígenes distintos de un repositorio, o quizás de repositorios diferentes. Si desea que todos los usuarios tengan la misma estructura, puede definir propiedades svn:externals.
Let's say you check out a working copy of /project1 to D:\dev\project1. Select the folder D:\dev\project1, right click and choose → from the context menu. The Properties Dialog comes up. Then go to the Subversion tab. There, you can set properties. Click . Select the svn:externals property from the combobox and write in the edit box the repository URL in the format name url or if you want to specify a particular revision, name -rREV url You can add multiple external projects, 1 per line. Note that URLs must be properly escaped or they will not work. For example you must replace each space with %20. Note that it is not possible to use folder names with spaces in them. Suppose that you have set these properties on D:\dev\project1:
sounds http://sounds.red-bean.com/repos quick_graphs http://graphics.red-bean.com/repos/fast%20graphics skins/toolkit -r21 http://svn.red-bean.com/repos/skin-maker
Now click and commit your changes. When you (or any other user) update your working copy, Subversion will create a sub-folder D:\dev\project1\sounds and checkout the sounds project, another sub-folder D:\dev\project1\quick graphs containing the graphics project, and finally a nested sub-folder D:\dev\project1\skins\toolkit containing revision 21 of the skin-maker project.
You should strongly consider using explicit revision numbers in all of your externals definitions, as described above. Doing so means that you get to decide when to pull down a different snapshot of external information, and exactly which snapshot to pull. Besides the common sense aspect of not being surprised by changes to third-party repositories that you might not have any control over, using explicit revision numbers also means that as you backdate your working copy to a previous revision, your externals definitions will also revert to the way they looked in that previous revision, which in turn means that the external working copies will be updated to match they way they looked back when your repository was at that previous revision. For software projects, this could be the difference between a successful and a failed build of an older snapshot of your complex code base.
Si los proyectos externos están en el mismo repositorio, cualquier cambio que haga allí se incluirá en la lista de confirmación cuando confirme su proyecto principal.
Si los proyectos externos están en repositorios diferentes, cualquier cambio que haga en el proyecto externo se notificará cuando cnofirme el proyecto principal, pero tendrá que confirmar esos cambios externos de forma separada.
Si utiliza URLs absolutas en las definiciones svn:externals y tiene que relocalizar su copia de trabajo (por ejemplo si la URL de su repositorio cambia), entonces sus externos no cambiarán y puede que no funcionen más.
Para evitar dichos problemas, los clientes de Subversion versión 1.5 y superior soportan URLs externas relativas. Hay cuatro formas para especificar una URL relativa. En los siguientes ejemplos, asumimos que tenemos dos repositorios: uno en http://example.com/svn/repos-1 y otro en http://example.com/svn/repos-2. Tenemos una copia de trabajo de http://example.com/svn/repos-1/project/trunk en C:\Working y la propiedad svn:externals está establecida en trunk.
Estas URLs siempre comienzan con la cadena ../. Por ejemplo:
../../widgets/foo common/foo-widget
Esto extraerá http://example.com/svn/repos-1/widgets/foo en C:\Working\common\foo-widget.
Tenga en cuenta que la URL es relativa a la URL del directorio con la propiedad svn:externals, no al directorio donde la carpeta externa se escribe en el disco.
Estas URLs siempre comienzan con la cadena ^/. Por ejemplo:
^/widgets/foo common/foo-widget
Esto extraerá http://example.com/svn/repos-1/widgets/foo en C:\Working\common\foo-widget.
Puede referirse fácilmente a otros repositorios con el mismo SVNParentPath (un directorio común que contiene varios repositorios). Por ejempo:
^/../repos-2/hammers/claw common/claw-hammer
Esto extraerá http://example.com/svn/repos-2/hammers/claw en C:\Working\common\claw-hammer.
Las URLs que comienzan con la cadena // copian sólo la parte del esquema de la URL. Esto es útil cuando se debe acceder al mismo nombre de servidor con diferentes esquemas dependiendo de la red; por ejemplo los clientes en la intranet utilizan http:// mientras que los clientes externos utilizan svn+ssh://. Por ejemplo:
//example.com/svn/repos-1/widgets/foo common/foo-widget
Esto extraerá http://example.com/svn/repos-1/widgets/foo o svn+ssh://example.com/svn/repos-1/widgets/foo dependiendo de qué método se utilice para obtener C:\Working.
Las URLs que comienzan con la cadena / copian el esquema y el nombre del servidor de la URL, por ejemplo:
/svn/repos-1/widgets/foo common/foo-widget
Esto extraerá http://example.com/svn/repos-1/widgets/foo en C:\Working\common\foo-widget. Pero si obtiene su copia de trabajo desde otro servidor en svn+ssh://another.mirror.net/svn/repos-1/project1/trunk entonces la referencia externa extraerá svn+ssh://another.mirror.net/svn/repos-1/widgets/foo.
Si necesita más información sobre cómo TortoiseSVN maneja las Propiedades, lea “Configuración del proyecto”.
Para averiguar los diferentes métodos para acceder a subproyectos comunes lea “Incluir un sub-proyecto común”.
Para tener una copia de trabajo necesita obtener una de un repositorio.
Seleccione un directorio en el explorador de Windows donde quiera poner su copia de trabajo. Haga click con el botón derecho para mostrar el menú contextual y seleccione el comando → , que mostrará el siguiente cuadro de diálogo:
Si introduce un nombre de carpeta que no aún no exista, se creará un directorio con ese nombre.
Puede elegir la profundidad que desea para la obtención, lo que le permite especificar la profundidad de la recusión en las carpetas hijas. Si sólo desea unas pocas secciones de un árbol grande, puede obtener sólo la carpeta de más alto nivel, y luego actualizar las carpetas seleccionadas de forma recursiva.
Obtener el árbol entero, incluyendo todas las carpetas hijas y subcarpetas.
Obtener el directorio especificado, incluyendo todos los fichero sy carpetas hijas, pero no rellenar las carpetas hijas.
Obtener la carpeta especificada, incluyendo todos los ficheros pero no obtener ninguna carpeta hija.
Obtener sólo el directorio. No rellenarlo con ficheros ni carpetas hijas.
Retiene la profundidad especificada en la copia de trabajo. Esta opción no se utiliza en el diálogo obtener, pero es el valor por defecto para todos los demás diálogos que tengan opción de profundidad.
Si obtiene una copia de trabajo dispersa (por ejemplo seleccionando cualquier otra opción distinta de totalmente recursivo para la profundidad de la obtención), puede conseguir sub-carpetas adicionales utilizando el Navegador de repositorios (“El navegador de repositorios”) o el diálogo Comprobar modificaciones (“Estado local y remoto”).
In the repository browser, Right click on the checked out folder, then use → to bring up the repository browser. Find the sub-folder you would like to add to your working copy, then use → That menu will only be visible if the selected item does not exist yet in your working copy, but the parent item does exist.
En el diálogo Comprobar modificaciones, primero haga click en el botón . El diálogo mostrará como añadido remotamente todos los ficheros y carpetas que están en el repositorio pero que aún no se han obtenido. Haga click con el botón derecho sobre la carpeta o carpetas que desea añadir a su copia de trabajo, y luego utilice → .
This feature is very useful when you only want to checkout parts of a large tree, but you want the convenience of updating a single working copy. Suppose you have a large tree which has sub-folders Project01 to Project99, and you only want to checkout Project03, Project25 and Project76/SubProj. Use these steps:
Checkout the parent folder with depth “Only this item” You now have an empty top level folder.
Select the new folder and use → to display the repository content.
Right click on Project03 and → . Keep the default settings and click on . You now have that folder fully populated.
Repeat the same process for Project25.
Navigate to Project76/SubProj and do the same. This time note that the Project76 folder has no content except for SubProj, which itself is fully populated. Subversion has created the intermediate folders for you without populating them.
Once you have checked out a working copy to a particular depth you can increase that depth later to get more content. However you cannot reduce the depth again to remove content. That feature may be added in a later version of Subversion.
Pre-1.5 servers do not understand the working copy depth request, so they cannot always deal with requests efficiently. The command will still work, but an older server may send all the data, leaving the client to filter out what is not required, which may mean a lot of network traffic. If possible you should upgrade your server to 1.5.
Si el proyecto contiene referencias a proyectos externos que no desea que se obtengan al mismo tiempo, utilice la casilla Omitir externos.
If Omit externals is checked, or if you wish to increase the depth value, you will have to perform updates to your working copy using → instead of → . The standard update will include all externals and keep the existing depth.
It is recommended that you check out only the trunk part of the directory tree, or lower. If you specify the parent path of the directory tree in the URL then you might end up with a full hard disk since you will get a copy of the entire repository tree including every branch and tag of your project!
A veces puede querer crear una copia local sin ninguno de esos directorios .svn, por ejemplo para crear un fichero comprimido de sus fuentes. Lea “Exportando una copia de trabajo de Subversion” para averiguar cómo hacerlo.
Enviar los cambios que ha hecho al repositorio se conoce como confirmar los cambios. Pero antes de confirmar tiene que estar seguro de que su copia de trabajo está actualizada. Puede o bien ejecutar → directamente, o bien ejecutar → primero, para ver qué se ha cambiado localmente o en el servidor.
Si su copia de trabajo está actualizada y no hay conflictos, ya está preparado para confirmar sus cambios. Seleccione los ficheros y/o carpetas que desee confirmar y seleccione → .
El diálogo de confirmación le mostrará todos los ficheros cambiados, incluso los ficheros añadidos, borrados o no versionados. Si no desea que un fichero cambiado se confirme, símplemente desmarque ese fichero. Si desea incluir un fichero no versionado, márquelo para añadirlo a la confirmación.
Los ítems que han sido cambiados a una ruta de repositorio diferente también se indican utilizando un marcador (s). Puede haber cambiado algo mientras trabaja en una rama y habérsele olvidado volver a cambiarlo al tronco. ¡Este es su signo de advertencia!
Cuando confirma ficheros, el diálogo de confirmación sólo le enseña los ficheros que ha seleccionado. Cuando confirma una carpeta el diálogo de confirmación seleccionará los ficheros que han cambiado de forma automática. Si se olvidó un fichero nuevo que haya creado, al confirmar la carpeta lo encontrará. Confirmar una carpeta no significa que todos los ficheros se marquen como cambiados; sólo le hace la vida más fácil haciendo más trabajo por usted.
Si ha modificado ficheros que han sido incluidos desde un repositorio diferente utilizando svn:externals, esos cambios no pueden ser incluídos en la misma confirmación atómica. Aparecerá un símbolo de advertencia bajo la lista de ficheros que le indicará si esto ha ocurrido, y el texto de ayuda le explicará que esos ficheros externos deben confirmarse de forma separada.
If you think that the commit dialog shows you too many unversioned (e.g. compiler generated or editor backup) files, there are several ways to handle this. You can:
añadir el fichero (o una extensión con máscara) a la lista de ficheros a ignorar en la página de configuración. Esto afectará a todas las copias de trabajo que tenga.
añadir el fichero a la lista de svn:ignore utilizando → . Esto únicamente afectará al directorio en el que establezca la propiedad svn:ignore. Puede cambiar la propiedad svn:ignore de un directorio utilizando el Diálogo de Propiedades SVN.
Read “Ignorando ficheros y directorios” for more information.
Double clicking on any modified file in the commit dialog will launch the external diff tool to show your changes. The context menu will give you more options, as shown in the screenshot. You can also drag files from here into another application such as a text editor or an IDE.
You can select or deselect items by clicking on the checkbox to the left of the item. For directories you can use Shift-select to make the action recursive.
Las columnas que se muestran en el panel inferior son personalizables. Si hace click con el botón derecho en cualquier cabecera de columna verá un menú contextual que le permite seleccionar qué columnas se muestran. También puede cambiar el ancho de la columna utilizando el manejador de arrastre que aparece cuando mueve el cursor sobre el límite de una columna. Estas personalizaciones se mantienen, por lo que verá los mismos encabezados la siguiente vez.
By default when you commit changes, any locks that you hold on files are released automatically after the commit succeeds. If you want to keep those locks, make sure the Keep locks checkbox is checked. The default state of this checkbox is taken from the no_unlock option in the Subversion configuration file. Read “Configuración general” for information on how to edit the Subversion configuration file.
Puede arrastrar ficheros hasta el diálogo de confirmación desde cualquier otro lugar, siempre y cuando las copias de trabajo sean del mismo repositorio. Por ejemplo, puede tener una copia de trabajo enorme con diferentes ventanas del explorador abiertas en carpetas distantes de la jerarquía. Si quiere evitar confirmar desde la carpeta más alta (lo que implica una lenta operación de búsqueda de cambios) puede abrir el diálogo de confirmar para una carpeta y arrastrar desde las otras ventanas para incluir ficheros dentro de la misma confirmación atómica.
Puede arrastrar ficheros no versionados que residan dentro de una copia de trabajo al diálogo de confirmación, y automáticamente serán SVN añadidos.
A veces los ficheros se renombran fuera de Subversion, y se muestran en la lista de ficheros como un fichero faltante y un fichero no versionado. Para evitar perder la historia necesita notificar a Subversion su conexión. Simplemente seleccione tanto el nombre antiguo (faltante) como el nombre nuevo (sin versionar) y utilice → para emparejar los dos ficheros como un renombrado.
El diálogo de confirmación da soporte a las listas de cambios de Subversion para ayudar a agrupar ficheros relacionados. Averigue más sobre esta característica en “Listas de cambios”.
A veces tiene ficheros versionados que cambian con frecuencia pero que realmente no desea confirmar. En ocasiones esto indica un fallo en su sistema de compilación - ¿por qué están esos ficheros versionados? ¿debería utilizar ficheros de plantilla? Pero ocasionalmente es inevitable. Una razón clásica es que su IDE cambie una fecha en el fichero de proyecto cada vez que lo compile. El fichero de proyecto debe estar versionado ya que contiene todas las configuraciones de la compilación, pero no necesita confirmarse sólo porque la fecha haya cambiado.
Para ayudarle en casos tan extraños como estos, hemos reservado una lista de cambios llamada ignore-on-commit. Cualquier fichero añadido a esta lista de cambios se desmarcará automáticamente en el diálogo de confirmación. Aún puede confirmar los cambios, pero tendrá que selecionarlo manualmente en el diálogo de confirmación.
Asegúrese de introducir un mensaje de registro que describa los cambios que está confirmando. Esto le ayudará a saber qué ocurrió y cuando según navegue por los mensajes de registro del proyecto en el futuro. El mensaje puede ser tan extenso o escueto como desee; muchos proyectos tienen directrices sobre qué debe incluirse en ellos, el idioma que debe utilizarse, y a veces incluso un formato estricto.
Puede aplicar formatos sencillos en sus mensajes de registro utilizando una convención similar a la usada en los emails. Para aplicar un estilo a un texto, utilice *texto* para la negrita, _texto_ para el subrayado, y ^texto^ para la cursiva.
TortoiseSVN incluye un corrector ortográfico para ayudarle a escribir sus mensajes de registro correctamente. Este corrector señalará cualquier palabra mal escriba. Utilice el menú contextual para acceder a las correcciones sugeridas. Por supuesto, el corrector no conoce todos los términos técnicos que utiliza, así que a veces palabras bien escritas aparecerán como errores. Pero no se preocupe. Puede simplemente añadirlas a su diccionario personal utilizando el menú contextual.
The log message window also includes a filename and function auto-completion facility. This uses regular expressions to extract class and function names from the (text) files you are committing, as well as the filenames themselves. If a word you are typing matches anything in the list (after you have typed at least 3 characters, or pressed Ctrl+Space), a drop-down appears allowing you to select the full name. The regular expressions supplied with TortoiseSVN are held in the TortoiseSVN installation bin folder. You can also define your own regexes and store them in %APPDATA%\TortoiseSVN\autolist.txt. Of course your private autolist will not be overwritten when you update your installation of TortoiseSVN. If you are unfamiliar with regular expressions, take a look at the introduction at http://en.wikipedia.org/wiki/Regular_expression, and the online documentation and tutorial at http://www.regular-expressions.info/.
Puede reutilizar mensajes de registro que haya introducido anteriormente. Tan sólo debe pulsar en para ver una lista de los últimos mensajes que ha introducido para esta copia de trabajo. El número de mensajes almacenados se puede personalizar en el diálogo de configuración de TortoiseSVN.
Puede limpiar todos los mensajes de confirmación almacenados desde la página Datos Almacenados de la configuración de TortoiseSVN, o puede eliminar mensajes individuales dentro del diálogo Mensajes recientes utilizando la tecla Supr.
Hay diversas propiedades especiales de carpeta que pueden usarse para darle mayor control sobre el formato de los mensajes de registro de las confirmaciones y el idioma que utiliza el módulo del corrector ortográfico. Para más información, lea “Configuración del proyecto”.
If you have activated the bug tracking system, you can set one or more Issues in the Bug-ID / Issue-Nr: text box. Multiple issues should be comma separated. Alternatively, if you are using regex-based bug tracking support, just add your issue references as part of the log message. Learn more in “Integración con sistemas de control de errores / seguimiento de incidencias”.
Tras pulsar aparece un diálogo mostrando el progreso de la confirmación.
El diálogo de progreso utiliza una codificación de colores para resaltar las diferentes acciones de confirmación:
Confirmando una modificación.
Confirmando un ítem añadido.
Confirmando un borrado o un reemplazo.
Todos los demás ítems.
Este es el esquema de colores por defecto, pero puede personalizar dichos colores utilizando el diálogo de configuración. Para más información, lea “Configuración de colores de TortoiseSVN”.
Periodically, you should ensure that changes done by others get incorporated in your local working copy. The process of getting changes from the server to your local copy is known as updating. Updating may be done on single files, a set of selected files, or recursively on entire directory hierarchies. To update, select the files and/or directories you want, right click and select → in the explorer context menu. A window will pop up displaying the progress of the update as it runs. Changes done by others will be merged into your files, keeping any changes you may have done to the same files. The repository is not affected by an update.
El diálogo de progreso utiliza un código de colores para resaltar diferentes acciones de actualización:
Nuevo ítem añadido a su copia de trabajo
Ítem redundante borrado de su copia de trabajo, o ítem faltante reemplazado en su copia de trabajo.
Cambios del repositorio que se han fusionado satisfactoriamente con sus cambios locales.
Cambios del repositorio fusionados con sus cambios locales, pero que han dado lugar a conflictos que debe resolver.
Items sin cambios en su copia de trabajo actualizados con una versión más nueva desde el repositorio.
Este es el esquema de colores por defecto, pero puede personalizar dichos colores utilizando el diálogo de configuración. Para más información, lea “Configuración de colores de TortoiseSVN”.
If you get any conflicts during an update (this can happen if others changed the same lines in the same file as you did and those changes don't match) then the dialog shows those conflicts in red. You can double click on these lines to start the external merge tool to resolve the conflicts.
When the update is complete, the progress dialog shows a summary of the number of items updated, added, removed, conflicted, etc. below the file list. This summary information can be copied to the clipboard using Ctrl+C.
The standard Update command has no options and just updates your working copy to the HEAD revision of the repository, which is the most common use case. If you want more control over the update process, you should use → instead. This allows you to update your working copy to a specific revision, not only to the most recent one. Suppose your working copy is at revision 100, but you want it to reflect the state which it had in revision 50 - then simply update to revision 50. In the same dialog you can also choose the depth at which to update the current folder. The terms used are described in “Profundidad de obtención”. The default depth is Working copy, which preserves the existing depth setting. You can also choose whether to ignore any external projects in the update (i.e. projects referenced using svn:externals).
If you update a file or folder to a specific revision, you should not make changes to those files. You will get “out of date” error messages when you try to commit them! If you want to undo changes to a file and start afresh from an earlier revision, you can rollback to a previous revision from the revision log dialog. Take a look at “Roll back (Undo) revisions in the repository” for further instructions, and alternative methods.
puede ser útil a veces para ver cómo estaba su proyecto en un momento anterior en su historia. Pero en general, actualizar ficheros individuales a una revisión anterior no es una buena idea, ya que deja su copia de trabajo en un estado inconsistente. Si el fichero que está actualizando ha cambiado de nombre, incluso puede encontrar que ese fichero ha desaparecido de su copia de trabajo porque en esa revisión no había ningún fichero con ese nombre. Si simplemente desea una copia local de una versión antigua de un fichero, es mejor utilizar para ese fichero el comando → desde el diálogo de registro.
Si selecciona múltiples ficheros y carpetas en el explorador y luego selecciona , todos esos ficheros/carpetas se actualizan uno a uno. ¡TortoiseSVN se asegura de que todos los ficheros/carpetas del mismo repositorio se actualicen exactamente a la misma revisión! Incluso si entre esas actualizaciones ocurrió alguna confirmación.
A veces cuando intente actualizar, la actualización falla con un mensaje para decir que ya existe un fichero local con el mismo nombre. Esto típicamente ocurre cuando Subversion intenta obtener un fichero recién versionado, y se encuentra un fichero no versionado del mismo nombre en su copia de trabajo. Subversion nunca sobreescribirá un fichero no versionado - puede contener algo en lo que está trabajando, y que casualmente tiene el mismo nombre de fichero que otro desarrollador ha utilizado para su recién confirmado fichero.
Si obtiene este mensaje de error, la solución es simplemente renombrar el fichero local sin versionar. Tras completar la actualización, puede comprobar si el fichero renombrado sigue siendo necesario.
Si sigue obteniendo mensajes de error, utilize mejor el comando → para mostrar todos los ficheros con problemas. De esa forma puede lidiar con ellos de un golpe.
De vez en cuando, obtendrá un conflicto cuando actualiza sus ficheros desde el repositorio. Un conflicto ocurre cuando dos o más desarrolladores han hecho cambios en las mismas líneas de un fichero. Dado que Subversion no sabe nada de su proyecto, delega la resolución de los conflictos en los desarrolladores. Cuando se le informa de un conficto, debería abrir el fichero en cuestión, y buscar líneas que empiecen con el texto <<<<<<<. El área conflictiva se marca así:
<<<<<<< nombre-del-fichero
sus cambios
=======
código fusionado del repositorio
>>>>>>> revisión
Además, para cada fichero en conflicto Subversion deja tres ficheros adicionales en su directorio:
Este es su fichero tal y como estaba en su copia de trabajo antes de que actualizara su copia de trabajo - esto es, sin marcadores de conflicto. Este fichero tiene sus últimos cambios en él y nada más.
Este es el fichero que era la revisión BASE antes de que actualizara su copia de trabajo. Esto es, el fichero que obtuvo antes de empezar a hacer sus últimos cambios.
Este es el fichero que su cliente de Subversion acaba de recibir desde el servidor del que actualizó su copia de trabajo. Este fichero corresponde a la revisión HEAD del repositorio.
Puede o bien lanzar una herramienta externa de fusiones / editor de conflictos con el menú contextual → o bien utilizar otro editor manualmente para resolver el conflicto. Debe decidir cómo tiene que quedar el código, hacer los cambios necesarios, y grabar el fichero.
Después, ejecute el comando → y confirme sus modificaciones al repositorio. Tome nota de que el comando Resolver realmente no resuelve el conflicto. Simplemente elimina los ficheros filename.ext.mine y filename.ext.r*, dejándole confirmar sus cambios.
Si tiene conflictos con ficheros binarios, Subversion no intentará mezclar dichos ficheros por si mismo. El fichero local se mantendrá sin cambios (exactamente tal y como lo había cambiado usted) y obtendrá unos ficheros nombrefichero.ext.r*. Si desea descartar sus cambios y quedarse con la versión del repositorio, utilice el comando Revertir. Si desea mantener su versión y sobreescribir la versión del repositorio, utilice el comando Resuelto y luego confirme su versión.
Puede utilizar el comando Resuelto para múltiples ficheros si pulsa con el botón derecho en la carpeta padre y selecciona → Esto mostrará un diálogo con todos los ficheros en conflicto dentro de esa carpeta, y le permitirá seleccionar cuáles marcar como resueltos.
Mientras está trabajando en su copia de trabajo a menudo necesitará saber qué ficheros ha cambiado/añadido/borrado o renombrado, o incluso qué ficheros han sido cambiados y confirmados por los demás.
Ahora que ha obtenido una copia de trabajo desde un repositorio de Subversion, puede ver sus ficheros en el explorador de Windows con los iconos cambiados. Ésta es una de las razones por las que TortoiseSVN es tan popular. TortoiseSVN añade lo que se llama un icono sobreimpresionado al icono de cada fichero que se superpone al icono original del fichero. Dependiendo del estado en Subversion del fichero, el icono sobreimpresionado es diferente.
Una copia de trabajo recién obtenida tiene una marca verde como sobreimpresión. Esto significa que el estado de Subversion es normal.
En cuanto empiece a editar un fichero, el estado cambia a modificado y el icono sobreimpresionado cambia entonces a una marca de exclamación roja. De esta forma puede ver fácilmente qué ficheros se han cambiado desde la última vez que actualizó su copia de trabajo, y que necesitan ser confirmados.
Si durante una actualización ocurre un conflicto, el icono cambia a un signo de exclamación amarillo.
Si ha establecido la propiedad svn:needs-lock en un fichero, Subversion establece ese fichero como de sólo-lectura hasta que obtenga un bloqueo en él. Estos ficheros tienen esta sobreimpresión para indicarle que debe obtener un bloqueo antes de que pueda editarlo.
Si ha obtenido un bloqueo sobre un fichero, y el estado de Subversion es normal, este icono sobreimpresionado le recordará que debería liberar el bloqueo si no lo está utilizando para permitir a los demás que puedan confirmar sus cambios en el fichero.
Este icono le muestra que algunos ficheros o carpetas dentro de la carpeta actual se han marcado para ser eliminados del control de versiones, o bien que falta un fichero que está bajo el control de versiones dentro de una carpeta.
El signo más le indica que el fichero o carpeta está programado para ser añadido al control de versiones.
La barra le indica que el fichero o carpeta está ignorado para los asuntos de control de versiones. Esta sobreimpresión es opcional.
Este icono muestra los archivos y carpetas que no están bajo el control de versiones pero tampoco han sido ignorados. Esta sobreimpresión es opcional.
De hecho, puede que se encuentre con que no todos estos iconos se utilizan en su sistema. Esto se debe a que el número de sobreimpresiones permitidas por Windows está muy limitado y si está utilizando también una versión antigua de TrotoiseCVS, entonces no hay suficientes huecos de sobreimpresión disponibles. TortoiseSVN intenta ser un “Buen Ciudadano (TM)” y limita su uso de sobreimpresiones para darles una oportunidad al resto de aplicaciones.
Ahora que hay más clilentes Tortoise por ahí (TortoiseCVS, TortoiseHG, ...) el límite de iconos se ha convertido en un problema real. Para evitarlo, el proyecto TortoiseSVN ha introducido un conjunto compartido común de iconos, cargado como una DLL, que puede ser usado por todos los clientes Tortoise. Compruebe con el proveedor de su cliente para ver si esto ya se ha integrado :-)
Si desea una descripción de cómo se corresponden las sobreimpresiones con los estados de Subversion y otros detalles técnicos, lea “Iconos sobreimpresionados”.
Se puede ver la misma información que está disponible en los iconos sobreimpresionados (y mucha más) como columnas adicionales en la Vista Detalles del Explorador de Windows.
Simply right click on one of the headings of a column, choose from the context menu displayed. A dialog will appear where you can specify the columns and their order, which is displayed in the “Detailed View”. Scroll down until the entries starting with SVN come into view. Check the ones you would like to have displayed and close the dialog by pressing . The columns will be appended to the right of those currently displayed. You can reorder them by drag and drop, or resize them, so that they fit your needs.
Las columnas adicionales en el Explorador de Windows no están disponibles en Vista, dado que Microsoft decidió no habilitar tales columnas para todos los ficheros, sino únicamente para tipos de ficheros específicos.
Si desea que la organización actual se muestre en todas sus copias de trabajo, puede que desee convertirla en su vista por defecto.
A menudo es muy útil saber qué ficheros ha cambiado y también qué ficheros han cambiado y confirmado los demás. Ahí es donde viene bien el comando → . Este diálogo le muestra todos los ficheros que ha cambiado de alguna forma en su copia de trabajo, y además todos los ficheros no versionados que pueda tener.
Si pulsa en el botón también puede comprobar los cambios en el repositorio. De esa forma puede comprobar antes de hacer una actualización si es posible que haya un conflicto. También puede actualizar los ficheros seleccionados desde el repositorio sin actualizar la carpeta completa.
El diálogo utiliza un código de colores para resaltar el estado.
Ítems modificados localmente.
Ítems añadidos. Los ítems que han sido añadidos con historia tienen un signo + en la columna Estado del texto, y un texto de ayuda que le muestra de dónde ha sido copiado.
Ítems faltantes o borrados.
Ítems modificados localmente y en el repositorio. Los cambios se fusionarán al actualizar. Ésto puede producir conflictos al actualizar.
Items modificados localmente y borrados en el repositorio, o modificados en el repositorio y borrados localmente. Esto producirá conflictos al actualizar.
Ítems sin cambios y sin versionar.
Este es el esquema de colores por defecto, pero puede personalizar dichos colores utilizando el diálogo de configuración. Para más información, lea “Configuración de colores de TortoiseSVN”.
Los ítems que han sido cambiados a una ruta de repositorio diferente también se indican utilizando un marcador (s). Puede haber cambiado algo mientras trabaja en una rama y habérsele olvidado volver a cambiarlo al tronco. ¡Este es su signo de advertencia!
Desde el menú contextual del diálogo puede mostrar un resumen de los cambios. Compruebe los cambios locales que usted ha hecho utilizando → . Compruebe los cambios en el repositorio hechos por los demás utilizando → .
You can also revert changes in individual files. If you have deleted a file accidentally, it will show up as Missing and you can use Revert to recover it.
Los ficheros sin versionar y los ignorados se pueden enviar a la papelera de reciclaje desde aquí utilizando → . Si quiere eliminar los ficheros de forma definitiva (sin utilizar la papelera de reciclaje) pulse la tecla Mayúsculas mientras hace click en Eliminar.
Si desea examinar un fichero más en detalle, puede arrastrarlo desde aquí a otra aplicación, tal como un editor de textos o un IDE.
Las columnas son personalizables. Si hace click con el botón derecho en cualquier cabecera de columna verá un menú contextual que le permite seleccionar qué columnas se muestran. También puede cambiar el ancho de la columna utilizando el manejador de arrastre que aparece cuando mueve el cursor sobre el límite de una columna. Estas personalizaciones se mantienen, por lo que verá los mismos encabezados la próxima vez.
If you are working on several unrelated tasks at once, you can also group files together into changelists. Read “Listas de cambios” for more information.
En la parte inferior del diálogo puede ver un sumario del rango de revisiones del repositorio en uso en su copia de trabajo. Estas son revisiones confirmadas, no las revisiones actualizadas; representan el rango de revisiones donde estos ficheros fueron confirmados por última vez, no las revisiones a las que se han actualizado. Tenga en cuenta que el rango de revisiones mostrado se aplica sólo a los ítems mostrados, no a la copia de trabajo completa. Si quiere ver esa información para la copia de trabajo completa debe seleccionar la casilla Mostrar ficheros no modificados.
Si quiere una vista llana de su copia de trabajo, por ejemplo mostrando todos los ficheros y carpetas en todos los niveles de su jerarquía de carpetas, entonces el diálogo Comprobar modificaciones es la forma más sencilla de conseguirlo. Símplemente seleccione la casilla Mostrar archivos no modificados para ver todos los ficheros de su copia de trabajo.
A veces los ficheros se renombran fuera de Subversion, y se muestran en la lista de ficheros como un fichero faltante y un fichero no versionado. Para evitar perder la historia necesita notificar a Subversion su conexión. Simplemente seleccione tanto el nombre antiguo (faltante) como el nombre nuevo (sin versionar) y utilice → para emparejar los dos ficheros como un renombrado.
A menudo querrá mirar dentro de sus ficheros, para echar un vistazo a lo que ha cambiado. Puede llevar esto a cabo seleccionando un fichero que haya cambiado, y seleccionando desde el menú contextual de TortoiseSVN. Esto inicia el visor externo de diferencias, que comparará el fichero actual con la copia prístina (revisión BASE), que se guardó tras su obtención o tras la última actualización.
Puede mostrar diferencias incluso cuando no está dentro de una copia de trabajo, o cuando tiene múltiples versiones del fichero alrededor:
Seleecione los dos ficheros que desea comparar en el explorador (por ejemplo, utilizando la tecla Ctrl y el ratón) y seleccione del menú contextual de TortoiseSVN. El fichero que haya pulsado en último lugar (el que tiene el foco, es decir, el rectángulo con puntos) será tomado como más nuevo.
En un mundo ideal, sólo trabajará en una cosa cada vez, y su copia de trabajo sólo contendrá un conjunto de cambios lógicos. Vale, de vuelta al mundo real. A menudo ocurre que tiene que trabajar en varias tareas sin relación entre sí a la vez, y cuando mira en el diálogo de confirmar, todos los cambios están juntos y mezclados. La característica lista de cambios le ayuda a hacer agrupaciones de ficheros, facilitando ver qué se está haciendo. Por supuesto ésto sólo funciona si los cambios no se superponen. Si dos tareas diferentes afectan al mismo archivo, no hay forma de separar los cambios.
The changelist feature in TortoiseSVN is only available in Windows XP and later, as it depends on a shell capability which is not present in Windows 2000. Sorry, but Win2K is really quite old now, so please don't complain.
Puede ver las listas de cambios en varios lugares, pero los más importantes son el diálogo de confirmación y el de comprobar modificaciones. Empecemos en el diálogo comprobar modificaciones después de que haya estado trabajando en varias características y varios ficheros. La primera vez que abra el diálogo, todos los ficheros modificados se muestran juntos. Supongamos que ahora quiere organizar las cosas y agrupar esos ficheros según la característica.
Select one or more files and use → to add an item to a changelist. Initially there will be no changelists, so the first time you do this you will create a new changelist. Give it name which describes what you are using it for, and click . The dialog will now change to show groups of items.
Una vez que haya creado una lista de cambios puede arrastrar y soltar ítems en ella, tanto desde otra lista de cambios como desde el Explorador de Windows. Arrastrar desde el Explorador puede ser útil ya que le permite añadir ítems a una lista de cambios antes de que el fichero sea modificado. Puede hacer eso desde el diálogo comprobar modificaciones, pero sólo si muestra todos los ficheros no modificados.
In the commit dialog you can see those same files, grouped by changelist. Apart from giving an immediate visual indication of groupings, you can also use the group headings to select which files to commit.
On XP, there is a context menu when you right click on a group heading which gives you the choice to check or uncheck all group entries. On Vista however the context menu is not necessary. Click on the group header to select all entries, then check one of the selected entries to check all.
TortoiseSVN reserva un nombre de lista de cambios para su propio uso, llamada ignore-on-commit. Se utiliza para marcar los ficheros versionados que casi nunca querrá confirmar, incluso aunque tengan cambios locales. Esta característica se describe en “Excluyendo ítems de la lista de confirmación”.
Cuando confirme ficheros que pertenezcan a una lista de cambios, normalmente no es necesario que dichos ficheros sigan perteneciendo a la lista de cambios. Por este motivo, y por defecto, los ficheros se eliminan de las listas de cambios automáticamente al ser confirmados. Si desea mantener el fichero en su lista de cambios, utilice la casilla Mantener listas de cambios en la parte inferior del diálogo de confirmación.
Changelists are purely a local client feature. Creating and removing changelists will not affect the repository, nor anyone else's working copy. They are simply a convenient way for you to organise your files.
Para cada cambio que haga y confirme, debería proporcionar un mensaje de registro de ese cambio. Así podrá averiguar después qué cambios hizo y por qué, y tendrá un registro detallado para su proceso de desarrollo.
El diálogo de Registro de revisiones recopila todos esos mensajes de registro y se los enseña. La pantalla se divide en tres paneles.
El panel superior le muestra una lista de revisiones donde se confirmaron cambios a los ficheros/carpetas. Este sumario incluye la fecha y la hora, la persona que confirmó la revisión y el inicio del mensaje de registro.
Las líneas azules indican que algo se ha copiado a esta línea de desarrollo (quizás desde una rama).
El panel medio le muestra el mensaje de registro completo para la revisión seleccionada.
El panel inferior le muestra una lista de todos los ficheros y carpetas que se cambiaron como parte de la revisión seleccionada.
Pero hace mucho más que eso - le proporciona comandos del menú contextual que puede utilizar para obtener aún más información de la historia del proyecto.
Hay varios lugares desde los que puede mostrar el diálogo de Registro:
Desde el submenú contextual de TortoiseSVN
Desde la página de propiedades
Desde el diálogo de Progreso después de que termine una actualización. En ese caso el diálogo de Registro sólo le mostrará aquellas revisiones que cambiaron desde su última actualización
El panel superior tiene una columna Acciones que contiene iconos que resumen qué se ha hecho en esa revisión. Hay cuatro iconos diferentes, cada uno mostrado en su propia columna.
Si una revisión modificó un fichero o un directorio, se muestra el icono modificado en la primera columna.
If a revision added a file or directory, the added icon is shown in the second column.
If a revision deleted a file or directory, the deleted icon is shown in the third column.
Si una revisión reemplazó un fichero o un directorio, se muestra el icono reemplazado en la cuarta columna.
El panel superior del diálogo de Registro tiene un menú contextual que le permite acceder a mucha más información. Algunas de las entradas de este menú aparecen sólo cuando se muestra el registro de un fichero, y algunas sólo cuando se muestra el registro de una carpeta.
Comparar las revisiones seleccionadas con su copia de trabajo. La Herramienta de Diferencias por defecto es TortoiseMerge que se proporciona con TortoiseSVN. Si el diálogo de registro es de una carpeta, esto mostrará una lista de sus ficheros cambiados, y le permitirá revisar los cambios hechos a cada fichero individualmente.
Ver los cambios hechos en la revisión seleccionada como fichero de diff unificado (formato de parche GNU). Esto le muestra sólo las diferencias con unas pocas líneas de contexto. Es más dificil de leer que una comparación visual de ficheros, pero le mostrará todos los cambios juntos en un formato compacto.
Compara la revisión seleccionada con la revisión anterior. Esto funciona de forma similar a comparar con su copia de trabajo.
Blame the selected revision, and the file in your working BASE and compare the blame reports using a visual diff tool. Read “Autoría de las diferencias” for more detail. (files only).
Blame the selected revision, and the previous revision, and compare the results using a visual diff tool. (folders only).
Save the selected revision to a file so you have an older version of that file. (files only).
Open the selected file, either with the default viewer for that file type, or with a program you choose. (files only).
Muestra la autoría del fichero hasta la revisión seleccionada (sólo para ficheros).
Open the repository browser to examine the selected file or folder in the repository as it was at the selected revision.
Crear una rama/etiqueta desde una revisión seleccionada. Esto es útil por ejemlpo si se le olvidó crear una etiqueta y ya ha confirmado algunos cambios que no se supone que tengan que ir en esa versión.
Actualizar su copia de trabajo a la revisión seleccionada. Útil si quiere hacer que su copia de trabajo refleje un momento en el pasado. Es mejor actualizar un directorio completo en su copia de trabajo, no sólo un fichero, ya que si no su copia de trabajo será inconsistente y no podrá confirmar ningún cambio.
Revert changes from which were made in the selected revision. The changes are reverted in your working copy so this operation does not affect the repository at all! Note that this will undo the changes made in that revision only. It does not replace your working copy with the entire file at the earlier revision. This is very useful for undoing an earlier change when other unrelated changes have been made since. If you have made local changes, this command will merge these changes into your working copy.
Revert to an earlier revision. If you have made several changes, and then decide that you really want to go back to how things were in revision N, this is the command you need. Again, the changes are reverted in your working copy so this operation does not affect the repository until you commit the changes. Note that this will undo all changes made after the selected revision, replacing the file/folder with the earlier version. If you have made local changes, this command will merge these changes into your working copy.
Fusiona en una copia de trabajo diferente la(s) revision(es) seleccionada(s). Un diálogo de selección de carpeta le permitirá elegir la copia de trabajo donde desea fusionar, pero después de eso no hay diálogo de confirmación, ni oportunidad de probar la fusión sin ejecutarla realmente. Es una buena idea fusionar en una copia de trabajo sin cambios, ¡y así poder revertir los cambios si no funcionan! Esta es una funcionalidad útil si desea fusionar las revisiones seleccionadas de una rama a otra.
Hace una obtención nueva de la carpeta seleccionada en la revisión seleccionada. Esto muestra un diálogo para que confirme la URL y la revisión, y seleccione un lugar para la obtención.
Exporta la carpeta o el fichero seleccionado en la revisión seleccionada. Esto muestra un diálogo para que confirme la URL y la revisión, y para que seleccione un lugar para la exportación.
Editar el mensaje de registro o el autor adjunto a una confirmación anterior. Lea “Cambiando el mensaje de registro y el autor” para averiguar cómo funciona esto.
Copia los detalles de registro de las revisiones seleccionadas al portapapeles. Esto copia el número de revisión, el autor, la fecha, el mensaje de registro y la lista de ítems cambiados para cada revisión.
Buscar en los mensajes de registro el texto que desee. Esto busca en los mensajes de registro que ha introducido, y también en los sumarios de acción creados por Subversion (mostrados en el panel inferior). La búsqueda no distingue mayúsculas y minúsculas.
Si selecciona dos revisiones a la vez (utilizando el modificador habitual Ctrl), el menú contextual cambia y le ofrece menos opciones:
Compara las dos revisiones seleccionadas utilizando una herramienta de diferencias visual. La herramienta de diferencias por defecto es TortoiseMerge que se proporciona con TortoiseSVN.
Si selecciona esta opción para una carpeta, aparecerá un diálogo posterior mostrando los ficheros cambiados y ofreciéndole más opciones de diferenciación. Lea más sobre el diálogo Comparar Revisiones en “Comparando carpetas”.
Blame the two revisions and compare the blame reports using a visual difference tool. Read “Autoría de las diferencias” for more detail.
Ver las diferencias entre las dos revisiones seleccionadas como un fichero diff unificado. Esto funciona para ficheros y carpetas.
Copy log messages to clipboard as described above.
Buscar mensajes de registro como se describe más arriba.
If you select two or more revisions (using the usual Ctrl or Shift modifiers), the context menu will include an entry to Revert all changes which were made in the selected revisions. This is the easiest way to rollback a group of revisions in one go.
También puede elegir fusionar en otra copia de trabajo las revisiones seleccionadas, como se describió más arriba.
El panel inferior del diálogo Registro también tiene un menú contextual que le permite
Show changes made in the selected revision for the selected file. This context menu is only available for files shown as modified.
Blame the selected revision and the previous revision for the selected file, and compare the blame reports using a visual diff tool. Read “Autoría de las diferencias” for more detail.
Abrir el fichero seleccionado, bien con el visor por defecto para ese tipo de fichero, o bien con el programa que elija.
Revertir los cambios hechos al fichero seleccionado en esa revisión.
Ver las propiedades de Subversion del ítem seleccionado.
Mostrar el registro de revisiones para ese fichero seleccionado.
Grabar la revisión seleccionada a un fichero, para que pueda tener una versión antigua de ese fichero.
Puede haberse dado cuenta de que a veces nos referimos a cambios y otras veces a diferencias. ¿Cuál es la diferencia?
Subversion uses revision numbers to mean 2 different things. A revision generally represents the state of the repository at a point in time, but it can also be used to represent the changeset which created that revision, eg. “Done in r1234” means that the changes committed in r1234 implement feature X. To make it clearer which sense is being used, we use two different terms.
Si selecciona dos revisiones N y M, el menú contextual le ofrecerá mostrar las diferencias entre estas dos revisiones. En términos de Subversion esto es diff -r M:N.
Si selecciona una única revisión N, el menú contextual le ofrecerá mostrar los cambios realizados en esa revisión. En términos de Subversion esto es diff -r N-1:N o diff -c N.
The bottom pane shows the files changed in all selected revisions, so the context menu always offers to show changes.
El diálogo Registro no siempre le muestra todos los cambios que se hayan hecho alguna vez por unos cuantos motivos:
For a large repository there may be hundreds or even thousands of changes and fetching them all could take a long time. Normally you are only interested in the more recent changes. By default, the number of log messages fetched is limited to 100, but you can change this value in → (“Configuración de diálogos de TortoiseSVN 1”),
Cuando se marca la casilla Parar en copia/renombrado, Mostrar Registro se parará en el punto en el que el fichero o carpeta seleccionado se copió de algún otro lugar en el repositorio. Esto puede ser útil para buscar ramas (o etiquetas) porque se para en la raíz de esa rama, y le da una indicación rápida de los cambios hechos únicamente en esa rama.
Normalmente querrá dejar esta opción sin marcar. TortoiseSVN recuerda el estado de la casilla, por lo que respetará su preferencia.
Cuando se invoca el diálogo Mostrar Registro desde el diálogo Fusionar, la casilla siempre se marca por defecto. Esto es porque al fusionar lo más probable es buscar cambios en las ramas, y retroceder a la raíz de la rama no tiene sentido en ese caso.
Tenga en cuenta que Subversion actualmente implementa el renombrado como un par de copia/borrado, por lo que renombrar un fichero o carpeta también provocará que el diálogo de registro se pare si se marca esta opción.
Si desea ver más mensajes de registro, pulse para obtener los siguientes 100 mensajes de registro. Puede repetir ésto tantas veces como sea necesario.
Al lado de este botón hay un botón multifunción que recuerda la última opción que utilizó. Pulse en la flecha para ver las otras opciones ofrecidas.
Utilice si desea ver un rango específico de revisiones. Aparecerá un diálogo que le preguntará por la revisión de inicio y de fin.
Utilice si desea ver todos los mensajes de registro desde HEAD hasta la revisión 1.
Subversion 1.5 y posteriores almacenan un registro de las fusiones utilizando propiedades. Esto nos permite obtener una historia más detallada de los cambios fusionados. Por ejemplo, si desarrolla una nueva característica en una rama y luego la fusiona en el tronco, la característica desarrollada aparecerá en el historial de registro del tronco como una única confirmación para la fusión, incluso aunque haya habido 1000 confirmaciones durante el desarrollo de la rama.
Si desea ver el detalle de qué revisiones se fusionaron como parte de esa confirmación, utilice la casilla Incluir revisiones fusionadas. Esto obtendrá los mensajes de registro de nuevo, pero también intercalará los mensajes de registro desde las revisiones que se fusionaron. Las revisiones fusionadas se muestran en gris porque representan cambios hechos en una parte diferente del árbol.
¡Por supuesto que fusionar nunca es sencillo! Durante el desarrollo de la rama habrá probablemente fusiones ocasionales desde el tronco para mantener la rama en sincronía con la línea principal del código. Por eso la historia de fusiones de la rama también incluirá otra capa de historia de fusiones. Estas capas se muestran en el diálogo de registro utilizando niveles de indentación.
A veces querrá cambiar un mensaje de registro que introdujo en su día, quizás porque hay un error ortográfico en él o porque quiere mejorar el mensaje o cambiarlo por otras razones. O quizás quiera cambiar el autor de una confirmación porque se le olvidó preparar la autentificación, o ...
Subversion lets you change both the log message and the author of revisions any time you want. But since such changes can't be undone (those changes are not versioned) this feature is disabled by default. To make this work, you must set up a pre-revprop-change hook. Please refer to the chapter on Hook Scripts in the Subversion Book for details about how to do that. Read “Scripts gancho” to find some further notes on implementing hooks on a Windows machine.
Una vez que haya preparado su servidor con los ganchos necesarios, puede cambiar tanto el autor como el mensaje de registro de cualquier revisión, utilizando el menú contextual del panel superior del diálogo Registro.
Dado que las propiedades de revisión de Subversion no se versionan, al hacer modificaciones a estas propiedades (por ejemplo, la propiedad del mensaje svn:log) se sobreescribirá el valor anterior de esa propiedad para siempre.
Si desea restringir los mensajes de registro para mostrar sólo en los que está interesado en vez de tener que navegar en una lista de cientos, puede utilizar los controles de filtro en la parte superior del Diálogo de Registro. Los controles de fecha de inicio y de fin le permite restringir la salida a un rango de fechas conocido. La caja de texto de búsqueda le permite mostrar sólo los mensajes que contengan una frase en particular.
Pulse en el icono de búsqueda para seleccionar sobre qué información desea buscar, y para seleccionar el modo regex. Normalmente sólo necesitará una búsqueda de texto simple, pero si necesita utilizar términos de búsqueda más flexibles puede utilizar expresiones regulares. Si mueve el ratón encima de la caja, aparecerá un texto de ayuda que le proporcionará pistas sobre cómo utilizar las funciones regex. También puede encontrar documentación en línea y un tutorial en http://www.regular-expressions.info/.
Tenga en cuenta que estos filtros actúan sobre los mensajes ya obtenidos. Ellos no controlan la descarga de mensajes desde el repositorio.
You can also filter the path names in the bottom pane using the Hide unrelated changed paths checkbox. Related paths are those which contain the path used to display the log. If you fetch the log for a folder, that means anything in that folder or below it. For a file it means just that one file. The checkbox is tristate: you can show all paths, grey out the unrelated ones, or hide the unrelated paths completely.
A veces sus prácticas de trabajo requerirán que los mensajes de registro sigan un formato particular, lo que significa que el texto que describe los cambios no es visible desde el sumario abreviado mostrado en el panel superior. La propiedad tsvn:logsummary puede utilizarse para extraer una porción del mensaje de registro que se mostrará en el panel superior. Lea “Propiedades de projecto TortoiseSVN” para saber cómo se utiliza esta propiedad.
El botón lanza un cuadro de diálogo que muestra algunas informaciones interesantes sobre las revisiones que se muestran en el diálogo Registro. Le muestra cuántos autores han estado trabajando, cuántas confirmaciones han hecho, el progreso por semanas, y mucho más. Ahora puede ver de un vistazo quién ha trabajado duro y quién se ha tocado la barriga ;-)
Esta página le proporciona todas las cifras que pueda necesitar, en particular el período y el número de revisiones cubiertas, y algunos valores mínimos/máximos/medios.
Este gráfico le muestra qué autores han estado activos en el proyecto como un simple histograma, un histograma apilado o un gráfico de tarta.
Where there are a few major authors and many minor contributors, the number of tiny segments can make the graph more difficult to read. The slider at the bottom allows you to set a threshold (as a percentage of total commits) below which any activity is grouped into an Others category.
Esta página proporciona una representación gráfica de la actividad del proyecto en términos del número de confirmaciones y autor. Esto da una idea de cuándo se ha trabajado en un proyecto, y quién estaba trabajando en cada momento.
Cuando hay varios autores, puede obtener muchas líneas en el gráfico. Hay dos vistas disponibles aquí: normal, en la que la actividad de cada autor se refiere a la línea base, y apilado, donde la actividad de cada autor se refiere a la línea subyacente. La última opción evita que se crucen las líneas, lo que puede permitir un gráfico más sencillo de leer, pero es menos fácil ver la salida de cada autor.
By default the analysis is case-sensitive, so users PeterEgan and PeteRegan are treated as different authors. However, in many cases user names are not case-sensitive, and are sometimes entered inconsistently, so you may want DavidMorgan and davidmorgan to be treated as the same person. Use the Authors case insensitive checkbox to control how this is handled.
Tenga en cuenta que las estadísticas cubren el mismo período que el diálogo Registro. Si sólo se está mostrando una revisión, las estadísticas no le dirán mucho.
Si no se puede alcanzar el servidor, y tiene habilitado el caché de registro, puede utilizar el diálogo de registro y el gráfico de revisiones en modo sin conexión. Esto utiliza la información de la caché, lo que le permite continuar trabajando aunqu ela información puede no estar actualizada o incluso completa.
Si desea comprobar el servidor de nuevo para obtener los mensajes de registro más recientes, puede simplemente refrescar la vista utilizando F5. Si está utilizando la caché de registro (habilitada por defecto), esto buscará en el repositorio los mensajes más recientes y traerá sólo los nuevos. Si la caché de registro estaba en modo desconectado, esto intentará volver a ponerla en línea.
Si está utilizando la caché de registros y cree que el contenido del mensaje o el autor han podido cambiar, puede utilizar Mays-F5 o Ctrl-F5 para re-obtener los mensajes mostrados desde el servidor y actualizar la caché de registro. Tenga en cuenta que esto sólo afecta a los mensajes que se están mostrando actualmente y que por tanto no invalida la caché completa de ese repositorio.
One of the commonest requirements in project development is to see what has changed. You might want to look at the differences between two revisions of the same file, or the differences between two separate files. TortoiseSVN provides a built-in tool named TortoiseMerge for viewing differences of text files. For viewing differences of image files, TortoiseSVN also has a tool named TortoiseIDiff. Of course, you can use your own favourite diff program if you like.
Si desea ver qué cambios ha hecho usted en su copia de trabajo, simplemente utilice el menú contextual del explorador y seleccione → .
Si desea ver qué ha cambiado en el tronco (si está trabajando en una rama) o en una rama específica (si está trabajando en el tronco), puede utilizar el menú contextual del explorador. Simplemente sostegna la tecla Mayúsculas mientras hace click con el botón derecho en el fichero. Luego, seleccione → . En el siguiente diálogo, especifique la URL del repositorio con la que quiere comparar su fichero local.
También puede utilizar el navegador de repositorios y seleccionar dos árboles para diferenciar, quizás dos ramas, o una rama/etiqueta y el tronco. Ahí, el menú contextual le permite compararlos utilizando . Lea más en “Comparando carpetas”.
Si desea ver las diferencias entre una revisión en concreto y su copia de trabajo, utilice el diálogo Registro de Revisiones, seleccione la revision de intereés, y luego seleccione desde el menú contextual.
Si desea ver la diferencia entre la última revision confirmada y su copia de trabajo, asumiendo que la copia de trabajo no se haya modificado, simplemente haga click con el botón derecho sobre el fichero. Luego, seleccione → . Esto realizará una diferenciación entre la revisión anterior a la fecha-de-la-última-confirmación (tal y como se registró en su copia de trabajo) y la BASE de la copia de trabajo. Esto le muestra el último cambio hecho al fichero que lo llevó al estado que ahora está viendo en su copia de trabajo. No mostrará cambios más nuevos que su copia de trabajo.
Si desea ver las diferencias entre dos revisiones que ya se confirmaron, utilice el diálogo Registro de Revisiones y seleccione las dos revisiones que desea comparar (utilizando el modificador habitual Ctrl). Luego seleccione desde el menú contextual.
Si hizo esto desde el historial de revisiones de una carpeta, aparece un diálogo Comparar Revisiones, mostrando una lista de ficheros cambiados en esa carpeta. Lea más en “Comparando carpetas”.
Si desea ver los cambios hechos a todos los ficheros en una revisión en particular de una vez, puede utilizar la salida diff unificado (formato de parche GNU). Esto le muestra sólo las diferencias con unas pocas líneas de contexto. Es más dificil de leer que una comparación visual de ficheros, pero le mostrará todos los cambios juntos. Desde el diálogo Registro de Revisiones, seleccione la revisión de interes, y luego seleccione desde el menú contextual.
Si desea ver las diferencias entre dos ficheros diferentes, puede hacerlo directamente en el explorador seleccionando ambos ficheros (utilizando el modificador habitual Ctrl). Luego desde el menú contextual del explorador seleccione → .
If you want to see the differences between a file in your working copy, and a file in any Subversion repository, you can do that directly in explorer by selecting the file then holding down the Shift key whilst right clicking to obtain the context menu. Select → . You can do the same thing for a working copy folder. TortoiseMerge shows these differences in the same way as it shows a patch file - a list of changed files which you can view one at a time.
Si desea ver no sólo las diferencias sino también el autor, revisión y la fecha en la que se hicieron los cambios, puede combinar los informes de diferencias y de autoría desde dentro del diálogo del historial de revisiones. Lea “Autoría de las diferencias” para más detalles.
The built-in tools supplied with TortoiseSVN do not support viewing differences between directory hierarchies. But if you have an external tool which does support that feature, you can use that instead. In “Herramientas externas de diferencias/fusión” we tell you about some tools which we have used.
If you have configured a third party diff tool, you can use Shift when selecting the Diff command to use the alternate tool. Read “Configuración de programas externos” to find out about configuring other diff tools.
A veces en la vida de un proyecto puede querer cambiar los fines de línea de CRLF a LF, o puede querer cambiar la indentación de una sección. Desafortunadamente esto marcará un gran número de líneas como modificadas, incluso aunque no haya cambios en el significado del código. Estas opciones le ayudarán a administrar estos cambios cuando se comparan y aplican diferencias. Verá estas opciones en los diálogos Fusionar y Autoría, además de en la configuración de TortoiseMerge.
Ignorar finales de línea excluye los cambios que sólo se deban a diferencias en el estilo de fin de línea.
Comparar espacios en blanco incluye todos los cambios en la indentación y en los espacios en blanco interiores como líneas añadidas/eliminadas.
Ignorar cambios en espacios en blanco excluye los cambios que sólo se deben a un cambio en la cantidad o tipo de espacios en blanco, como por ejemplo cambios en la indentación o cambio de tabuladores a espacios. Añadir espacios en blanco donde antes no había, o eliminar completamente espacios en blanco aún se mostrará como un cambio.
Ignorar todos los espacios en blanco excluye todos los cambios que sólo se deban a espacios en blanco.
Naturalmente, cualquier línea cuyo contenido haya cambiado se incluye siempre en la diferenciación.
Cuando seleccione dos árboles dentro del navegador de repositorios, o cuando seleccione dos revisiones de una carpeta en el diálogo de registro, puede → .
Este diálogo muestra una lista de todos los ficheros que han cambiado y le permite comparar o ver la autoría de cada uno individualmente utilizando el menú contextual.
También puede exportar la lista de ficheros cambiados a un fichero de texto, o puede exportar los propios ficheros cambiados a una carpeta. Esta operación funciona únicamente sobre los ficheros seleccionados, por lo que deberá seleccionar los ficheros de interés - normalmente eso quiere decir seleccionarlos a todos.
If you want to export the list of files and the actions (modified, added, deleted) as well, you can do that using the keyboard shortcuts Ctrl-A to select all entries and Ctrl-C to copy the detailed list to the clipboard.
El botón en la parte superior le permite cambiar la dirección de la comparación. Puede mostrar los cambios necesarios para ir de A a B, o si lo prefiere, de B a A.
Los botones con los números de revisión pueden utilizarse para cambiar a un rango de revisiones diferente. Cuando cambia el rango, la lista de ítems que difieren entre las dos revisiones se actualizará automáticamente.
Si la lista de nombres de ficheros es muy larga, puede utilizar la caja de búsqueda para reducir la lista a los nombres de ficheros que contengan un texto específico. Tenga en cuenta que se utiliza una búsqueda de texto simple, así que si desea restringir la lista a ficheros de código fuente C debería introducir .c en vez de *.c.
Hay muchas herramientas disponibles para diferenciar ficheros de texto, incluyendo nuestro propio TortoiseMerge, pero a veces nos encontramos en la situación de querer ver también cómo ha cambiado un fichero de imagen. Por eso es por lo que hemos creado TortoiseIDiff.
→ for any of the common image file formats will start TortoiseIDiff to show image differences. By default the images are displayed side-by-side but you can use the View menu or toolbar to switch to a top-bottom view instead, or if you prefer, you can overlay the images and pretend you are using a lightbox.
Naturally you can also zoom in and out and pan around the image. You can also pan the image simply by left-dragging it. If you select the Link images together option, then the pan controls (scrollbars, mousewheel) on both images are linked.
An image info box shows details about the image file, such as the size in pixels, resolution and colour depth. If this box gets in the way, use → to hide it. You can get the same information in a tooltip if you hover the mouse over the image title bar.
When the images are overlaid, the relative intensity of the images (alpha blend) is controlled by a slider control at the left side. You can click anywhere in the slider to set the blend directly, or you can drag the slider to change the blend interactively. Ctrl+Shift-Wheel to change the blend.
The button above the slider toggles between two preset blends, indicated by the markers on either side of the blend slider. By default one is at the top and the other at the bottom, so the toggle button just switches between one image and the other. You can move the markers to choose the two blend values that the toggle button will use.
A veces quiere ver una diferencia en vez de un fundido. Puede que tenga las imágenes de dos revisiones de una placa de circuito impreso y desea ver qué pistas han cambiado. Si deshabilita el modo alpha blend, la diferencia se mostrará como un XOR de los valores de color del pixel. Las áreas sin cambios se mostrarán en blanco y los cambios se colorearán.
Si las herramientas que le proporcionamos no son lo que necesita, pruebe alguno de los muchos programas de código abierto o comerciales disponibles. Cada uno tiene sus propios favoritos, y esta lista por supuesto no está completa, pero aquí hay algunas que debería considerar:
WinMerge es un muy buen visor de diferencias y herramienta de fusión de código abierto, que también puede manejar directorios.
Perforce es un RCS comercial, pero puede descargar la herramienta de diferencias/fusiones gratuitamente. Obtenga más información en Perforce.
KDiff3 es una herramienta de diferencias gratuita que también maneja directorios. Puede descargarla desde aquí.
ExamDiff Standard es gratuito. Puede manejar ficheros pero no directorios. ExamDiff Pro es shareware y añade un número de ventajas que incluyen diferenciación de directorios y capacidades de edición. En ambos casos, la versión 3.2 y las siguientes pueden manejar también unicode. Puede descargarlas desde PrestoSoft.
Similar a ExamDiff Pro, esta es una herramienta shareware de diferencias que puede manejar diferenciación de directorios y unicode. Descárgela desde Scooter Software.
Araxis Merge is a useful commercial tool for diff and merging both files and folders. It does three-way comparison in merges and has synchronization links to use if you've changed the order of functions. Download it from Araxis.
Este editor de texto incluye sintaxis coloreada para ficheros diff unificados, haciéndolos mucho más fáciles de leer. Descárgelo desde Scintilla.
Notepad2 está diseñado como un reemplazo del programa Bloc de Notas estándar de Windows, y se basa en el control de edición de código abierto Scintilla. Además de ser bueno para ver diffs unificados, es mucho mejor que el bloc de notas de Windows para la mayoría de trabajo. Descárgelo gratuitamente aquí.
Lea “Configuración de programas externos” para más información sobre cómo preparar TortoiseSVN para utilizar estas herramientas.
Si ha creado nuevos ficheros y/o directorios durante su proceso de desarrollo, necesitará añadirlos también al control de código. Seleccione los ficheros y/o directorios y utilice → .
Después de que añada los ficheros o directorios al control de código, el fichero aparece con una sobreimpresión de icono añadido que significa que primero debe confirmar su copia de trabajo para que esos ficheros y directorios estén disponibles para otros desarrolladores. ¡Añadir un fichero/directorio no afecta al repositorio!
You can also use the Add command on already versioned folders. In that case, the add dialog will show you all unversioned files inside that versioned folder. This helps if you have many new files and need to add them all at once.
Para añadir ficheros desde fuera de su copia de trabajo puede usar el manejador de arrastrar-y-soltar:
seleccione los ficheros que desea añadir
arrástrelos con el botón derecho a su nuevo destino dentro de la copia de trabajo
suelte el botón derecho del ratón
seleccione → . En ese momento los ficheros se copiarán a la copia de trabajo y se añadirán al control de versiones.
También puede añadir ficheros dentro de una copia de trabajo simplemente arrastrándolos con el botón izquierdo y soltándolos en el diálogo de confirmación.
If you add a file or folder by mistake, you can undo the addition before you commit using → .
A menudo ocurre que ya tiene los ficheros que necesita en otro proyecto en su repositorio, y que simplemente quiere copiarlos. Podría simplemente copiar los ficheros y añadirlos como se describe más arriba, pero eso no le dará ninguna historia. Y si posteriormente arregla un error en los ficheros originales, sólo podrá fusionar el arreglo automáticamente si la nueva copia está relacionada con la original en Subversion.
La manera más fácil de copiar ficheros y carpetas desde dentro de una copia de trabajo es utilizar el menú contextual que aparece al arrastrar con el botón derecho. Cuando arrastra con el botón derecho un fichero o una carpeta de una copia de trabajo a otra, o incluso dentro de la misma carpeta, aparece un menú contextual cuando suelta el botón del ratón.
Ahora puede copiar contenido existente versionado a un nuevo lugar, posiblemente renombrándolo al mismo tiempo.
You can copy files and folders from your working copy to another location in the repository using → . Refer to “Crando una rama o etiqueta” to find out more.
You can locate an older version of a file or folder in the log dialog and copy it to a new location in the repository directly from the log dialog using → . Refer to “Obteniendo información adicional” to find out more.
You can also use the repository browser to locate content you want, and copy it into your working copy directly from the repository, or copy between two locations within the repository. Refer to “El navegador de repositorios” to find out more.
Whilst you can copy and files and folders within a repository, you cannot copy or move from one repository to another while preserving history using TortoiseSVN. Not even if the repositories live on the same server. All you can do is copy the content in its current state and add it as new content to the second repository.
If you are uncertain whether two URLs on the same server refer to the same or different repositories, use the repo browser to open one URL and find out where the repository root is. If you can see both locations in one repo browser window then they are in the same repository.
In most projects you will have files and folders that should not be subject to version control. These might include files created by the compiler, *.obj, *.lst, maybe an output folder used to store the executable. Whenever you commit changes, TortoiseSVN shows your unversioned files, which fills up the file list in the commit dialog. Of course you can turn off this display, but then you might forget to add a new source file.
La mejor forma de evitar estos problemas es añadir los ficheros derivados a la lista de ignorados del proyecto. De esta forma nunca se mostrarán en el diálogo de confirmar, pero se seguirán señalando los genuinos ficheros de código no versionados.
Si hace click con el botón derecho en un único fichero no versionado, y selecciona el comando → del menú contextual, aparecerá un submenú que le permitirá seleccionar sólo ese fichero, o todos los ficheros con la misma extensión. Si selecciona múltiples ficheros, no hay submenú y sólo puede añadir esos ficheros o carpetas específicos.
If you want to remove one or more items from the ignore list, right click on those items and select → You can also access a folder's svn:ignore property directly. That allows you to specify more general patterns using filename globbing, described in the section below. Read “Configuración del proyecto” for more information on setting properties directly. Please be aware that each ignore pattern has to be placed on a separate line. Separating them by spaces does not work.
Otra forma de ignorar ficheros es añadirlos a la lista global de ignorados. La mayor diferencia aquí es que la lista global de ignorados es una propiedad del cliente. Se aplica a todos los proyectos de Subversion, pero sólo en el PC cliente. En general es mejor utilizar la propiedad svn:ignore donde sea posible, porque puede aplicarse a áreas del proyecto específicas, y funciona para todos los que obtengan el proyecto. Para más información, lea la “Configuración general”.
Los ficheros y las carpetas verisonadas nunca pueden ser ignoradas - esta es una característica de Subversion. Si ha versionado un fichero por error, lea “Ignorar ficheros que ya están versionados” para ver las instrucciones sobre cómo “desversionarlo”.
El patrón de ignorados de Subversion hace uso de la expansión de comodines en los nombres de los ficheros, una técnica que originariamente se utilizaba en Unix para especificar ficheros utilizando meta-caracteres como son los comodines. Los siguientes caracteres tienen un significado especial:
Concuerda con cualquier cadena de caracteres, incluyendo la cadena vacía (sin caracteres).
Concuerda con un único cáracter cualquiera.
Concuerda con cualquiera de los caracteres incluídos entre los corchetes. Dentro de los corchetes, un par de caracteres separados por “-” concuerda con cualquier caracter existente entre los dos en el orden lexicográfico. Por ejemplo, [AGm-p] concuerda con cualquiera de estos: A, G, m, n, o o p.
Subversion utiliza la / como el delimitador de ruta en todos los nombres de ruta internos, y todas las concordancias de patrones se hacen contra este estilo de nombres de rutas. Si desea utilizar un delimitador de ruta en su patrón de ignorado, asegúrese de utilizar /, y no la barra invertida de Windows.
La concordancia de patrones distingue entre mayúsculas y minúsculas, lo que puede causar problemas en Windows. Puede forzar que no se distingan a lo bruto, emparejando los caracteres; es decir, por ejemplo, para ignorar *.tmp sin tener en cuenta las mayúsculas y minúsculas, puede utilizar un patrón como *.[Tt][Mm][Pp].
Subversion utiliza esta concordancia de patrones contra cada ruta que se le presenta para la acción. Estas rutas son generalmente relativas al directorio contra el que se realiza la importación, añadido, confirmación, etc. El patrón de concordancia por lo tanto tiene que tener el cuenta el hecho de que puede o no haber partes de ruta antes del nombre del fichero.
If directory names are present in a path, the matching algorithm will not trim them off, so pattern Fred.* will match Fred.c but not subdir/Fred.c. This is significant if you add a folder which contains some files that you want to be ignored, because those filenames will be preceded with the folder name when Subversion compares them with the ignore pattern.
El carácter / no se trata de ninguna forma especial para los propósitos de concordancia de patrones, por lo que el patrón abc*xyz concordaría con abcdxyz pero también con abcdir/subdir/anything/morexyz.
To ignore all CVS folders you should either specify a pattern of *CVS or better, the pair CVS */CVS. The first option works, but would also exclude something called ThisIsNotCVS. Using */CVS alone will not work on an immediate child CVS folder, and CVS alone will not work on sub-folders.
Si desea una definición oficial de la expansión de comodines en los nombres de ficheros, puede encontrarla en las especificaciones de la IEEE para el lenguaje de comandos del shell Notación de Patrones de Concordancia.
Al contrario que CVS, Subversion le permite renombrar y mover ficheros y carpetas. Por tanto hay entradas de menú para borrar y renombrar en el submenú TortoiseSVN.
Use → to remove files or folders from subversion.
When you → a file, it is removed from your working copy immediately as well as being marked for deletion in the repository on next commit. The file's parent folder shows a “deleted” icon overlay. Up until you commit the change, you can get the file back using → on the parent folder.
Cuando se utiliza → sobre una carpeta, ésta continúa en su copia de trabajo, pero la sobreimpresión cambia para indicarle que está marcada para ser eliminada. Hasta que confirme el cambio, puede recuperar la carpeta utilizando → sobre la propia carpeta. Esta diferencia en el comportamiento entre ficheros y carpetas es parte de Subversion, no de TortoiseSVN.
Si desea eliminar un ítem del repositorio, pero mantenerlo localmente como un fichero o carpeta no versionados, utilice → . Debe mantener pulsada la tecla Mayús mientras hace click con el botón derecho sobre el ítem en el panel de lista de exploración (panel derecho) para ver esto en el menú contextual extendido.
Si se borra un fichero utilizando el Explorador en vez de usar el menú contextual de TortoiseSVN, el diálogo de confirmación le muestra esos ficheros y le deja eliminarlos del control de versiones antes de confirmar. Sin embargo, si actualiza su copia de trabajo, Subversion se dará cuenta de que falta un fichero y lo reemplazará con la última versión del repositorio. Si necesita borrar un fichero bajo control de versiones, utilice siempre → para que Subversion no tenga que averiguar qué es lo que realmente quiere hacer usted.
Si se borra una carpeta utilizando el Explorador en vez de utilizar el menú contextual de TortoiseSVN, su copia de trabajo se romperá y no podrá confirmar. Si actualiza su copia de trabajo, Subversion reemplazará la carpeta que falta con la última versión del repositorio, y luego podrá eliminarla de la forma correcta, utilizando → .
Si ha borrado un fichero o una carpeta y ya ha confirmado esa operación de borrado en el repositorio, entonces un comando → normal no los podrá recuperar. Pero el fichero o la carpeta borrados no están perdidos para siempre. Si sabe la revisión en la que se borraron el fichero o la carpeta (si no lo sabe, utilice el diálogo de registro para averiguarlo), abra el navegador de repositorios y cambie a esa revisión. Luego seleccione el fichero o la carpeta que ha borrado, haga click con el botón derecho y seleccione → , y como destino de esa operación de copia seleccione la ruta de su copia de trabajo.
If you want to do a simple in-place rename of a file or folder, use → Enter the new name for the item and you're done.
If you want to move files around inside your working copy, perhaps to a different sub-folder, use the right-mouse drag-and-drop handler:
seleccione los ficheros o directorios que desea mover
arrástrelos con el botón derecho a su nuevo destino dentro de la copia de trabajo
suelte el botón derecho del ratón
en el menú contextual seleccione →
Since renames and moves are done as a delete followed by an add you must commit the parent folder of the renamed/moved file so that the deleted part of the rename/move will show up in the commit dialog. If you don't commit the removed part of the rename/move, it will stay behind in the repository and when your co-workers update, the old file will not be removed. i.e. they will have both the old and the new copies.
Usted debe confirmar un cambio de nombre de carpeta antes de cambiar cualquier fichero dentro de la carpeta; si no, su copia de trabajo realmente puede quedar estropeada.
You can also use the repository browser to move items around. Read “El navegador de repositorios” to find out more.
NO debería utilizar los comandos TortoiseSVN Mover o Renombrar en una carpeta que ha sido creada utilizando svn:externals. Esta acción puede provocar que el ítem externo se elimine de su repositorio padre, probablemente molestando a muchas otras personas. Si necesita mover una carpeta externa, debería moverla como lo hace con el resto de ficheros sin versionar, y luego ajustar las propiedades svn:externals de las carpetas padres origen y destino.
Hacer cambios sólo en las mayúsculas/minúsculas de un nombre de fichero es complicado en Subversion sobre Windows, porque durante un corto periodo de tiempo durante el renombrado, ambos nombres de fichero deben existir. Dado que Windows tiene un sistema de ficheros que no distingue mayúsculas y minúsculas, esto no funciona utilizando el habitual comando Renombrar.
Fortunately there are (at least) two possible methods to rename a file without losing its log history. It is important to rename it within subversion. Just renaming in the explorer will corrupt your working copy!
Solución A) (recomendada)
Confirme los cambios en su copia de trabajo.
Renombrar el fichero de MAYusculas a mayUSCULAS directamente en el repositorio utilizando el Navegador de Repositorios.
Actualice su copia de trabajo.
Solución B)
Renombre de MAYusculas a MAYusculas_ con el comando Renombrar del submenú de TortoiseSVN.
Confirme los cambios.
Renombre de MAYusculas_ a mayUSCULAS.
Confirme los cambios.
If the repository already contains two files with the same name but differing only in case (e.g. TEST.TXT and test.txt), you will not be able to update or checkout the parent directory on a Windows client. Whilst Subversion supports case-sensitive filenames, Windows does not.
Esto ocurre a veces cuando dos personas confirman, desde copias de trabajo separadas, ficheros tales que tienen el mismo nombre pero con las mayúsculas/minúsculas diferentes. Esto también puede ocurrir cuando se confirman los ficheros desde un sistema con un sistema de ficheros que distingue mayúsculas/minúsculas, como Linux.
En ese caso, necesita decidir cuál desea mantener y borrar (o renombrar) el otro en el repositorio.
Hay un script gancho de servidor disponible en: http://svn.collab.net/repos/svn/trunk/contrib/hook-scripts/ que evitará confirmaciones cuyo resultado sea dos ficheros con conflicto en las mayúsculas.
A veces su amistoso IDE renombrará ficheros por usted como parte de un ejercicio de refactorización, y por supuesto no se lo dirá a Subversion. Si intenta confirmar sus cambios, Subversion verá el nombre de fichero antiguo como faltante y el nuevo nombre como fichero no versionado. Podría simplemente confirmar el nuevo nombre de fichero para añadirlo, pero entonces perdería la traza de la historia, ya que Subversion no sabe la relación entre los ficheros.
Una forma mejor es notificar a Subversion de que el cambio es realmente un renombrado, y puede hacer esto dentro de los diálogos Confirmar y Comprobar modificaciones. Simplemente seleccione tanto el nombre de fichero antiguo (faltante) como el nuevo nombre (no versionado) y utilice → para emparejar los dos ficheros como un renombrado.
Usually you set your ignore list such that all generated files are ignored in Subversion. But what if you want to clear all those ignored items to produce a clean build? Usually you would set that in your makefile, but if you are debugging the makefile, or changing the build system it is useful to have a way of clearing the decks.
TortoiseSVN proporciona exactamente esa opción utilizando → . Debe mantener pulsada la tecla Mayús mientras hace click con el botón derecho sobre el ítem en el panel de lista de exploración (panel derecho) para ver esto en el menú contextual extendido. Esto mostrará un diálogo que lista todos los ficheros no versionados en cualquier lugar de su copia de trabajo. Ahí podrá seleccionar o deseleccionar ítems para ser eliminados.
Cuando dichos ítems se eliminan, se utiliza la papelera de reciclaje, por lo que si comete un error aquí y borra un fichero que debería haber estado versionado, aún puede recuperarlo.
Si desea deshacer todos los cambios que ha hecho en un fichero desde la última actualización, necesita seleccionar el fichero, hacer click con el botón derecho para sacar el menú contextual, y luego seleccionar el comando → Aparecerá un diálogo que le muestra los ficheros que ha cambiado y que puede revertir. Seleccione los que desee revertir y pulse .
Si desea deshacer un borrado o un renombrado, necesitará utilizar Revertir en la carpeta padre dado que el ítem borrado ya no existe y no podrá hacer click con el botón derecho sobre él.
If you want to undo the addition of an item, this appears in the context menu as → . This is really a revert as well, but the name has been changed to make it more obvious.
Las columnas en este diálogo pueden ser personalizadas de la misma forma que las columnas en el diálogo Comprobar modificaciones. Para más detalles, lea “Estado local y remoto”.
sólo deshará sus cambios locales. No deshace ningún cambio que ya haya sido confirmado. Si desea deshacer todos los cambios que se confirmaron en una revisión en particular, lea “Diálogo de Registro de revisiones” para obtener más información.
When you revert changes you may find that the operation takes a lot longer than you expect. This is because the modified version of the file is sent to the recycle bin, so you can retrieve your changes if you reverted by mistake. However, if your recycle bin is full, Windows takes a long time to find a place to put the file. The solution is simple: either empty the recycle bin or deactivate the Use recycle bin when reverting box in TortoiseSVN's settings.
Si un comando de Subversion no puede completarse de forma correcta, quizás por problemas en el servidor, su copia de trabajo puede quedarse en un estado inconsistente. En ese caso deberá utilizar → en la carpeta. Es una buena idea hacerlo en la rama superior de la copia de trabajo.
Cleanup has another useful side effect. If a file date changes but its content doesn't, Subversion cannot tell whether it has really changed except by doing a byte-by-byte comparison with the pristine copy. If you have a lot of files in this state it makes acquiring status very slow, which will make many dialogs slow to respond. Executing a Cleanup on your working copy will repair these “broken” timestamps and restore status checks to full speed.
Algunas versiones anteriores de Subversion estaban afectadas con un error que causaba errores en la fecha cuando obtenía con la opción Utilizar fechas de confirmación activada. Utilice el comando Limpieza para acelerar esas copias de trabajo.
A veces desea obtener información más detallada sobre un fichero o directorio que la que proporcionan los iconos sobreimpresionados. Puede obtener toda la información que Subversion proporciona en el diálogo de propiedades del explorador. Simplemente seleccione el fichero o directorio y seleccione → en el menú contextual (atención: ésta es la entrada normal del menú de propiedades que el explorador proporciona, ¡no la que está en el submenú de TortoiseSVN!). En el cuadro de diálogo de propiedades, TortoiseSVN ha añadido una nueva página de propiedades para los ficheros y carpetas bajo control de Subversion, donde puede ver toda la información relevante sobre el fichero/directorio seleccionado.
You can read and set the Subversion properties from the Windows properties dialog, but also from → and within TortoiseSVN's status lists, from → .
You can add your own properties, or some properties with a special meaning in Subversion. These begin with svn:. svn:externals is such a property; see how to handle externals in “Proyectos referenciados”.
Subversion soporta expansión de palabras clave similar a CVS, lo que puede utilizarse para introducir el nombre del fichero y la información de la revisión dentro del propio fichero. Las palabras clave actualmente soportadas son:
Fecha de la última confirmación conocida. Esto se basa en la información obtenida cuando actualiza su copia de trabajo. No se contacta con el repositorio para buscar cambios más recientes.
Revisión de la última confirmación conocida.
Autor que hizo la última confirmación conocida.
La URL completa de este fichero en el repositorio.
Una combinación comprimida de las cuatro palabras clave anteriores.
To find out how to use these keywords, look at the svn:keywords section in the Subversion book, which gives a full description of these keywords and how to enable and use them.
For more information about properties in Subversion see the Special Properties.
Para añadir una nueva propiedad, primero pulse en Añadir.... Seleccione el nombre de la propiedad deseado del cuadro desplegable, o escriba un nombre de su elección, y luego introduzca un valor en la caja de texto que hay debajo. Para las propiedades que admiten múltiples valores, como una lista de ignorados, éstos se pueden introducir en múltiples líneas. Pulse en
Si desea aplicar una propiedad a muchos ítems a la vez, seleccione los ficheros/carpetas en el explorador, y luego seleccione →
Si desea aplicar la propiedad a cada fichero y carpeta en la jerarquía debajo de la carpeta actual, seleccione la casilla Recursivo.
Algunas propiedades, por ejemplo svn:needs-lock, pueden aplicarse únicamente a ficheros, por lo que ese nombre de propiedad no aparece en la lista desplegable para las carpetas. Aún así puede aplicar dicha propiedad recursivamente a todos los ficheros en una jerarquía, pero tendrá que escribir el nombre de la propiedad usted mismo.
Si desea editar una propiedad existente, primero seleccione dicha propiedad de la lista de propiedades existentes, y luego pulse en .
Si desea eliminar una propiedad existente, seleccione dicha propiedad de la lista de propiedades existentes, y luego pulse en .
La propiedad svn:externals se puede utilizar para traer otros proyectos del mismo repositorio o de otro completamente distinto. Para más información, lea “Proyectos referenciados”.
A menudo se encontrará aplicando el mismo conjunto de propiedades muchas veces, por ejemplo bugtraq:logregex. Para simplificar el proceso de copiar propiedades de un proyecto a otro, puede utilizar la característica Exportar/Importar.
Desde el fichero o carpeta en el que las propiedades ya están establecidas, utilice → , seleccione las propiedades que desea exportar y haga click en . Se le preguntará por un nombre de fichero donde se grabarán los nombres de las propiedades y sus valores.
Desde la(s) carpeta(s) donde desea aplicar estas propiedades, utilice → y haga click en . Se le preguntará por un nombre de fichero desde el que importar, por lo que deberá navegar al lugar donde almacenó el fichero exportado anteriormente y seleccionarlo. Las propiedades se añadirán a las carpetas de forma no recursiva.
Si desea añadir las carpetas a un árbol recursivamente, siga los pasos anteriores, y luego en el diálogo de propiedades seleccione cada propiedad por turnos, haga click en , seleccione la casilla Aplicar propiedad recursivamentey haga click en .
El formato del fichero de importación es binario y propietario de TortoiseSVN. Su único propósito es transferir las propiedades utilizando Importar y Exportar, por lo que no hay necesidad de editar estos ficheros.
TortoiseSVN puede manejar valores de propiedades binarios utilizando ficheros. Para leer un valor de propiedad binario, utilice para almacenarlo en un fichero. Para establecer un valor binario, utilice un editor hexadecimal u otra herramienta adecuada para crear un fichero con el contenido que necesite, y luego utilice para leer ese fichero.
Aunque las propiedades binarias no se utilizan a menudo, pueden ser útiles en algunas aplicaciones. Por ejemplo, si está almacenando ficheros gráficos muy grandes, o si la aplicación que se utiliza para cargar el fichero es pesada, puede querer guardar una pequeña imagen guía como una propiedad para poder obtener una previsualización rápidamente.
You can configure Subversion and TortoiseSVN to set properties automatically on files and folders when they are added to the repository. There are two ways of doing this.
You can edit the subversion configuration file to enable this feature on your client. The General page of TortoiseSVN's settings dialog has an edit button to take you there directly. The config file is a simple text file which controls some of subversion's workings. You need to change two things: firstly in the section headed miscellany uncomment the line enable-auto-props = yes. Secondly you need to edit the section below to define which properties you want added to which file types. This method is a standard subversion feature and works with any subversion client. However it has to be defined on each client individually - there is no way to propagate these settings from the repository.
An alternative method is to set the tsvn:autoprops property on folders, as described in the next section. This method only works for TortoiseSVN clients, but it does get propagated to all working copies on update.
Whichever method you choose, you should note that auto-props are only applied to files at the time they are added to the repository. Auto-props will never change the properties of files which are already versioned.
If you want to be absolutely sure that new files have the correct properties applied, you should set up a repository pre-commit hook to reject commits where the required properties are not set.
Las propiedades de Subversion están versionadas. Después de que cambie o añada una propiedad tiene que confirmar sus cambios.
Si hay un conflicto al confirmar los cambios, porque otro usuario ha cambiado la misma propiedad, Subversion genera un fichero .prej. Borre este fichero después de que haya resuelto del conflicto.
TortoiseSVN tiene unas pocas propiedades especiales para sí mismo, y estas empiezan con tsvn:.
tsvn:logminsize establece la longitud mínima de un mensaje de registro para una confirmación. Si introduce un mensaje más corto de lo especificado aquí, la confirmación se deshabilita. Esta característica es muy útil para que se acuerde de proporcionar un mensaje descriptivo apropiado para cada confirmación. Si esta propiedad no se establece, o el valor es cero, se permiten mensajes de registro vacíos.
tsvn:lockmsgminsize establece la longitud mínima para un mensaje de bloqueo. Si introduce un mensaje más corto de lo especificado aquí, el bloqueo se deshabilita. Esta característica es muy útil para que se acuerde de proporcionar un mensaje descriptivo apropiado para cada blqoueo que obtenga. Si esta propiedad no se establece, o el valor es cero, se permiten mensajes de bloqueo vacíos.
tsvn:logwidthmarker se utiliza con proyectos que necesitan que los mensajes de registro se formateen con algún ancho máximo (típicamente, 80 caracteres) antes de un salto de línea. Al establecer esta propiedad a un valor distinto de cero ocurren dos cosas en el diálogo de entrada de mensajes de registro: pone un marcador para indicar el ancho máximo, y deshabilita el ajuste de línea en la pantalla, para que pueda ver si el texto que ha introducido es muy largo. Tenga en cuenta que esta característica sólo funcionará correctamente si ha seleccionado una fuente de ancho fijo para los mensajes de registro.
tsvn:logtemplate se utiliza en proyectos que tienen reglas sobre el formateo de mensajes. Esta propiedad alberga una cadena de texto de múltiples líneas que se insertará en el cuadro del mensaje de confirmación cuando inice una confirmación. Puede editarlo para incluir la información necesaria. Tenga en cuenta que si estaba utilizando también tsvn:logminsize, debe asegurarse de establecer una longitud mayor que la de la plantilla o perderá el mecanismo de protección.
Subversion allows you to set “autoprops” which will be applied to newly added or imported files, based on the file extension. This depends on every client having set appropriate autoprops in their subversion configuration file. tsvn:autoprops can be set on folders and these will be merged with the user's local autoprops when importing or adding files. The format is the same as for subversion autoprops, e.g. *.sh = svn:eol-style=native;svn:executable sets two properties on files with the .sh extension.
Si hay un conflicto entre las autoprops locales y tsvn:autoprops, la configuración del proyecto tiene preferencia ya que son específicas para ese proyecto.
In the Commit dialog you have the option to paste in the list of changed files, including the status of each file (added, modified, etc). tsvn:logfilelistenglish defines whether the file status is inserted in English or in the localized language. If the property is not set, the default is true.
TortoiseSVN can use spell checker modules which are also used by OpenOffice and Mozilla. If you have those installed this property will determine which spell checker to use, i.e. in which language the log messages for your project should be written. tsvn:projectlanguage sets the language module the spell checking engine should use when you enter a log message. You can find the values for your language on this page: MSDN: Language Identifiers.
Puede introducir este valor en decimal, o en hexadecimal si se precede por 0x. Por ejemplo, Español (España, ordenación tradicional) puede introducirse como 0x040a or 1034.
La propiedad tsvn:logsummary se utiliza para extraer una porción del mensaje de registro que luego se muestra en el diálogo de registro como el sumario del mensaje de registro.
El valor de la propiedad tsvn:logsummary debe establecerse a una cadena de texto regex de una línea que contenga un grupo regex. Lo que satisfaga ese grupo se utilizará como sumario.
Por ejemplo: \[SUMARIO\]:\s+(.*) capturará todo lo que haya tras “[SUMARIO]” en el mensaje de registro y lo utillizará como sumario.
Cuando quiera añadir una nueva propiedad, puede o bien elegir una desde la lista en el cuadro desplegable, o puede introducir el nombre de propiedad que desee. Si su proyecto utiliza algunas propiedades personalizadas, y quiere que esas propiedades aparezcan en la lista del cuadro desplegable (para evitar errores ortográficos cuando introduzca un nombre de propiedad), puede crear una llista de sus propias propiedades personalizadas utilizando tsvn:userfileproperties y tsvn:userdirproperties. Aplique estas propiedades a una carpeta. Cuando vaya a editar las propiedades de cualquier ítem hijo, sus propiedades personalizadas aparecerán en la lista de nombres de propiedades predefinidas.
Some tsvn: properties require a true/false value. TortoiseSVN also understands yes as a synonym for true and no as a synonym for false.
TortoiseSVN can integrate with some bug tracking tools. This uses project properties that start with bugtraq:. Read “Integración con sistemas de control de errores / seguimiento de incidencias” for further information.
It can also integrate with some web-based repository browsers, using project properties that start with webviewer:. Read “Integración con visores de repositorios basados en web” for further information.
These special project properties must be set on folders for the system to work. When you commit a file or folder the properties are read from that folder. If the properties are not found there, TortoiseSVN will search upwards through the folder tree to find them until it comes to an unversioned folder, or the tree root (eg. C:\) is found. If you can be sure that each user checks out only from e.g trunk/ and not some sub-folder, then it is sufficient to set the properties on trunk/. If you can't be sure, you should set the properties recursively on each sub-folder. A property setting deeper in the project hierarchy overrides settings on higher levels (closer to trunk/).
For project properties only you can use the Recursive checkbox to set the property to all sub-folders in the hierarchy, without also setting it on all files.
Cuando añada nuevas subcarpetas utilizando TortoiseSVN, cualquier propiedad de proyecto presente en la carpeta padre se añadirá también automáticamente a la nueva carpeta hija.
Aunque las propiedades de proyecto de TortoiseSVN son extremadamente útiles, sólo funcionan con TortoiseSVN, y algunas sólo funcionarán en las versiones más recientes de TortoiseSVN. Si la gente que trabaja en su proyecto utiliza un número de clientes de Subversion diferentes, o es posible que tengan versiones antiguas de TortoiseSVN, puede que quiera utilizar ganchos de repositorio para forzar políticas de proyectos. Las propiedades de proyecto sólo ayudan a implementar una política, no pueden forzarlas.
Una de las características de los sistemas de control de versiones es la posibilidad de aislar cambios en una línea separada de desarrollo. Esto se conoce como una rama. Las ramas se utilizan a menudo para probar nuevas características sin molestar la línea principal del desarrollo con errores de compilación y errores. Tan pronto como la nueva característica es lo suficiente estable, la rama de desarrollo se fusiona de nuevo en la rama principal (trunk, troncal/tronco).
Otra característica de los sistemas de control de versiones es la posibilidad de marcar revisiones particulares (por ejemplo, una versión lanzada a producción), para que pueda en cualquier momento recrear un cierto entorno o compilación. Este proceso se conoce como etiquetar.
Subversion does not have special commands for branching or tagging, but uses so-called “cheap copies” instead. Cheap copies are similar to hard links in Unix, which means that instead of making a complete copy in the repository, an internal link is created, pointing to a specific tree/revision. As a result branches and tags are very quick to create, and take up almost no extra space in the repository.
Si ha importado su proyecto con la estructura de directorios recomendados, crear una rama o una etiqueta es muy simple:
Seleccione la carpeta en su copia de trabajo de la que desea hacer una rama o una etiqueta, y luego seleccione el comando → .
La URL de destino por defecto para la nueva rama será la URL de origen en la que se basa su copia de trabajo. Necesitará editar esa URL con la nueva ruta para su rama/etiqueta. Así que en vez de
http://svn.collab.net/repos/NombreDelProyecto/trunk
querrá ahora usar algo como
http://svn.collab.net/repos/NombreDelProyecto/tags/Version_1.10
Si no puede recordar la convención de nombres que usó la última vez, pulse el botón a la derecha para abrir el navegador de repositorios, para que pueda ver la estructura actual del repositorio.
Ahora debe elegir el origen de la copia. Aquí tiene tres opciones:
La nueva rama se copia directamente en el repositorio desde la revisión HEAD. No se necesita transferir datos desde su copia de trabajo, y la rama se crea muy rápidamente.
La nueva rama se copia directamente en el repositorio, pero puede elegir una versión anterior. Esto es útil si se olvidó de crear una etiqueta cuando lanzó una versión de su proyecto la semana pasada. Si no puede acordarse del número de revisión, pulse el botón a la derecha para mostrar el registro de revisiones, y seleccione el número de revisión desde allí. De nuevo no se transfiere datos desde su copia de trabajo, y la rama se crea muy rápidamente.
La nueva rama es una copia idéntica de su copia de trabajo local. Si ha cambiado algunos ficheros a una revisión anterior en su copia de trabajo, o si ha hecho cambios locales, esto es exactamente lo que irá a la copia. Naturalmente, esta clase de etiquetado complejo conlleva transferir datos desde su copia de trabajo al repositorio si no existe ya allí.
Si desea que su copia de trabajo se cambie automáticamente a la rama recién creada, utilice la casilla Cambiar la copia de trabajo a la nueva rama/etiqueta. Pero si lo hace, asegúrese primero de que su copia de trabajo no contenga modificaciones. Si las tiene, esos cambios se mezclarán en la copia de trabajo de la rama cuando se haga el cambio.
Pulse para confirmar la nueva copia al repositorio. No se olvide de proporcionar un mensaje de registro. Tenga en cuenta que la copia se crea dentro del repositorio.
Note that unless you opted to switch your working copy to the newly created branch, creating a Branch or Tag does not affect your working copy. Even if you create the branch from your WC, those changes are committed to the new branch, not to the trunk, so your WC may still be marked as modified with respect to the trunk.
...that is (not really) the question. While a checkout downloads everything from the desired branch in the repository to your working directory, → only transfers the changed data to your working copy. Good for the network load, good for your patience. :-)
To be able to work with your freshly generated branch or tag you have several ways to handle it. You can:
→ para obtener una copia nueva en una carpeta vacía. Puede obtener la copia de trabajo en cualquier parte de su disco duro, y puede crear tantas copias de trabajo de su repositorio como desee.
Cambiar su copia de trabajo actual a la copia recién creada en el repositorio. De nuevo seleccione la carpeta superior de su proyecto y utilice → del menú contextual.
En el siguiente diálogo, introduzca la URL de la rama que acaba de crear. Deje la opción Revisión HEAD activada y pulse . Su copia de trabajo se cambia a la nueva rama/etiqueta.
Cambiar trabaja igual que Actualizar, en el sentido de que nunca pierde sus cambios locales. Cualquier cambio que haya hecho a su copia de trabajo que todavía no se hayan confirmado se fusionarán cuando haga el Cambio. Si no desea que esto ocurra, entonces debe o bien confirmar los cambios antes de cambiar, o revertir su copia de trabajo a una revisión ya-confirmada (típicamente HEAD).
If you want to work on trunk and branch, but don't want the expense of a fresh checkout, you can use Windows Explorer to make a copy of your trunk checkout in another folder, then → that copy to your new branch.
Aunque Subversion por sí mismo no hace ninguna distinción entre etiquetas y ramas, la forma en la que normalmente se usan difiere un poco.
Las etiquetas se usan típicamente para crear una copia estática de un proyecto en una etapa concreta. Como tales normalmente no se utilizan para el desarrollo - eso es para lo que se utilizan las ramas, y por esa razón recomendamos la estructura del repositorio /trunk /branches /tags en primer lugar. Trabajando en una revisión etiquetada no es una buena idea, pero dado que sus ficheros locales no están protegidos, no hay nada que le impida hacer esto por error. Sin embargo, si intenta confirmar a una ruta en el repositorio que contenga /tags/ (en inglés), TortoiseSVN le avisará.
Puede ser que necesite hacer más cambios a una versión que ya había etiquetado. La forma correcta de manejar esta situación es crear primero una nueva rama desde la etiqueta. Haga sus cambios en esta rama, y luego cree una nueva etiqueta para esta rama, por ejemplo Version_1.0.1.
Si modifica una copia de trabajo creada desde una rama y confirma, entonces los cambios irán a la nueva rama y no en el tronco. Sólo se guardan las modificaciones. El resto continúa siendo una copia barata.
Mientras que las ramas se utilizan para mantener líneas de desarrollo separadas, en alguna etapa tendrá que fusionar los cambios hechos en una rama de vuelta en el tronco, o viceversa.
It is important to understand how branching and merging works in Subversion before you start using it, as it can become quite complex. It is highly recommended that you read the chapter Branching and Merging in the Subversion book, which gives a full description and many examples of how it is used.
El siguiente punto a tener en cuenta es que la fusión siempre tiene lugar en una copia de trabajo. Si quiere fusionar cambios en una rama, deberá tener una copia de trabajo obtenida de dicha rama, e invocar el asistente de fusionado desde esa copia de trabajo utilizando → .
En general es una buena idea realizar fusiones en una copia de trabajo sin modificar. Si ha hecho otros cambios en su copia de trabajo, confírmelos primero. Si la fusión no funciona como espera, puede querer revertir los cambios, y el comando Revertir descartará todos los cambios, incluidos cualquiera que haya hecho antes de la fusión.
There are three common use cases for merging which are handled in slightly different ways, as described below. The first page of the merge wizard asks you to select the method you need.
Este método cubre el caso en el que ha hecho una o más revisiones a una rama (o al tronco) y desea portar estos cambios a una rama diferente.
Lo que le está pidiendo a Subversion que haga es: “Calcula los cambios necesarios para ir [DESDE] la revisión 1 de la rama A [HASTA] la revisión 7 de la rama A, y aplica esos cambios en mi copia de trabajo (del tronco o de la rama B).”
This method covers the case when you have made a feature branch as discussed in the Subversion book. All trunk changes have been ported to the feature branch, week by week, and now the feature is complete you want to merge it back into the trunk. Because you have kept the feature branch synchronized with the trunk, the latest versions of branch and trunk will be absolutely identical except for your branch changes.
Este es un caso especial de la fusión de árboles describa más abajo, y necesita sólo la URL desde la que fusionar (normalmente) su rama de desarrollo. Utiliza las características de registro de fusiones de Subversion para calcular el rango de revisiones correcto que se debe utilizar, y realiza comprobaciones adicionales para asegurarse de que la rama ha sido completamente actualizada con los cambios del tronco. Esto le asegura que no va a deshacer accidentalmente el trabajo que otros han confirmado en el tronco desde sus últimos cambios sincronizados.
After the merge, all branch development has been completely merged back into the main development line. The branch is now redundant and can be deleted.
This is a more general case of the reintegrate method. What you are asking Subversion to do is: “Calculate the changes necessary to get [FROM] the head revision of the trunk [TO] the head revision of the branch, and apply those changes to my working copy (of the trunk).” The net result is that trunk now looks exactly like the branch.
If your server/repository does not support merge-tracking then this is the only way to merge a branch back to trunk. Another use case occurs when you are using vendor branches and you need to merge the changes following a new vendor drop into your trunk code. For more information read the chapter on vendor branches in the Subversion Book.
In the From: field enter the full folder URL of the branch or tag containing the changes you want to port into your working copy. You may also click to browse the repository and find the desired branch. If you have merged from this branch before, then just use the drop down list which shows a history of previously used URLs.
En el campo Rango de revisiones a fusionar introduzca la lista de revisiones que desea fusionar. Puede ser una única revisión, una lista de revisiones específicas separadas por comas, un rango de revisiones separado por un guión, o cualquier combinación de éstas.
The easiest way to select the range of revisions you need is to click on , as this will list recent changes with their log comments. If you want to merge the changes from a single revision, just select that revision. If you want to merge changes from several revisions, then select that range (using the usual Shift-modifier). Click on and the list of revision numbers to merge will be filled in for you.
Si desea fusionar los cambios de nuevo fuera de su copia de trabajo, para revertir un cambio que ya ha sido confirmado, seleccoine las revisiones a revertir y asegúrese de que la casilla Fusión inversa está marcada.
Si ya ha fusionado algunos cambios desde esta rama, esperemos que haya apuntado la última revisión fusionada en el mensaje de registro cuando confirmó ese cambio. En ese caso, puede utilizar en la Copia de Trabajo para buscar ese mensaje de registro. Utilize el punto final de la última fusión como punto de inicio de esta fusión. Por ejemplo, si la última vez fusionó las revisiones de la 37 a la 39, entonces el punto de inicio de esta fusión sería la revisión 39.
Si está utilizando las características de registro de fusiones de Subversion, no necesita recordar qué revisiones ya han sido fusionadas - Subversion lo apuntará por usted. Si deja el rango de revisiones en blanco, se incluirán todas las revisiones que no hayan sido aún fusionadas. Lea “Registro de fusión” para saber más.
Si hay otras personas que puedan estar confirmando cambios, entonces tenga cuidado al utilizar la revisión HEAD. Puede que no se refiera a la revisión que usted cree si alguien más ha hecho una confirmación después de su última actualización.
Haga click en y vaya a “Opciones de fusión”
To merge a feature branch back into the trunk you must start the merge wizard from within a working copy of the trunk.
In the From URL: field enter the full folder URL of the branch that you want to merge back. You may also click to browse the repository.
Hay algunas condiciones que se aplican a la fusión de reintegración. En primer lugar, el servidor debe soportar el registro de fusiones. La copia de trabajo debe ser de profundidad infinita (sin obtenciones parciales), y no debe tener ninguna modificación local, ítems apuntando a otra ruta o ítems que hayan sido actualizados a otras revisiones distintas de HEAD. Todos los cambios del tronco hechos durante el desarrollo de la rama deben haberse fusionado en la rama (o marcados como que ya han sido fusionados). El rago de revisiones para la fusión se calculará automáticamente.
Si está utilizando este método para fusioanr una rama de característica de nuevo en el tronco, necesitará iniciar el asistente de fusión desde una copia de trabajo del tronco.
In the From: field enter the full folder URL of the trunk. This may sound wrong, but remember that the trunk is the start point to which you want to add the branch changes. You may also click to browse the repository.
In the To: field enter the full folder URL of the feature branch.
En los dos campos Desde la Revisión y Hasta la Revisión, introduzca el último número de revisión en el que se sincronizaron los dos árboles. Si está seguro de que nadie más está haciendo confirmaciones puede utilizar HEAD en ambos casos. Si hay alguna posibilidad de que alguien haya hecho una confirmación desde esa sincronización, utilice el número de revisión específico para evitar perder cambios más recientes.
You can also use to select the revision.
Esta página del asistente le permite especificar opciones avanzadas antes de empezar el proceso de fusión. La mayoría de las veces puede simplemente utilizar las opciones por defecto.
Puede especificar la profundidad de la fusión, es decir, cuántos niveles debe bajar la fusión en su copia de trabajo. Los términos de profundidad se describen en “Profundidad de obtención”. La profundidad por defecto es Copia de trabajo, que utiliza la configuración de profundidad existente, y que casi siempre es lo que quiere hacer.
Most of the time you want merge to take account of the file's history, so that changes relative to a common ancestor are merged. Sometimes you may need to merge files which are perhaps related, but not in your repository. For example you may have imported versions 1 and 2 of a third party library into two separate directories. Although they are logically related, Subversion has no knowledge of this because it only sees the tarballs you imported. If you attempt to merge the difference between these two trees you would see a complete removal followed by a complete add. To make Subversion use only path-based differences rather than history-based differences, check the Ignore ancestry box. Read more about this topic in the Subversion book, Noticing or Ignoring Ancestry
Puede especificar la forma en la que se manejan los cambios en los finales de línea y en los espacios en blanco. Estas opciones se describen en “Opciones de fín de línea y espacios en blanco”. El comportamiento por defecto es tratar todos los espacios en blanco y las diferencias en los finales de líneas como cambios reales que deben fusionarse.
Si está utilizando el registro de fusiones y desea marcar una revisión como que ya se ha fusionado, sin hacer realmente efectiva la fusión aquí, marque la casilla Sólo registrar la fusión. Hay dos posibles razones por las que puede querer hacer esto. Puede ser que la fusión es demasiado complicada para los algoritmos de fusión, por lo que hace los cambios en el código a mano, y luego marca el cambio como fusionado para que el algoritmo de registro de fusión se de por enterado. O quizás quiera evitar que una revisión en concreto se fusione. Marcándola como ya fusionada evitará que la fusión se produzca con los clientes manejan la información de registro de fusión.
Now everything is set up, all you have to do is click on the button. If you want to preview the results performs the merge operation, but does not modify the working copy at all. It shows you a list of the files that will be changed by a real merge, and notes those areas where conflicts will occur.
El diálogo de progreso de fusión muestra cada etapa de la fusión, con los rangos de revisiones involucrados. Esto puede indicar un número de revisión más del que esperaba. Por ejemplo, si pidió fusionar la revisión 123, el diálogo de progreso mostrará “Fusionando de r122 a r123”. Para entenderlo debe recordar que Fusionar está íntimamente relacionado con Diferenciar. El proceso de fusión funciona generando una lista de diferencias entre dos puntos del repositorio, y posteriormente aplicando esas diferencias a su copia de trabajo. El diálogo de progreso está simplemente mostrando los puntos de inicio y fin de la diferenciación.
La fusión ya ha concluído. Es una buena idea observar la fusión y comprobar si el resultado es el esperado. Normalmente fusionar es un proceso complicado. A menudo aparecen conflictos cuando la rama se ha desviado mucho del tronco.
For Subversion clients and servers prior to 1.5, no merge information is stored and merged revisions have to be tracked manually. When you have tested the changes and come to commit this revision, your commit log message should always include the revision numbers which have been ported in the merge. If you want to apply another merge at a later time you will need to know what you have already merged, as you do not want to port a change more than once. For more information about this, refer to Best Practices for Merging in the Subversion book.
Si su servidor y todos los clientes están ejecutando Subverison 1.5 o superior, las facilidades de registro de fusiones apuntarán las revisiones fusionadas y evitarán que una revisión se fusione más de una vez. Esto le facilita mucho la vida ya que puede simplemente fusionar el rango entero de revisiones cada vez y saber qué sólo las nuevas revisiones serán realmente fusionadas.
El manejo de las ramas es importante. Si desea mantener esta rama actualizada respecto al tronco, debería asegurarse de fusionar a menudo para que la rama y el tronco no se alejen mucho. Por supuesto, sigue debiendo evitar fusiones repetidas de cambios, como se explicó anteriormente.
If you have just merged a feature branch back into the trunk, the trunk now contains all the new feature code, and the branch is obsolete. You can now delete it from the repository if required.
Subversion can't merge a file with a folder and vice versa - only folders to folders and files to files. If you click on a file and open up the merge dialog, then you have to give a path to a file in that dialog. If you select a folder and bring up the dialog, then you must specify a folder URL for the merge.
Subversion 1.5 introdujo facilidades para el registro de fusiones.. Cuando fusiona cambios de un árbol en otro, los números de revisión fusionados se almacenan, y esta información se puede utilizar para diferentes propósitos.
Puede evitar el peligro de fusionar la misma revisión dos veces (problema de fusiones repetidas). Una vez que una revisión se ha marcado como que ha sido fusionada, las fusiones futuras que incluyan esa revisión en el rango la saltarán.
Cuando fusiona una rama de nuevo al tronco, el diálogo de registro le puede mostrar las confirmaciones de la rama como parte del registro del tronco, proporcionando una mejor trazabilidad de los cambios.
Cuando muestre información de autoría para un fichero, puede elegir mostrar el autor original de la revisión fusionada, en vez de la persona que hizo la fusión.
Puede marcar revisiones como no fusionar si las incluye en la lista de revisiones fusionadas sin ejecutar relamente la fusión.
Merge tracking information is stored in the svn:mergeinfo property by the client when it performs a merge. When the merge is committed the server stores that information in a database, and when you request merge, log or blame information, the server can respond appropriately. For the system to work properly you must ensure that the server, the repository and all clients are upgraded. Earlier clients will not store the svn:mergeinfo property and earlier servers will not provide the information requested by new clients.
Find out more about merge tracking from Subversion's Merge tracking documentation.
Merging does not always go smoothly. Sometimes there is a conflict, and if you are merging multiple ranges, you generally want to resolve the conflict before merging of the next range starts. TortoiseSVN helps you through this process by showing the merge conflict callback dialog.
When a conflict occurs during the merge, you have three ways to handle it.
Puede decidir que sus cambios locales son mucho más importantes, por lo que querrá descartar la versión del repositorio y mantener su versión local. O puede querer descartar sus cambios locales en favor de la versión del repositorio. De cualquier forma, no se intenta fusionar los cambios - simplemente elige una u otra.
Normalmente querrá ver los conflictos y resolverlos. En ese caso, seleccione , lo que iniciará su herramienta de fusionado. Cuando esté satisfecho con el resultado, pulse en .
La última opción es posponer la resolución y continuar con el fusionado. Puede elegir hacerlo para el fichero en conflicto actual, o para todos los ficheros durante el resto de la fusión. Sin embargo, si hay más cambios en ese fichero, no será posible completar la fusión.
If you want to merge all changes from a feature branch back to trunk, then you can use the → from the extended context menu (hold down the Shift key while you right click on the file).
This dialog is very easy. All you have to do is set the options for the merge, as described in “Opciones de fusión”. The rest is done by TortoiseSVN automatically using merge tracking.
Subversion generalmente trabaja mejor sin bloqueos, utilizando los métodos “Copiar-Modificar-Fusionar” que se describieron anteriormente en el “La solución copiar-modificar-fusionar”. Sin embargo, hay algunas pocas situaciones en las que puede querer implementar alguna forma de política de bloqueo.
Está utilizando ficheros “no fusionables”, por ejemplo, ficheros de imagen. Si dos personas cambian el mismo fichero, la fusión no es posible, así que alguno de ellos perderá sus cambios.
Your company has always used a locking revision control system in the past and there has been a management decision that “locking is best”.
Firstly you need to ensure that your Subversion server is upgraded to at least version 1.2. Earlier versions do not support locking at all. If you are using file:// access, then of course only your client needs to be updated.
Por defecto, nada se bloquea y todo el mundo que tiene acceso de confirmación puede confirmar cambios a cualquier fichero en cualquier momento. Los demás actualizarán sus copias de trabajo periódicamente y los cambios en el repositorio se fusionarán con los cambios locales.
Si Obtiene un Bloqueo en un fichero, entonces sólo usted puede confirmar ese fichero. Las confirmaciones de los demás se bloquearán hasta que quite el bloqueo. Un fichero bloqueado no puede ser modificado de ninguna forma en el repositorio, por lo que no puede ser siquiera borrado o renombrado, excepto por el dueño del bloqueo.
Sin embargo, los demás usuarios no necesariamente saben que usted ha obtenido un bloqueo. A menos que ellos comprueben el estado de bloqueo regularmente, la primera vez que sabrán sobre él es cuando sus confirmaciones fallen, lo que muchas veces no es muy útil. Para hacer más fácil el manejo de bloqueos, hay una nueva propiedad de Subversion svn:needs-lock. Cuando se establece esta propiedad (a cualquier valor) en un fichero, siempre que el fichero se obtiene o actualiza, la copia local se deja como sólo-lectura a menos que la copia de trabajo tenga un bloqueo para ese fichero. Esto actúa como una advertencia de que no debería modificar el fichero a menos que obtenga un bloqueo. Los ficheros que están versionados y marcados como sólo-lectura se marcan con un icono de sobreimpresión especial en TortoiseSVN para indicar que necesita obtener un bloqueo antes de editar.
Los bloqueos se graban con el lugar de la copia local y también con el propietario. Si tiene varias copias de trabajo (en casa, en el trabajo) entonces sólo puede obtener un bloqueo en una de esas copias de trabajo.
Si uno de sus compañeros de trabajo obtiene un bloqueo y luego se va de vacaciones sin quitarlo, ¿qué hace? Subversion proporciona un método para forcar bloqueos. Quitar un bloqueo que tiene otra persona se define como Romper el bloqueo, y obtener forzosamente un bloqueo que tiene otro se define como Robar el bloqueo. Naturlamente estas no son cosas que hacer a la ligera si desea continuar siendo amigo de sus compañeros de trabajo.
Los bloqueos se guardan en el repositorio, y se crea un token de bloqueo en su copia local de trabajo. Si hay una discrepancia, por ejemplo si alguien ha roto el bloqueo, el token local se convierte en inválido. El repositorio siempre es la referencia definitiva.
Seleccione el fichero o ficheros en su copia de trabajo para los que desee obtener un bloqueo, y seleccione el comando → .
Aparece un diálogo, que le permite introducir un comentario, para que los demás vean por qué ha bloqueado el fichero. El comentario es opcional, y de momento sólo se utiliza con repositorios basados en Svnserve. Si (y sólo si) necesita robar el bloqueo de alguien, marque la casilla Robar bloqueo, y luego pulse .
If you select a folder and then use → the lock dialog will open with every file in every sub-folder selected for locking. If you really want to lock an entire hierarchy, that is the way to do it, but you could become very unpopular with your co-workers if you lock them out of the whole project. Use with care ...
Para asegurarse de que no se olvida de quitar un bloqueo que no necesita más, los ficheros bloqueados se muestran en el diálogo de confirmar y se seleccionan por defecto. Si continúa con la confirmación, los bloqueos que tenga sobre los ficheros seleccionados se quitan, incluso si los ficheros no se han modificado. Si no desea quitar el bloqueo en algunos ficheros, puede desmarcarlos (si no están modificados). Si desea mantener los bloqueos en un fichero que ha modificado, tiene que habilitar la casilla Mantener bloqueos antes de confirmar sus cambios.
Para quitar un bloqueo manualmente, seleccione el fichero o ficheros de su copia de trabajo para los que desee quitar el bloqueo, y luego seleccione el comando → . No hay nada más que introducir por lo que TortoiseSVN contactará con el repositorio y quita los bloqueos. También puede utilizar este comando en una carpeta para quitar todos los bloqueos recursivamente.
Para ver qué bloqueos tiene usted y los de los demás, puede utilizar el comando → . Los tokens de bloqueos que se tienen localmente se muestran inmediatamente. Para comprobar los bloqueos que tienen los demás (y para ver si alguno de sus bloqueos se han roto o han sido robados) necesita pulsar .
Desde el menú contextual aquí, también puede obtener y quitar bloqueos, además de romper y robar bloqueos que tienen otros.
Si ha roto o robado el bloqueo de otro sin decírselo, puede causar una pérdida potencial de trabajo. Si está trabajando con tipos de ficheros no fusionables y roba el bloqueo de otro, una vez que usted quite el bloqueo ellos son libres de confirmar sus cambios y sobreescribir los suyos. Subversion no pierde datos, pero ha perdido la protección para trabajo en equipo que el bloqueo le proporcionaba.
Como se menciona arriba, la manera más efectiva de utilizar los bloqueos es establecer la propiedad svn:needs-lock en los ficheros. Consulte “Configuración del proyecto” para obtener instrucciones sobre cómo establecer propiedades. Los ficheros con esta propiedad establecida siempre se obtendrán y actualizarán con la marca de sólo-lectura a menos que su copia de trabajo tenga un bloqueo.
Como recordatorio, TortoiseSVN utiliza un icono de sobreimpresión especial para indicarlo.
If you operate a policy where every file has to be locked then you may find it easier to use Subversion's auto-props feature to set the property automatically every time you add new files. Read “Establecer propiedades automáticamente” for further information.
Cuando crea un nuevo respositorio con Subversion 1.2 o superior, se crean cuatro plantillas en el directorio hooks del repositorio. Éstos se llaman antes y después de obtener un bloqueo, y antes y después de quitar un bloqueo.
Es una buena idea instalar un script gancho post-lock y post-unlock en el servidor que envíe un email indicando el fichero que se ha bloqueado. Poniendo este script en su sitio, todos sus usuarios serán informados si alguien bloquea/quita el bloqueo de un fichero. Puede encontrar un script gancho de ejemplo hooks/post-lock.tmpl en su carpeta del repositorio.
También puede utilizar ganchos para no permitir romper o robar bloqueos, o quizás para limitarlo a un administrador designado para ello. O quizás desea enviar un email al propietario cuando uno de sus bloqueos se haya roto o robado.
Para más información, lea la “Scripts gancho”.
En proyectos de código abierto (como éste), todos tienen acceso de lectura al repositorio, y cualquiera puede hacer una contribución al proyecto. ¿Así que cómo se controlan esas contribuciones? Si cualquiera pudiera confirmar cambios, el proyecto estaría permanentemente inestable y probablemente roto de forma permanente. En esta situación, el cambio se maneja mediante un fichero de parche enviado al equipo de desarrollo, que tienen acceso de escritura. Ellos pueden revisar el parche antes, y luego o bien confirmarlo en el repositorio o devolvérselo al autor.
Los ficheros de parche son simplemente ficheros de diff unificados que muestran las diferencias entre su copia de trabajo y la revisión base.
Primero necesita hacer y probar sus cambios. Luego en vez de utilizar el comando → sobre la carpeta padre, seleccione →
ahora puede seleccionar los ficheros que desea incluir en el parche, del mismo modo a como lo haría con una confirmación completa. Esto producirá un único fichero que contendrá un resumen de todos los cambios que ha hecho a los ficheros seleccionados desde la última vez que se actualizó desde el repositorio.
Las columnas en este diálogo pueden ser personalizadas de la misma forma que las columnas en el diálogo Comprobar modificaciones. Para más detalles, lea “Estado local y remoto”.
Puede producir parches separados que contengan cambios a diferentes conjuntos de ficheros. Por supuesto, si crea un fichero de parche, hace algunos cambios más a los mismos ficheros y luego crea otro parche, el segundo fichero de parche incluirá ambos conjuntos de cambios.
Simplemente grabe el fichero utilizando un nombre de fichero de su elección. Los ficheros de parche pueden tener la extensión que desee, pero por convención se suele utilizar las extensiones .patch o .diff extension. Ya está preparado para enviar su fichero de parches.
También puede almacenar el parche en el portapapeles en vez de en un fichero. Puede querer hacer esto para poder pegarlo en un email de forma que lo revisen otros. O si tiene dos copias de trabajo en una máquina y quiere transferir cambios de una a otra, un parche en el portapapeles es una forma cómoda de hacerlo.
Patch files are applied to your working copy. This should be done from the same folder level as was used to create the patch. If you are not sure what this is, just look at the first line of the patch file. For example, if the first file being worked on was doc/source/english/chapter1.xml and the first line in the patch file is Index: english/chapter1.xml then you need to apply the patch to the doc/source/ folder. However, provided you are in the correct working copy, if you pick the wrong folder level, TortoiseSVN will notice and suggest the correct level.
Para aplicar un fichero de parche en su copia de trabajo, necesita al menos acceso de lectura al repositorio. La razón para esto es que el programa de fusión debe referenciar los cambios sobre la revisión contra la que se hicieron por el desarrollador remoto.
From the context menu for that folder, click on → This will bring up a file open dialog allowing you to select the patch file to apply. By default only .patch or .diff files are shown, but you can opt for “All files”. If you previously saved a patch to the clipboard, you can use in the file open dialog.
Alternativamente, si el fichero de parche tiene una extensión .patch o .diff, puede hacer click con el botón derecho en él directamente y seleccioanr → . En este caso se le preguntará la ruta de la copia de trabajo.
Estos dos métodos le ofrecen formas diferentes de hacer lo mismo. Con el primer método selecciona la copia de trabajo y busca el fichero de parche. Con el segundo selecciona el fichero de parche y busca la copia de trabajo.
Una vez que haya seleccionado el fichero de parche y la ruta de la copia de trabajo, se ejecuta TortoiseMerge para fusionar los cambios del fichero de parche contra su copia de trabajo. Una pequeña ventana le muestra los ficheros que han sido cambiados. Haga doble click por turnos en cada uno de ellos, compruebe los cambios y grabe los ficheros fusionados.
El parche del desarrollador remoto ya ha sido aplicado a su copia de trabajo, por lo que necesita confirmar para que todos los demás accedan a los cambios desde el repositorio.
A veces necesita saber no sólo qué lineas han cambiado, sino también exactamente quién cambió líneas específicas en un fichero. Entonces es cuando el comando → , a veces conocido como comando de anotar, tiene su utilidad.
Este comando muestra, por cada línea en un fichero, su autor y la revisión en la que se cambió la línea.
Si no está interesado en cambios de revisiones anteriores puede establecer la revisión desde la cual debe empezar la autoría. Ponga este valor a 1 si desea ver la autoría de cada revisión.
Por defecto, el fichero de autoría se ve utilizando TortoiseBlame, que remarca las diferentes revisiones para hacerlas más fáciles de leer. Si desea imprimir o editar el fichero de autoría, seleccione Utilizar visor de texto para ver autorías
Puede especificar la forma en la que se manejarán los cambios en los finales de línea y en los espacios en blanco. Estas opciones se describen en “Opciones de fín de línea y espacios en blanco”. El comportamiento por defecto es tratar todas las diferencias en los espacios en blanco y en los finales de línea como cambios reales, pero si desea ignorar un cambio en la indentación y encontrar al autor original, puede elegir la opción apropiada aquí.
Una vez que pulse , TortoiseSVN empieza a recoger la información para crear el fichero de autoría. Tenga ésto en cuenta: esto puede llevar varios minutos para completarse, dependiendo en cuánto haya cambiado el fichero y por supuesto de su conexión de red con el repositorio. Una vez que el proceso de autoría ha terminado, el resultado se escribe en un fichero temporal y puede ver los resultados.
TortoiseBlame, que se incluye con TortoiseSVN, hace más fáciles de leer los ficheros de autoría. Cuando pasa el ratón por encima de una línea en la columna de información de autoría, todas las líneas con la misma revisión se señalan con un fondo más oscuro. Las líneas de otras revisiones que fueron cambiadas por el mismo autor se señalan con un fondo claro. Los colores pueden no funcionar de forma muy eficiente si su pantalla está en el modo de 256 colores.
Si hace click en una línea, todas las líneas con la misma revisión se señalan, y las líneas de otras revisiones del mismo autor se señalan en un color más claro. Este señalado se mantiene, permitiéndole mover el ratón sin perder los señalados. Pulse en esa revisión de nuevo para desactivar el señalado.
Los comentarios de la revisión (mensaje de registro) se muestra en un texto de ayuda cuando se pasa el cursor sobre la columna de información de autoría. Si quiere copiar el mensaje de registro de esa revisión, utilice el menú contextual que aparece cuando hace click con el botón derecho sobre la columna de información de autoría.
Puede buscar dentro del informe de Autoría utilizando → . Esto le permite buscar por números de revisión, autores y por el contenido del fichero en si mismo. Los mensajes de registro no se incluyen en la búsqueda - deberá utilizar el diálogo de Mostrar Registro para buscar en ellos.
También puede ir directamente a un número de línea concreto utilizando → .
Cuando el ratón se coloca encima de las columnas de información de autoría, tiene disponible un menú contextual que le ayuda a comparar revisiones y examinar la historia, utilizando el número de revisión bajo el ratón como referencia. → genera un informe de autoría para el mismo fichero, pero utilizando la revisión anterior como límite superior. Esto le da el informe de autoría para el estado del fichero justo antes de que la línea que está viendo cambiara. → inicia su visor de diferencias, mostrándole lo que cambió en la revisión referenciada. → le muestra el diálogo de registro de revisiones empezando en la revisión referenciada.
Si necesita un indicador visual mejor de dónde están los cambios más antiguos y más nuevos, seleccione → . Esto utilizará un gradiente de color para mostrar las líneas más nuevas en rojo y las más antiguas en azul. La paleta de color por defecto es bastante suave, pero puede cambiarla utilizando la configuración de TortoiseBlame.
Si está utilizando Registro de fusiones, cuando las líneas hayan cambiado como resultado de una fusión desde otra ruta, TortoiseBlame le mostrará la revisión y el autor del último cambio en el fichero original, en vez de la revisión en la que se realizó la revisión. Estas líneas se muestran con la revisión y el autor en cursiva.
If you want to see the paths involved in the merge, select → .
The settings for TortoiseBlame can be accessed using → on the TortoiseBlame tab. Refer to “Configuración de TortoiseBlame”.
Una de las limitaciones del informe de Autoría es que sólo muestra el fichero tal y como estaba en una revisión en concreto, y muestra la última persona que cambió cada línea. A veces querrá saber qué cambio se hizo, y también quién lo hizo. Lo que necesita aquí es una combinación de los informes de diferencias y autoría.
El diálogo del historial de revisiones incluye varias opciones que le permiten hacerlo.
En el panel superior, seleccione dos revisiones, y luego seleccione → . Esto obtendrá los datos de autoría de las dos revisiones, y luego utilizará el visor de diferencias para comparar los dos ficheros de autoría.
Select one revision in the top pane, then pick one file in the bottom pane and select → . This will fetch the blame data for the selected revision and the previous revision, then use the diff viewer to compare the two blame files.
Muestre el registro de un único fichero, y en el panel superior, seleccione una única revisión, y luego seleccione → . Esto obtendrá los datos de autoría de la revisión seleccionada, y también del fichero en la BASE de trabajo, y utilizará el visor de diferencias para comparar los dos ficheros de autoría.
A veces necesitará trabajar directamente en el repositorio, sin tener una copia de trabajo. Ésa es la razón por la que existe el Navegador de Repositorios. Igual que el Explorador y los iconos sobreimpresionados le permiten ver su copia de trabajo, el navegador de repositorios le permite ver la estructura y el estado del repositorio.
Con el navegador de repositorios puede ejecutar comandos como copiar, mover, renombrar... directamente en el repositorio.
El navegador de repositorios se parecerá al explorador de Windows, excepto que está mostrando el contenido del repositorio en una revisión concreta en vez de los ficheros de su ordenador. En el panel izquierdo puede ver un árbol de directorios, y en el panel derecho están los contenidos del directorio seleccionado. En la parte superior de la ventana del visor de repositorios puede introducir la URL del repositorio y la revisión que desea visualizar.
Al igual que el explorador de Windows, puede pulsar sobre los encabezados de las columnas en el panel derecho si desea establecer la ordenación. Y como en el explorador hay menús contextuales en ambos paneles.
El menú contextual para un fichero le permite:
Abrir el fichero seleccionado, bien con el visor por defecto para ese tipo de fichero, o bien con el programa que elija.
Save an unversioned copy of the file to your hard drive.
Mostrar el registro de las revisiones para ese fichero, o mostrar un gráfico de todas las revisiones para que pueda ver de dónde vino el fichero.
Ver la autoría del fichero, para saber quién cambió qué línea y cuándo.
Eliminar o renombrar el fichero.
Hacer una copia del fichero, bien a una parte diferente del repositorio, o bien a una copia de trabajo incluída dentro del mismo repositorio.
Ver/editar las propiedades del fichero.
El menú contextual para una carpeta le parmite:
Mostrar el registro de revisiones para la carpeta, o mostrar un gráfico de todas las revisiones para que pueda ver de dónde vino la carpeta.
Exportar la carpeta a una copia local no versionada de su disco duro.
Obtener la carpeta para producir una copia de trabajo local en su disco duro.
Create a new folder in the repository.
Add files or folders directly to the repository.
Borrar o eliminar la carpeta.
Hacer una copia de la carpeta, bien a una parte diferente del repositorio, o bien a una copia de trabajo dentro del mismo repositorio.
Ver/Editar las propiedades de la carpeta.
Marcar la carpeta para comparación. La carpeta marcada se mostrará en negrita.
Compare the folder with a previously marked folder, either as a unified diff, or as a list of changed files which can then be visually diffed using the default diff tool. This can be particularly useful for comparing two tags, or trunk and branch to see what changed.
If you select two folders in the right pane, you can view the differences either as a unified-diff, or as a list of files which can be visually diffed using the default diff tool.
Si selecciona múltiples carpetas en el panel derecho, puede obtenerlos todos a la vez en una carpeta padre común.
Si selecciona dos etiquetas que se han copiado desde la misma raíz (tipicamente, /trunk/), puede utilizar → para ver la lista de revisiones entre los dos puntos etiquetados.
You can use F5 to refresh the view as usual. This will refresh everything which is currently displayed. If you want to pre-fetch or refresh the information for nodes which have not been opened yet, use Ctrl-F5. After that, expanding any node will happen instantly without a network delay while the information is fetched.
You can also use the repository browser for drag-and-drop operations. If you drag a folder from explorer into the repo-browser, it will be imported into the repository. Note that if you drag multiple items, they will be imported in separate commits.
If you want to move an item within the repository, just left drag it to the new location. If you want to create a copy rather than moving the item, Ctrl-left drag instead. When copying, the cursor has a “plus” symbol on it, just as it does in Explorer.
If you want to copy/move a file or folder to another location and also give it a new name at the same time, you can right drag or Ctrl-right drag the item instead of using left drag. In that case, a rename dialog is shown where you can enter a new name for the file or folder.
Siempre que haga cambios en el repositorio utiizando uno de estos métodos, se le presentará un diálogo para introducir un mensaje de registro. Si ha arrastrado algo por error, esta es su oportunidad para cancelar la acción.
Sometimes when you try to open a path you will get an error message in place of the item details. This might happen if you specified an invalid URL, or if you don't have access permission, or if there is some other server problem. If you need to copy this message to include it in an email, just right click on it and use → , or simply use Ctrl+C.
A veces necesita saber desde qué revisión del tronco se tomaron las ramas y las etiquetas, y la forma ideal de ver este tipo de información es en un gráfico o una estructura de árbol. Ahí es cuando necesita utilizar →
Este comando analiza la historia de las revisiones e intenta crear un árbol mostrando los puntos en los que se tomaron las copias, y cuando se borraron las ramas/etiquetas.
In order to generate the graph, TortoiseSVN must fetch all log messages from the repository root. Needless to say this can take several minutes even with a repository of a few thousand revisions, depending on server speed, network bandwidth, etc. If you try this with something like the Apache project which currently has over 500,000 revisions you could be waiting for some time.
La buena noticia es que si está utilizando Caché de registro, sólo tendrá que sufrir este retraso una vez. Después, la información de registro se maneja localmente. El caché de registro se habilita desde la configuración de TortoiseSVN.
The revision graph shows several types of node:
Los ítems que se han añadido, o se crearon copiándolos de otros ficheros/carpetas se muestran utilizando un rectángulo redondeado.
Los ítems borrados, por ejemplo una rama que no se necesita más, se muestran utilizando un octágono (rectángulo con las esquinas cortadas).
Where a branch (or trunk or tag) has been modified since the last branch node, this is shown using an ellipse. Shown when the Show HEAD revisions option is selected.
Todos los demás ítems se muestran utilizando un rectángulo normal.
El gráfico de revisiones muestra varios tipos de nodos: <placeholder-1></placeholder-1> Tenga en cuenta que por defecto el gráfico sólo muestra los puntos en los que se añadieron o borraron ítems. Mostrar cada revisión de un proyecto podría generar un gráfico enorme para los casos no triviales. Si realmente desea ver todas las revisiones en las que se hicieron cambios, hay una opción para hacerlo en el menú Ver y en la barra de herramientas.
Dado que los gráficos de revisiones son a menudo complejos, hay un número de funcionalidades que pueden utilizarse para ajustar la vista a lo que desea obtener. Estas opciones están disponibles en el menú Ver y en la barra de herramientas.
El comportamiento por defecto (sin agrupaciones) utilizará una fila por revisión y todas las filas estarán ordenadas estrictamente por revisión. Como resultado, las ramas con una larga vida ocupan una columna completa sólo para unos pocos cambios, y el gráfico resulta muy ancho.
Este modo agrupa los cambios por ramas, de forma que no hay una ordenación global por revisiones: las revisiones consecutivas en una rama se mostrarán (a menudo) como líneas consecutivas. Las sub-ramas, sin embargo, se colocarán de forma que las ramas más nuevas se muestren encima de las ramas más antiguas para mantener el gráfico más delgado. Como resultado, una fila cualquier puede contener cambios de diferentes revisiones.
Normalmente el gráfico muestra la revisión más antigua abajo, y el árbol crece hacia arriba. Utilice esta opción para hacer crecer el árbol desde arriba.
Esto asegura que la última revisión de cada rama se muestra siempre en el gráfico.
Cuando se crea una rama/etiqueta, el comportamiento por defecto es mostrar la rama como si se hubiera tomado desde el último nodo donde se hizo un cambio. Estrictamente esto no es preciso, dado que las ramas generalmente se crean desde HEAD y no desde una revisión específica. Por lo que es posible mostrar la revisión más correcta (pero menos útil) que se utilizó para crear la copia.
Si quiere ver un gráfico del desarrollo de software, las versiones etiquetadas pueden tener poco interes. Esta opción oculta los nodos para las etiquetas y las muestra en el texto de ayuda para el nodo desde el que se crearon. Aparecerá un icono de etiqueta en la parte derecha del nodo orígen para indicar que se crearon etiquetas desde él.
Si la disposición del gráfico ha producido muchas líneas que se cruzan, utilice esta opción para limpiarlo. Esto puede provocar que las columnas del formato aparezcan en sitios menos lógicos, por ejemplo en una línea diagonal en vez de en una columna, y puede llevar un poco de tiempo optimizar el gráfico.
A veces los gráficos de revisión contienen más revisiones de las que desea ver. Esta opción abre un diálogo que le permitirá restringir el rango de revisiones mostrado, y ocultar rutas concretas por su nombre.
Para hacer más fácil la navegación en un gráfico grande, utilice la ventana sobreimpresionada. En ella se muestra el gráfico completo en una pequeña ventana, con la parte que se muestra actualmente iluminada. Puede arrastrar el área iluminada para cambiar la región que se muestra.
La fecha de la revisión, el autor y los comentarios se muestran en una caja de ayuda cuando se mueve el ratón encima de una caja de revisión.
If you select two revisions (Use Ctrl-left click), you can use the context menu to show the differences between these revisions. You can choose to show differences as at the branch creation points, but usually you will want to show the differences at the branch end points, i.e. at the HEAD revision.
Puede ver las diferencias como un fichero de Diff Unificado, que le muestra todas las diferencias en un fichero único con contexto mínimo. Si opta por → se le presentará una lista de ficheros cambiados. Haga doble click en un nombre de fichero para obtener ambas revisiones y compararlas utilizando una herramienta de diferencias visual.
Si hace click con el botón derecho en una revisión, puede utilizar → para ver la historia.
También puede fusionar cambios en la(s) revision(es) seleccionada(s) en una copia de trabajo distinta. Un diálogo de selección de carpeta le permitirá elegir la copia de trabajo donde desea fusionar, pero después de eso no hay diálogo de confirmación, ni oportunidad de probar la fusión sin ejecutarla realmente. Es una buena idea fusionar en una copia de trabajo sin cambios, ¡y así poder revertir los cambios si no funcionan! Esta es una funcionalidad útil si desea fusionar las revisiones seleccionadas de una rama a otra.
Dado que Subversion no puede proporcionar toda la información necesaria, se necesita una cierta cantidad de interpretación, que a veces puede dar resultados estraños. En cualquier caso, la salida para el tronco generalmente da resultados útiles.
Si desea comprobar el servidor de nuevo para obtener la información más reciente, puede simplemente refrescar la vista utilizando F5. Si está utilizando la caché de registro (habilitada por defecto), esto buscará en el repositorio las confirmaciones más recientes y traerá sólo las nuevas. Si la caché de registro estaba en modo desconectado, esto intentará volver a ponerla en línea.
Si está utilizando la caché de registros y cree que el contenido del mensaje o el autor han podido cambiar, debería utilizar el diálogo de registro para refrescar los mensajes que necesita. Dado que el gráfico de revisiones trabaja desde la raíz del repositorio, tendríamos que invlidar la caché completa de registro, y recargarla podría llevar muchísimo tiempo.
Sometimes you may want a copy of your working tree without any of those .svn directories, e.g. to create a zipped tarball of your source, or to export to a web server. Instead of making a copy and then deleting all those .svn directories manually, TortoiseSVN offers the command → . Exporting from a URL and exporting from a working copy are treated slightly differently.
Si ejecuta este comando sobre una carpeta sin versionar, TortoiseSVN asumirá que la carpeta de destino es el objetivo, y abrirá un diálogo para que introduzca la URL y la revisión desde la que desea realizar la exportación. Este diálogo tiene opciones para exportar sólo la carpeta de más alto nivel, para omitir las referencias externas, y para obligar un estilo de fin de línea concreto en aquellos ficheros que tuvieran establecida la propiedad svn:eol-style.
Of course you can export directly from the repository too. Use the Repository Browser to navigate to the relevant subtree in your repository, then use → . You will get the Export from URL dialog described above.
If you execute this command on your working copy you'll be asked for a place to save the clean working copy without the .svn folders. By default, only the versioned files are exported, but you can use the Export unversioned files too checkbox to include any other unversioned files which exist in your WC and not in the repository. External references using svn:externals can be omitted if required.
Another way to export from a working copy is to right drag the working copy folder to another location and choose → or → . The second option includes the unversioned files as well.
When exporting from a working copy, if the target folder already contains a folder of the same name as the one you are exporting, you will be given the option to overwrite the existing content, or to create a new folder with an automatically generated name, eg. Target (1).
A veces tiene una copia de trabajo que desea reconvertir en una carpeta normal sin los directorios .svn. Lo que realmente necesita es un comando exportar-en-el-sitio, que simplemente elimine las carpetas de control, en vez de generar un nuevo árbol limpio.
La respuesta es sorprendentemente sencilla - ¡exporte el árbol en si mismo! TortoiseSVN detecta este caso especial y le pregunta si quiere convertir su copia de trabajo en no-versionada. Si responde sí, los directorios de control se eliminan y tendrá un simple árbol sin directorios de control.
If your repository has for some reason changed it's location (IP/URL). Maybe you're even stuck and can't commit and you don't want to checkout your working copy again from the new location and to move all your changed data back into the new working copy, → is the command you are looking for. It basically does very little: it scans all entries files in the .svn folder and changes the URL of the entries to the new value.
Esta es una operación que se utiliza realmente poco. El comando relocalizar se utiliza sólo si la URL de la raiz del repositorio ha cambiado. Estas son algunas posibles razones:
La dirección IP del servidor ha cambiado.
El protocolo ha cambiado (por ejemplo, de http:// a https://).
La ruta raíz del repositorio ha cambiado en la configuración del servidor.
De otra forma, necesita relocalizar cuando su copia de trabajo se refiere al mismo lugar en el mismo repositorio, pero es el propio repositorio el que se ha movido.
Esto no se aplica si:
Quiere moverse a un repositorio de Subversion diferente. En ese caso debería realizar una obtención limpia desde la nueva localización del repositorio.
Quiere cambiar a una rama o a un directorio diferente dentro del mismo repositorio. Para hacer eso debería utilizar → . Para más información, lea “Obtener o cambiar...”.
Si utiliza relocalizar en alguno de los casos anteriores, corromperá su copia de trabajo y obtendrá muchos mensajes de error inexplicables cuando actualice, confirme, etc. Una vez que ésto ha ocurrido, el único arreglo es hacer una obtención limpia.
Es muy común en el Desarrollo de Software que los cambios se refieran a un ID de error o incidencia específico. A los usuarios de los sistemas de control de errores (seguimiento de incidencias) les gustaría asociar los cambios que hacen en Subversion con un ID específico en su programa de seguimiento de incidencias. La mayoría de programas de seguimiento de incidencias proporcionan un script gancho pre-commit que parsea el mensaje de log para encontrar el ID del error con el que se asocia la confirmación. Esto es de alguna forma propenso a errores, porque se basa en el que usuario escriba el mensaje de registro de forma correcta para que el script gancho pre-commit pueda parsearlo correctamente.
TortoiseSVN puede ayudar al usuario de dos formas:
Cuando el usuario introduce un mensaje de registro, puede añadirse una línea bien definida incluyendo el número de incidencia asociada a la confirmación. Esto reduce el riesgo de que el usuario introduzca el número de incidencia que las herramientas de control de errores no puedan parsear correctamente.
O TortoiseSVN puede remarcar la parte del mensaje de registro introducido que el programa de seguimiento de incidencias reconoce. De esta forma el usuario sabrá que el mensaje de registro introducido puede parsearse correctamente.
Cuando el usuario navega por los mensajes de registro, TortoiseSVN crea un enlace desde cada ID de error en el mensaje de registro, que lanza el navegador con la incidencia mencionada.
You can integrate a bug tracking tool of your choice in TortoiseSVN. To do this, you have to define some properties, which start with bugtraq:. They must be set on Folders: (“Configuración del proyecto”)
There are two ways to integrate TortoiseSVN with issue trackers. One is based on simple strings, the other is based on regular expressions. The properties used by both approaches are:
Set this property to the URL of your bug tracking tool. It must be properly URI encoded and it has to contain %BUGID%. %BUGID% is replaced with the Issue number you entered. This allows TortoiseSVN to display a link in the log dialog, so when you are looking at the revision log you can jump directly to your bug tracking tool. You do not have to provide this property, but then TortoiseSVN shows only the issue number and not the link to it. e.g the TortoiseSVN project is using http://issues.tortoisesvn.net/?do=details&id=%BUGID%
You can also use relative URLs instead of absolute ones. This is useful when your issue tracker is on the same domain/server as your source repository. In case the domain name ever changes, you don't have to adjust the bugtraq:url property. There are two ways to specify a relative URL:
Si empieza con la cadena ^/ se asume que es relativa a la raíz del repositorio. Por ejemplo, ^/../?do=details&id=%BUGID% se resolverá como http://tortoisesvn.net/?do=details&id=%BUGID% si su repositorio está en http://tortoisesvn.net/svn/trunk/.
Una URL que comience con la cadena / se asume que es relativo al nombre del servidor. Por ejemplo, /?do=details&id=%BUGID% se resolverá como http://tortoisesvn.net/?do=details&id=%BUGID% si su repositorio está localizado en cualquier parte de http://tortoisesvn.net.
Set this to true, if you want TortoiseSVN to warn you because of an empty issue-number text field. Valid values are true/false. If not defined, false is assumed.
En el caso simple, TortoiseSVN muestra al usuario un campo de entrada separado donde se puede introducir un ID del error. En ese caso se añade una línea adicional al final o al principio del mensaje de registro que el usuario introduce.
This property activates the bug tracking system in Input field mode. If this property is set, then TortoiseSVN will prompt you to enter an issue number when you commit your changes. It's used to add a line at the end of the log message. It must contain %BUGID%, which is replaced with the issue number on commit. This ensures that your commit log contains a reference to the issue number which is always in a consistent format and can be parsed by your bug tracking tool to associate the issue number with a particular commit. As an example you might use Issue : %BUGID%, but this depends on your Tool.
Esta propiedad define si el ID del error se añade (true) al final del mensaje de registro o se inserta (false) al inicio del mensaje de registro. Los valores válidos son true/false. Si no se define, se asume true, para que los proyectos ya existentes no se rompan.
This text is shown by TortoiseSVN on the commit dialog to label the edit box where you enter the issue number. If it's not set, Bug-ID / Issue-Nr: will be displayed. Keep in mind though that the window will not be resized to fit this label, so keep the size of the label below 20-25 characters.
If set to true only numbers are allowed in the issue-number text field. An exception is the comma, so you can comma separate several numbers. Valid values are true/false. If not defined, true is assumed.
In the approach with regular expressions, TortoiseSVN doesn't show a separate input field but marks the part of the log message the user enters which is recognized by the issue tracker. This is done while the user writes the log message. This also means that the bug ID can be anywhere inside a log message! This method is much more flexible, and is the one used by the TortoiseSVN project itself.
This property activates the bug tracking system in Regex mode. It contains either a single regular expressions, or two regular expressions separated by a newline.
Si se dan dos expresiones, la primera expresión se utiliza como un pre-filtro para encontrar expresiones que contengan identificadores de incidencias. La segunda expresión se utiliza para extraer los identificadores individuales desde los resultados de la primera expresión regular. Esto le permite utilizar una lista de identificadores de incidencias y expresiones en lenguaje natural si lo desea, por ejemplo puede arreglar varias incidencias e incluir una cadena como esta: “Este cambio resuelve las incidencias #23, #24 y #25”
Si desea capturar identificadores de incidencias utilizados como se muestran anteriormente dentro de un mensaje de registro, puede utilizar las siguientes cadenas de expresiones regulares, que son las que se utilizan en el proyecto TortoiseSVN (traducidas al inglés): [Ii]ncidencias?:?(\s*(,|y)?\s*#\d+)+ y (\d+)
La primera expresión extrae “incidencias #23, #24 y #25” de entre el resto del mensaje de registro. La segunda expresión regular extrae los números decimales individuales desde la salida de la primera expresión regular, por lo que devolverá “23”, “24” y “25” para utilizarlos como identificadores de incidencias.
Profundizando en la primera expresión regular un poco, debe empezar con la palabra “incidencia”, posiblemente empezando por mayúscula. Opcionalmente puede ir seguida de una “s” (más de una incidencia) y opcionalmente dos puntos. A esto le sigue uno o más grupos, cada uno empezando por cero o más espacios en blanco, una coma opcional o “y” y más espacios opcionales. Finalmente, hay un “#” obligatorio y un número decimal obligatorio.
Si sólo se establece una expresión, entonces los identificadores individuales de incidencias deben concordar con los grupos de la expresión regular. Por ejemplo: [Ii]ncidencia(?:s)? #?(\d+) Este método se necesita por algunos gestores de incidencias, por ejemplo trac, pero la expresión regular es más dificil de construir. Le recomendamos que sólo utilice este método si la documentación de su gestor de incidencias se lo indica.
If you are unfamiliar with regular expressions, take a look at the introduction at http://en.wikipedia.org/wiki/Regular_expression, and the online documentation and tutorial at http://www.regular-expressions.info/.
Si se establecen las dos propiedades bugtraq:message y bugtraq:logregex, logregex tiene preferencia.
¡Incluso si no tiene un programa de seguimiento de incidencias con un gancho pre-commit parseando sus mensajes de log, puede seguir utilizando ésto para convertir las incidencias mencionadas en su mensajes de registro en vínculos!
And even if you don't need the links, the issue numbers show up as a separate column in the log dialog, making it easier to find the changes which relate to a particular issue.
Some tsvn: properties require a true/false value. TortoiseSVN also understands yes as a synonym for true and no as a synonym for false.
These properties must be set on folders for the system to work. When you commit a file or folder the properties are read from that folder. If the properties are not found there, TortoiseSVN will search upwards through the folder tree to find them until it comes to an unversioned folder, or the tree root (eg. C:\) is found. If you can be sure that each user checks out only from e.g trunk/ and not some sub-folder, then it's enough if you set the properties on trunk/. If you can't be sure, you should set the properties recursively on each sub-folder. A property setting deeper in the project hierarchy overrides settings on higher levels (closer to trunk/).
For tsvn: properties only you can use the Recursive checkbox to set the property to all sub-folders in the hierarchy, without also setting it on all files.
This issue tracker integration is not restricted to TortoiseSVN; it can be used with any Subversion client. For more information, read the full Issue Tracker Integration Specification.
The previous section deals with adding issue information to the log messages. But what if you need to get information from the issue tracker? The commit dialog has a Windows COM interface which allows integration an external program that can talk to your tracker. Typically you might want to query the tracker to get a list of open issues assigned to you, so that you can pick the issues that are being addressed in this commit.
Any such interface is of course highly specific to your system, so we cannot provide this part, and describing how to create such a program is beyond the scope of this manual. The interface definition and sample programs can be obtained from the contrib folder in the in the TortoiseSVN repository.
For illustration purposes, let's suppose that your system administrator has provided you with an issue tracker plugin which you have installed, and that you have set up some of your working copies to use the plugin in TortoiseSVN's settings dialog. When you open the commit dialog from a working copy to which the plugin has been assigned, you will see a new button at the top of the dialog.
In this example you can select one or more open issues. The plugin can then generate specially formatted text which it adds to your log message.
Hay varios visores de repositorios basados en web disponibles para utilizarlos con Subversion como ViewVC y WebSVN. TortoiseSVN dispone de medios para enlazarse con estos visores.
You can integrate a repo viewer of your choice in TortoiseSVN. To do this, you have to define some properties which define the linkage. They must be set on Folders: (“Configuración del proyecto”)
Set this property to the URL of your repo viewer to view all changes in a specific revision. It must be properly URI encoded and it has to contain %REVISION%. %REVISION% is replaced with the revision number in question. This allows TortoiseSVN to display a context menu entry in the log dialog →
Set this property to the URL of your repo viewer to view changes to a specific file in a specific revision. It must be properly URI encoded and it has to contain %REVISION% and %PATH%. %PATH% is replaced with the path relative to the repository root. This allows TortoiseSVN to display a context menu entry in the log dialog → For example, if you right-click in the log dialog bottom pane on a file entry /trunk/src/file then the %PATH% in the URL will be replaced with /trunk/src/file.
También puede utilizar URLs relativas en vez de absolutas. Esto es útil en caso de que su control de incidencias esté en el mismo dominio/servidor que su repositorio. En caso de que el nombre de dominio cambie alguna vez, no tendrá que ajustar las propiedades webviewer:revision y webviewer:pathrevision. El formato es el mismo que el de la propiedad bugtraq:url. Vea “Integración con sistemas de control de errores / seguimiento de incidencias”.
These properties must be set on folders for the system to work. When you commit a file or folder the properties are read from that folder. If the properties are not found there, TortoiseSVN will search upwards through the folder tree to find them until it comes to an unversioned folder, or the tree root (eg. C:\) is found. If you can be sure that each user checks out only from e.g trunk/ and not some sub-folder, then it's enough if you set the properties on trunk/. If you can't be sure, you should set the properties recursively on each sub-folder. A property setting deeper in the project hierarchy overrides settings on higher levels (closer to trunk/).
For tsvn: properties only you can use the Recursive checkbox to set the property to all sub-folders in the hierarchy, without also setting it on all files.
Para averiguar para qué sirven cada una de las diferentes opciones, deje el puntero del ratón un segundo sobre el cuadro de texto/casilla... y aparecerá un útil texto de ayuda.
Este diálogo le permite especificar su idioma preferido, y las configuraciones específicas de Subversion.
Selecciona el idioma del interfaz de usuario. ¿Qué otra cosa esperabas?
Si se marca, TortoiseSVN contactará su sitio de descarga una vez a la semana para ver si hay disponible una versión más reciente del programa. Utilice el botón si desea una respuesta inmediata. No se descargará la versión más reciente; simplemente recibirá un diálogo de información diciéndole que hay una versión nueva disponible.
TortoiseSVN tiene tres sonidos personalizados que se instalan por defecto.
Error
Información
Atención
Puede seleccionar sonidos diferentes (o quitarlos completamente) utilizando el Panel de Control de Windows. es un acceso directo al Panel de Control.
Global ignore patterns are used to prevent unversioned files from showing up e.g. in the commit dialog. Files matching the patterns are also ignored by an import. Ignore files or directories by typing in the names or extensions. Patterns are separated by spaces e.g. */bin */obj *.bak *.~?? *.jar *.[Tt]mp. Remember that these patterns may be used against paths which include N levels of parent directory. Setting ignore patterns for anything other than simple file extensions is not as trivial as it first appears, so be sure to read “Pattern Matching in Ignore Lists” for more information on the pattern-matching syntax, and how paths are checked.
Tenga en cuenta que los patrones de ignorar que especifique aquí también afectarán a otros clientes de Subversion que se ejecuten en su PC, incluyendo el cliente de línea de comandos.
Si utiliza el fichero de configuración de Subversion para establecer un patrón global-ignores, prevalecerá sobre las configuraciones que haga aquí. El fichero de configuración de Subversion se accede utilizando como se describe a continuación.
Este patrón de ignorar afectará a todos sus proyectos. No se versiona, por lo que no afectará a otros usuarios. En el lado opuesto, puede utilizar también la propiedad versionada svn:ignore para excluir ficheros o directorios del control de versiones. Para más información, lea “Ignorando ficheros y directorios”.
This option tells TortoiseSVN to set the file dates to the last commit time when doing a checkout or an update. Otherwise TortoiseSVN will use the current date. If you are developing software it is generally best to use the current date because build systems normally look at the date stamps to decide which files need compiling. If you use “last commit time” and revert to an older file revision, your project may not compile as you expect it to.
Use to edit the Subversion configuration file directly. Some settings cannot be modified directly by TortoiseSVN, and need to be set here instead. For more information about the Subversion config file see the Runtime Configuration Area. The section on Automatic Property Setting is of particular interest, and that is configured here. Note that Subversion can read configuration information from several places, and you need to know which one takes priority. Refer to Configuration and the Windows Registry to find out more.
_svn instead of .svn directoriesVS.NET cuando se utiliza con proyectos web no puede manejar las carpetas .svn que Subversion utiliza para almacenar su información interna. Esto no es un error de Subversion. El error está en VS.NET y las extensiones de Frontpage que utiliza. Lea “Carpetas de trabajo de Subversion” para averiguar más sobre este problema.
Si desea cambiar el comportamiento de Subversion y TortoiseSVN, puede utilizar esta casilla para establecer la variable de entorno que lo controla.
Debería tener en cuenta que cambiar esta opción no convertirá automáticamente sus copias de trabajo para que usen ese nuevo directorio administrativo. Deberá hacerlo utilizando un script (vea nuestro FAQ) o simplemente obteniendo una copia de trabajo nueva.
Esta página le permite especificar qué entradas del menú contextual de TortoiseSVN se mostrarán en el menú contextual principal, y cuales aparecerán en el submenú TortoiseSVN. Por defecto, la mayoría de los ítems están desmarcados y aparecen en el submenú.
Hay un caso especial para Obtener bloqueo. Por supuesto puede promocionarlo al nivel superior utilizando la lista anterior, pero como la mayoría de ficheros no necesitan bloqueos esto molestaría. Sin embargo, un fichero con la propiedad svn:needs-lock necesita esta acción cada vez que se modifica, por lo que en ese caso sería útil tener la opción en el nivel superior. Activando esta casilla hace que cuando se selecciona un fichero que tenga establecida la propiedad svn:needs-lock, Obtener bloqueo se mostrará siempre en el nivel superior.
Este diálogo le permite configurar a su gusto algunos de los diálogos de TortoiseSVN.
Limits the number of log messages that TortoiseSVN fetches when you first select → Useful for slow server connections. You can always use or to get more messages.
Selecciona la fuente y el tamaño de la letra que se utiliza para mostrar el propio mensaje de registro en el panel del medio del diálogo Registro de Revisiones, y cuando se componen los mensajes de registro en el diálogo Confirmar.
Si los mensajes estándar largos toman mucho espacio en la pantalla utilice la forma corta.
TortoiseSVN puede cerrar automáticamente todos los diálogos de progreso cuando la acción se termina sin error. Esta configuración le permite seleccionar las condiciones para el cierre de diálogos. La configuración por defecto (recomendada) es Cerrar manualmente que le permite revisar todos los mensajes y comprobar qué ha pasado. Sin embargo, puede decidir que desea ignorar algunos tipos de mensajes y hacer que el cuadro de diálogo se cierre automáticamente si no hay cambios críticos.
Auto-cerrar si no hay fusiones, adiciones o eliminaciones significa que el diálogo de progreso se cerrará si ha habido actualizaciones simples, pero si algún cambio del repositorio se ha fusionado con los suyos, o si se añadió o borró algún fichero, el diálogo seguirá abierto. También seguirá abierto si hubo algún conflicto o error durante la operación.
Auto-cerrar si no hay fusiones, adiciones o eliminaciones para operaciones locales significa que el diálogo de progreso se cerrará igual que para Auto-cerrar si no hay fusiones, adiciones o eliminaciones, pero sólo para operaciones locales como añadir ficheros o revertir cambios. Para las operaciones remotas el diálogo seguirá abierto.
Auto-cerrar si no hay conflictos relaja el criterio y cerrará el diálogo incluso si ha habido fusiones, adiciones o borrados. Sin embargo, si hay algún conflicto o error, el diálogo continuará abierto.
Auto-cerrar si no hay errores siempre cierra el diálogo, incluso si hay conflictos. La única condición que deja el diálogo abierto es una condición de error, que ocurre cuando Subversion no puede terminar una tarea. Por ejemplo, una actualización falla si el servidor es inaccesible, o una confirmación falla cuando la copia de trabajo no está actualizada.
En el diálogo de fusión, el comportamiento por defecto es que la URL Desde: se mantenga entre fusiones. Sin embargo, algunas personas quieren realizar fusiones desde diferentes puntos en su jerarquía, y les resulta más cómodo empezar con la URl de la copia de trabajo actual. Esto puede luego cambiarse para referirse a una ruta paralela en otra rama.
Puede especificar la ruta por defecto para las obtenciones. Si mantiene todas sus obtenciones en un mismo lugar, es útil tener la unidad y la carpeta pre-rellenados para que así sólo tenga que añadir el nombre de la nueva carpeta al final.
También puede especificar la URL por defecto para las obtenciones. Si obtiene a menudo subprojectos de un projecto muy grante, puede ser útil tener la URL pre-rellenada de forma que sólo tenga que añadir el nombre del subprojecto al final.
Si se marca esta casilla (por defecto está marcada), entonces siempre que se muestre el estado de una carpeta sin versionar en los diálogos de Añadir, Confirmar o Comprobar Modificaciones, se muestran también sus ficheros y carpetas hijos. Si desmarca esta casilla, sólo se muestra la carpeta padre sin versionar, lo que reduce el desorden en esos diálogos. En ese caso, si selecciona una carpeta sin versionar para Añadir, se añadirá recursivamente.
The commit dialog includes a facility to parse the list of filenames being committed. When you type the first 3 letters of an item in the list, the auto-completion box pops up, and you can press Enter to complete the filename. Check the box to enable this feature.
The auto-completion parser can be quite slow if there are a lot of large files to check. This timeout stops the commit dialog being held up for too long. If you are missing important auto-completion information, you can extend the timeout.
tsvn:projectlanguage is setSi no desea utilizar el corrector ortográfico para todas las confirmaciones, marque esta casilla. Aun así, el corrector ortográfico se activará cuando las propiedades del proyecto así lo indiquen.
TortoiseSVN almacena los últimos 25 mensajes de registro que haya introducido para cada repositorio. Aquí puede parametrizar la cantidad. Si tiene muchos repositorios diferentes, puede querer reducirlo para evitar llenar su registro.
Cuando una confirmación falla por alguna razón (la copia de trabajo necesita actualizarse, un gancho pre-confirmación rechaza la confirmación, error de red, etc), puede seleccionar esta opción para mantener el diálogo de confirmación abierto y listo para intentarlo de nuevo. Sin embargo, debe tener en cuenta de que estoy puede provocar problemas. Si el fallo significa que debe actualizar su copia de trabajo, y esa actualización conlleva conflictos, deberá resolver esos conflictos primero.
El comportamiento normal en el diálogo de confirmación es que todos los ítems (versionados) modificados se seleccionen automáticamente para la confirmación. Si prefiere empezar sin nada seleccionado y seleccionar los ficheros para la confirmación manualmente, desmarque esta casilla.
El diálogo Comprobar Modificaciones comprueba la copia de trabajo por defecto, y sólo contacta con el repositorio cuando pulse el botón . Si siempre quiere comprobar el repositorios, puede utilizar esta opción para que esa acción siempre ocurra automáticamente.
Cuando selecciona uno o más ficheros y utiliza → para obtener un bloqueo en esos ficheros, en algunos projectos es costumbre escribir un mensaje de bloqueo explicando por qué ha bloqueado esos ficheros. Si no utiliza mensajes de bloqueo, puede desmarcar esta casilla para saltar este diálogo y bloquear los ficheros inmediatamente.
Si utiliza el comando bloquear en una carpeta, siempre se le mostrará el diálogo de bloqueo ya que también le ofrece la posibilidad de seleccionar qué ficheros bloquear.
Si su proyecto utiliza la propiedad tsvn:lockmsgminsize, verá el diálogo de bloqueo sin tener en cuenta esta opción ya que el proyecto necesita mensajes de bloqueo.
Este diálogo le permite configurar a su gusto los colores de los textos utilizados en los diálogos de TortoiseSVN.
Ha ocurrido un conflicto durante la actualización, o puede ocurrir durante la fusión. La actualización está obstruida por una carpeta o un fichero sin versionar que ya existe en su copia de trabajo, y tiene el mismo nombre que uno versionado.
Este color se utiliza también para los mensajes de error en los diálogos de progreso.
Ítems añadidos al repositorio.
Ítems borrados del repositorio, faltantes en la copia de trabajo, o borrados de la copia de trabajo y reemplazados con otro fichero del mismo nombre.
Cambios del repositorio que se han fusionado satisfactoriamente con su copia de trabajo sin crear ningún conflicto.
Añadido con historia, o rutas copiadas en el repositorio. También se utiliza en el diálogo de registro para las entradas que incluyen ítems copiados.
Un ítem que ha sido eliminado del repositorio.
Un ítem que ha sido añadido al repositorio, mediante una operación añadir, copiar o mover.
Un ítem que ha sido renombrado dentro del repositorio.
El ítem original ha sido borrado y un nuevo ítem con el mismo nombre le reemplaza.
This page allows you to choose the items for which TortoiseSVN will display icon overlays.
By default, overlay icons and context menus will appear in all open/save dialogs as well as in Windows Explorer. If you want them to appear only in Windows Explorer, check the Show overlays and context menu only in explorer box.
Los ítems ignorados y no versionados normalmente no tienen una sobreimpresión. Si desea mostrar una sobreimpresión en estos casos, simplemente marque las casillas.
You can also choose to mark folders as modified if they contain unversioned items. This could be useful for reminding you that you have created new files which are not yet versioned. This option is only available when you use the default status cache option (see below).
Since it takes quite a while to fetch the status of a working copy, TortoiseSVN uses a cache to store the status so the explorer doesn't get hogged too much when showing the overlays. You can choose which type of cache TortoiseSVN should use according to your system and working copy size here:
Caches all status information in a separate process (TSVNCache.exe). That process watches all drives for changes and fetches the status again if files inside a working copy get modified. The process runs with the least possible priority so other programs don't get hogged because of it. That also means that the status information is not real time but it can take a few seconds for the overlays to change.
Advantage: the overlays show the status recursively, i.e. if a file deep inside a working copy is modified, all folders up to the working copy root will also show the modified overlay. And since the process can send notifications to the shell, the overlays on the left tree view usually change too.
Desventaja: el proceso se ejecuta constantemente, incluso si no está trabajando en sus proyectos. Además utiliza alrededor de 10-50 MB de RAM dependiendo del número y tamaño de sus copias de trabajo.
El cacheo se realiza directamente dentro de la dll de la extensión del shell, pero sólo para la carpeta actualmente visible. Cada vez que navega a otra carpeta, se obtiene de nuevo la información de estado.
Advantage: needs only very little memory (around 1 MB of RAM) and can show the status in real time.
Desventaja: Dado que sólo se hace caché de una carpeta, las sobreimpresiones no muestran el estado recursivamente. Para copias de trabajo grandes, mostrar una carpeta en el explorador puede llevar más tiempo que con la caché por defecto. Además, la columna tipo-mime no está disponible.
Con esta configuración, TortoiseSVN no obtiene ningún estado en el Explorador. Por esa causa, los ficheros no tendrán sobreimpresiones y las carpetas sólo tendrán una sobreimpresión 'normal' si están versionadas. No se mostrará ninguna otra sobreimpresión, y tampoco estarán disponibles las columnas extra.
Ventaja: no utiliza memoria adicional en absoluto y no ralentiza de ninguna forma el Explorador mientras se navega.
Disadvantage: Status information of files and folders is not shown in Explorer. To see if your working copies are modified, you have to use the “Check for modifications” dialog.
The next group allows you to select which classes of storage should show overlays. By default, only hard drives are selected. You can even disable all icon overlays, but where's the fun in that?
Las unidades de red pueden ser muy lentas, así que por defecto no se muestran los iconos para las copias de trabajo que se encuentren en unidades de red.
Las unidades USB Flash parecen ser un caso especial en el que el tipo de unidad lo identifica el propio dispositivo. Algunas aparecen como discos duros, y otros como discos extraíbles.
Excluir Rutas se usa para decirle a TortoiseSVN en qué rutas no debe mostrar iconos sobreimpresionados ni columnas de estado. Esto es útil si tiene algunas copias de trabajo muy grandes que contienen únicamente librerías que no cambian en absoluto y por tanto no necesitan las sobreimpresiones. Por ejemplo:
f:\desarrollo\SVN\Subversion desabilitará las sobreimpresiones sólo en esa ruta concreta. Todavía podrá ver las sobreimpresiones en todos los ficheros y carpetas dentro de esa carpeta.
f:\desarrollo\SVN\Subversion* deshabilitará las sobreimpresiones en todos los ficheros y carpetas cuya ruta empiece por f:\desarrollo\SVN\Subversion. Esto significa que no verá sobreimpresiones para ningún fichero y carpetas debajo de esa ruta.
Lo mismo se aplica a Incluir rutas. Excepto que para esas rutas las sobreimpresiones se muestran incluso si están deshabilitadas para ese tipo de unidad en concreto, o por una ruta de exclusión especificada más arriba.
Los usuarios a veces preguntan cómo funcionan estas tres configuraciones, y la respuesta definitiva es:
si (la ruta está en la lista de inclusión) mostrar sobreimpresiones si (la ruta está en un tipo de unidad permitido) Y (la ruta no está en la lista de excluídos) mostrar sobreimpresiones
La lista de incluídos siempre hace que las sobreimpresiones se muestren. En otro caso, las sobreimpresiones se muestran para todos los tipos de unidad marcados excepto si la ruta se ha excluido.
TSVNCache.exe también utiliza estas rutas para restringir su escaneo. Si desea que sólo mire en determinadas carpetas, deshabilite todos los tipos de unidades e incluya sólo las carpetas que específicamente quiere que sean escaneadas.
SUBSTA menudo es conveniente utilizar una unidad SUBST para acceder a sus copias de trabajo, por ejemplo utilizando el comando
subst T: C:\TortoiseSVN\trunk\doc
Sin embargo esto puede ocasionar que las sobreimpresiones no se actualicen, ya que TSVNCache sólo recibirá una notificación cuando cambie un fichero, y eso es normalmente para la ruta original. Esto significa que sus sobreimpresiones sobre rutas subst puede que nunca se actualicen.
Una forma fácil de evitar esto es excluir de las sobreimpresiones la ruta original, de forma que las sobreimpresiones aparezcan ahora en la ruta subst.
A veces excluirá areas que contienen copias de trabajo, lo que evita que TSVNCache las escanee y monitorice los cambios, pero aún querrá una indicación visual de que dichas carpetas están versionadas. La casilla Mostrar carpetas excluidas como normales le permite hacer esto. Con esta opción, las carpetas versionadas en cualquier área excluída (tipo de unidad no marcada, o excluída explícitamente) se mostrarán como normal y como actualizadas, con una marca verde. Esto le recuerda que está viendo una copia de trabajo, incluso aunque las sobreimpresiones de las carpetas no sean correctas. Los ficheros no tendrán ninguna sobreimpresión. Tenga en cuenta que los menús contextuales seguirán funcionando, incluso aunque las sobreimpresiones no se muestren.
Como una excepción especial a esto, las unidades A: y B: nunca se consideran para la opción Mostrar carpetas excluidas como normales. El motivo es que Windows se ve obligado a mirar en la unidad, lo que puede resultar en un retraso de varios segundos cuando se inicia el Explorador, incluso si su PC no tiene una unidad de disquete.
También puede cambiar el conjunto de iconos de sobreimpresión al que más le guste. Tenga en cuenta que si cambia el conjunto de sobreimpresiones, puede tener que reiniciar su ordenador para que estos cambios surtan efecto.
Aquí puede configurar su servidor proxy, si necesita uno para atravesar el cortafuegos de su compañía.
If you need to set up per-repository proxy settings, you will need to use the Subversion servers file to configure this. Use to get there directly. Consult the Runtime Configuration Area for details on how to use this file.
También puede especificar qué programa debe utilizar TortoiseSVN para establecer una conexión segura a un repositorio svn+ssh. Le recomendamos que utilice TortoisePlink.exe. Ésta es una versión del popular programa Plink, y se incluye con TortoiseSVN, pero está compilado como una aplicación sin ventanas, por lo que no verá una ventana DOS molestando cada vez que se autentifica.
Debe especificar la ruta completa al ejecutable. En el caso de TortoisePlink.exe, esta es la carpeta bin estándar de TortoiseSVN. Utilice el botón para ayudarle a encontrarla.
Un efecto colateral de no tener una ventana es que no hay sitio para que vayan los mensajes de error, por lo que si la autentificación falla símplemente obtendrá un mensaje diciendo algo como “Unable to write to standard output” (“No se puede escribir en la salida estándar”). Por esta razón le recomendamos que primero pruebe su configuración con el Plink estándar. Cuando todo funcione, puede utilizar TortoisePlink con exáctamente los mismos parámetros.
TortoisePlink no tiene ninguna documentación propia porque es una variante menor de Plink. Averigue los parámetros de línea de comando desde el sitio web de PuTTY
Para evitar ser preguntado por una contraseña repetidamente, puede considerar utilizar una herramienta de caché de contraseñas como Pageant. También está disponible desde el sitio web de PuTTY.
Finalmente, configurar SSH en el servidor y los clientes en un proceso no-trivial que está fuera del alcance de este fichero de ayuda. Sin embargo, puede encontrar una guía en el FAQ de TortoiseSVN mostrado como Subversion/TortoiseSVN SSH How-To.
Aquí puede definir sus propios programas de diferencias/fusión que TortoiseSVN debería utilizar. La configuración básica es utilizar TortoiseMerge que se instala junto con TortoiseSVN.
En “Herramientas externas de diferencias/fusión” encontrará una lista de algunos de los programas externos de diferencias / fusión que la gente está utilizando con TortoiseSVN.
Se puede utilizar un programa externo de fierencias para comparar diferentes revisiones de ficheros. El programa externo necesitará obtener los nombres de los ficheros de la línea de comando, junto con otras opciones de la línea de comandos. TortoiseSVN usa sustitución de parámetros con prefijo %. Cuando se encuentra uno de estos se sustituirá por el valor apropiado. El orden de los parámetros dependerá del programa de Diferencias que utilice.
El fichero original sin sus cambios
La ventana de título para el fichero base
Su propio fichero, con sus cambios
El título de la ventana para su fichero
Los títulos de las ventanas no son nombres de ficheros puros. TortoiseSVN lo trata como un nombre para mostrar y crea los nombres según eso. Por ejemplo, si está haciendo diferencias entre un fichero en la revisión 123 y un fichero en su copia de trabajo, los nombres pueden ser nombre-de-fichero : revision 123 y nombre-de-fichero : copia de trabajo
For example, with ExamDiff Pro:
C:\Path-To\ExamDiff.exe %base %mine
or with KDiff3:
C:\Path-To\kdiff3.exe %base %mine --L1 %bname --L2 %yname
or with WinMerge:
C:\Path-To\WinMerge.exe -e -ub -dl %bname -dr %yname %base %mine
or with Araxis:
C:\Path-To\compare.exe /max /wait /title1:%bname /title2:%yname
%base %mine
If you use the svn:keywords property to expand keywords, and in particular the revision of a file, then there may be a difference between files which is purely due to the current value of the keyword. Also if you use svn:eol-style = native the BASE file will have pure LF line endings whereas your file will have CR-LF line endings. TortoiseSVN will normally hide these differences automatically by first parsing the BASE file to expand keywords and line endings before doing the diff operation. However, this can take a long time with large files. If Convert files when diffing against BASE is unchecked then TortoiseSVN will skip pre-processing the files.
También puede especificar una herramienta distinta de diferencias para utilizarla en las propiedades de Subversion. Dado que estas tienden a ser cadenas cortas de texto simple, puede que desee utilizar un visor más compacto.
If you have configured an alternate diff tool, you can access TortoiseMerge and the third party tool from the context menus. → uses the primary diff tool, and Shift+ → uses the secondary diff tool.
Un programa de fusión externo que se utiliza para resolver ficheros en conflicto. La sustitución de parámetros se utiliza de la misma forma que el Programa de Diferencias.
El fichero original sin ningún cambio, ni suyo ni de otros
La ventana de título para el fichero base
Su propio fichero, con sus cambios
El título de la ventana para su fichero
El fichero tal cual estaba en el repositorio
El título de la ventana del fichero en el repositorio
El fichero en conflicto, el resultado de la operación de fusión
El título de la ventana para el fichero fusionado
For example, with Perforce Merge:
C:\Path-To\P4Merge.exe %base %theirs %mine %merged
or with KDiff3:
C:\Path-To\kdiff3.exe %base %mine %theirs -o %merged
--L1 %bname --L2 %yname --L3 %tname
or with Araxis:
C:\Path-To\compare.exe /max /wait /3 /title1:%tname /title2:%bname
/title3:%yname %theirs %base %mine %merged /a2
or with WinMerge (2.8 or later):
C:\Path-To\WinMerge.exe %merged
In the advanced settings, you can define a different diff and merge program for every file extension. For instance you could associate Photoshop as the “Diff” Program for .jpg files :-) You can also associate the svn:mime-type property with a diff or merge program.
To associate using a file extension, you need to specify the extension. Use .bmp to describe Windows bitmap files. To associate using the svn:mime-type property, specify the mime type, including a slash, for example text/xml.
Un programa visor de ficheros diff unificado (ficheros de parche). No se necesitan parámetros. La opción Por defecto es para buscar un programa asociado a los ficheros .diff, y si no, para ficheros .txt. Si no tiene un visor para los ficheros .diff, seguramente obtendrá el Bloc de notas.
El programa Bloc de notas original de Windows no se comporta bien con los ficheros que no tienen terminaciones de líneas CR-LF estándar. Dado que la mayoría de ficheros diff unificados tienen terminaciones de líneas LF puras, no se ven bien en el Bloc de Notas. Sin embargo, puede descargar un reemplazo del Bloc de Notas Notepad2 que no sólo enseña las terminaciones de líneas correctamente, sino que también añade código de colores a las líneas añadidas y eliminadas.
Por su comodidad, TortoiseSVN almacena muchas de las opciones que utiliza, y recuerda dónde ha estado últimamente. Si desea limpiar esa caché de datos, puede hacerlo aquí.
Siempre que obtiene una copia de trabajo, fusione cambios o utilice el navegador de repositorios, TortoiseSVN guarda un registro de las últimas URLs utilizadas y las ofrece en una caja desplegable. A veces esa lista se llena de URLs desfasadas por lo que puede ser util limpiarla periódicamente.
If you want to remove a single item from one of the combo boxes you can do that in-place. Just click on the arrow to drop the combo box down, move the mouse over the item you want to remove and type Shift+Del.
TortoiseSVN almacena los mensajes de registro de confirmación que introduce. Estos se almacenan por cada repositorio, por lo que si accede a muchos repositorios la lista puede crecer bastante.
TortoiseSVN almacena en caché los mensajes de registro obtenidos por el diálogo Mostrar registro para ahorrar tiempo cuando muestre el registro la siguiente vez. Si alguien edita un mensaje de registro que ya estuviera en su caché, no verá el cambio hasta que limpie la caché. La caché de mensajes de registro se habilita en la pestaña Diálogos 1.
Muchos diálogos almacenan el tamaño y la posición en pantalla que tenían la última vez.
Cuando se autentifica con un servidor de Subversion, el usuario y la contraseña se cachean localmente para que no tenga que seguir introduciéndolos. Puede querer limpiar esto por razones de seguridad, o porque quiere acceder al repositorio bajo un nombre de usuario diferente ... ¿sabe John que está utilizando su PC?
If you want to clear authentication data for one particular server only, read “Autentificación” for instructions on how to find the cached data.
TortoiseSVN keeps a log of everything written to its progress dialogs. This can be useful when, for example, you want to check what happened in a recent update command.
The log file is limited in length and when it grows too big the oldest content is discarded. By default 4000 lines are kept, but you can customize that number.
From here you can view the log file content, and also clear it.
Este diálogo le permite configurar la característica de caché de registro de TortoiseSVN, que retiene una copia local de los mensajes de registro y rutas cambiadas para evitar descargas desde el servidor que llevan tiempo. Al utilizar la caché de registro acelerará dramáticamente el diálogo de registro y el diálogo de revisiones. Otra característica útil es que los mensajes de registro serán accesibles cuando esté desconectado.
Habilita la caché de registro siempre que se pidan datos de registro. Si se marca, los datos se recuperarán de la caché cuando estén disponibles allí, y cualquier mensaje que no esté en la caché se recuperará del servidor y se añadirá a la caché.
Si la caché se deshabilita, los datos siempre se recuperarán directamente del servidor y no se almacenarán localmente.
Si está trabajando sin conexión, o si el servidor del repositorio está caído, la caché de registro aún puede utilizarse para suministrar mensajes de registro que estén ya almacenados en la caché. Por supuesto la caché puede no estar actualizada, por lo que hay opciones que le permiten seleccionar cuándo debería utilizarse esta característica.
Cuando los datos de registro se toman de la caché sin contactar con el servidor, el diálogo que utiliza dichos mensajes mostrará el estado desconectado en su barra de título.
Cuando invoca al diálogo de registro normalmente querrá contactar con el servidor para comprobar si hay mensajes de registro nuevos. Si el tiempo límite establecido aquí es distinto de cero, sólo se contactará con el servidor cuando el tiempo límite haya pasado desde el último contacto. Esto puede reducir los viajes al servidor si abre el diálogo de registro frecuentemente y el servidor es lento, pero los datos mostrados pueden no estar completamente actualizados. Si desea utilizar esta característica le sugerimos un valor de compromiso de 300 (5 minutos).
Debajo de las configuraciones puede ver una lista de repositorios que están almacenados en la caché local, y el espacio utilizado para la caché. Si selecciona uno de los repositorios podrá utilizar los botones inferiores.
Pulse en el botón para ver estadísticas detalladas de una caché en concreto. Muchos de los campos mostrados aquí son de interés principalmente para los desarrolladores de TortoiseSVN, así que no se describen todos en detalle aquí.
La cantidad de memoria necesaria para dar servicio a esta caché.
El espacio de disco utilizado para la caché. Los datos están comprimidos, así que el uso de disco generalmente es bastante modesto.
Muestra si el repositorio estaba disponible la última vez que se utilizó la caché.
The last time the cache content was changed.
La última vez que se pidió la revisión HEAD al servidor.
El número de diferentes autores con mensajes almacenados en la caché.
El número de rutas mostradas, como las vería utilizando svn log -v.
El número de rangos de revisiones que no se han obtenido, simplemente por no han sido pedidos. Esta es una medida del número de huecos en la caché.
El número de revisión más alto almacenado en la caché.
El número de revisiones almacenados en la caché. Esta es otra medida de la completitud de la caché.
Pulse en para refrescar completamente la caché y rellenar cualquier hueco. Para un repositorio grande esto puede llevar mucho tiempo, pero es útil si va a desconectarse y quiere tener la mejor caché disponible.
Pulse en para exportar la caché completa como un conjunto de ficheros CSV. Esto puede ser útil si desea procesar los datos de registro utilizando un programa externo, aunque es útil principalmente para los desarrolladores.
Pulse en para eliminar todos los datos de la caché de los repositorios seleccionados. Esto no deshabilita la caché para el repositorio, por lo que la próxima vez que pida datos de registro se creará una nueva caché.
This dialog allows you to set up hook scripts which will be executed automatically when certain Subversion actions are performed. As opposed to the hook scripts explained in “Scripts gancho”, these scripts are executed locally on the client.
Una aplicación para este tipo de ganchos podría ser una llamada a un programa como SubWCRev.exe para actualizar los números de versión tras una confirmación, y quizás para provocar una recompilación.
Por varios motivos de seguridad e implementación, los scripts gancho se definen localmente en la máquina, en vez de ser propiedades de proyecto. Así define lo que ocurre, sin importar lo que otros confirmen en el repositorio. Por supuesto siempre puede elegir llamar a un script que ya esté bajo control de versiones.
Para añadir un nuevo script gancho, simplemente pulse y rellene los detalles.
Actualmente hay seis tipos de scripts ganchos disponibles
Called before the commit dialog is shown. You might want to use this if the hook modifies a versioned file and affects the list of files that need to be committed and/or commit message.
Llamado después de que el usuario hace click en el botón en el diálogo de confirmación, y antes de que comience el proceso de confirmación.
Llamado antes de que termine la confirmación (sea satisfactoria o no).
Llamado antes de que se muestre el diálogo actualizar-a-la-revisión.
Llamado antes de que comience la actualización de Subversion.
Llamado después de que termine la actualización (sea satisfactoria o no).
Un gancho se define para una ruta de copia de trabajo en particular. Sólo necesita especificar la ruta de más alto nivel; si realiza una operación en una subcarpeta, TortoiseSVN automáticamente buscará hacia arriba una ruta que concuerde.
Después debe especificar la línea de comandos a ejecutar, comenzando con la ruta del script gancho o el ejecutable. Esto puede ser un fichero batch, un fichero ejecutable o cualquier otro fichero que tenga una asociación de fichero de Windows válida, como por ejemplo un script Perl.
The command line includes several parameters which get filled in by TortoiseSVN. The parameters available depend upon which hook is called. Each hook has its own parameters which are passed in the following order:
PATHMESSAGEFILECWD
PATHDEPTHMESSAGEFILECWD
PATHDEPTHMESSAGEFILEREVISIONERRORCWD
PATHCWD
PATHDEPTHREVISIONCWD
PATHDEPTHREVISIONERRORCWD
The meaning of each of these parameters is described here:
Una ruta a un fichero temporal que contiene todas las rutas para la operación que se ha iniciado. Cada ruta aparece en una línea distinta en el fichero temporal.
La profundidad a la que se realiza la confirmación o actualización.
Los valores posibles son:
svn_depth_unknown
svn_depth_exclude
svn_depth_empty
svn_depth_files
svn_depth_immediates
svn_depth_infinity
Ruta a un fichero que contiene el mensaje de registro de la confirmación. El fichero contiene el texto con la codificación UTF-8. Tras la ejecución con éxito del gancho start-commit, el mensaje de registro se vuelve a leer, dándole al gancho una oportunidad para modificarlo.
The repository revision to which the update should be done or after a commit completes.