svnEmpezando con svn


Observaciones

Apache Subversion (SVN) es un sistema de control de versiones de código abierto, universal y centralizado. Subversion es actualmente un proyecto bajo Apache Software Foundation (ASF) y tiene licencia bajo la Licencia Apache, Versión 2.0 .

Subversion está diseñado para administrar y controlar archivos y directorios, y hacer un seguimiento de los cambios realizados en ellos; Actúa como una máquina de tiempo confiable y una herramienta de gestión para los proyectos desarrollados en colaboración. Puede responder fácilmente a las preguntas estándar que cualquier sistema de control de versiones debe responder de manera confiable. Por ejemplo,

  • ¿Cómo fue el proyecto / archivo FOO el 12/12/2012?
  • ¿Qué cambios introdujo USERNAME o el 20/12/2012?
  • ¿Quién modificó la cadena en particular desde la última revisión?
  • y mucho, mucho más.

Versiones

Versión ¿Qué hay de nuevo? Fecha de lanzamiento
1.9.x Numerosas mejoras de usabilidad y rendimiento. 2015-08-05
1.8.x Rastreo mejorado de nombres, combinaciones de reintegración automática, propiedades heredadas de la versión, herramienta de resolución de conflictos incorporada 2013-06-18
1.7.x Reescritura completa de la biblioteca de copia de trabajo, uso mejorado del protocolo HTTP 2011-10-11
1.6.x Identificación de conflictos de árbol, resolución de conflictos interactiva mejorada, soporte de URL relativo a la repo 2009-03-20
1.5.x Seguimiento de fusión y ramificación ( svn:mergeinfo ), resolución de conflictos de archivos interactivos, svn:mergeinfo dispersas, svn:externals sintaxis svn:externals 2008-06-19
1.4.x Herramienta svnsync para la replicación del repositorio, biblioteca de copia de trabajo nueva y mejorada 2006-09-10
1.3.x Registro de alto nivel de las operaciones del usuario en el lado del servidor, mejoras de rendimiento 2005-12-30
1.2.x Soporte para modelo de bloqueo-modificación-desbloqueo (es decir, bloqueo), DAV autoversioning, FSFS se utiliza de forma predeterminada para los nuevos repositorios 2005-05-21
1.1.x Nuevo backend del repositorio (FSFS), versiones de enlaces simbólicos 2004-09-29
1.0.x Lanzamiento público inicial 2004-02-23

Apache Subversion 1.9.x es actualmente la última y mejor versión de SVN que es totalmente compatible. Subversion 1.8.x es parcialmente compatible. Subversion 1.7.xy versiones anteriores ya no son compatibles.

Instalación y configuración inicial

Instale el cliente svn para comenzar a colaborar en el proyecto que utiliza Subversion como su sistema de control de versiones.

Para instalar Subversion, puede compilarlo usted mismo a partir de una versión de código fuente o descargar un paquete binario precompilado para su sistema operativo. La lista de sitios donde puede obtener un cliente compilado de Subversion ( svn ) para varios sistemas operativos está disponible en la página oficial de paquetes binarios . Si tienes ganas de compilar el software por ti mismo, toma la fuente en la página del Código fuente .

Con Subversion, no está limitado a usar solo el cliente de línea de comandos svn estándar. Hay algunos clientes gráficos importantes de Subversion para varios sistemas operativos y la mayoría de los IDE en la actualidad ofrecen una integración robusta con SVN de forma inmediata o mediante complementos. Para ver la lista de clientes gráficos, consulte la página de Wikipedia: https://en.wikipedia.org/wiki/Comparison_of_Subversion_clients .

Inmediatamente después de instalar el cliente, debería poder ejecutarlo emitiendo el comando svn . Deberías ver lo siguiente:

$ svn
Type 'svn help' for usage.
 

Todo está casi listo. Ahora debe crear un espacio de trabajo local llamado copia de trabajo que se conectará al repositorio central remoto. En otras palabras, usted va a retirar una copia de trabajo . Con la ayuda de la copia de trabajo, operará con los datos versionados y podrá publicar sus cambios (llamados confirmación en SVN) para que otros que trabajen en el mismo proyecto puedan verlos y beneficiarse de sus cambios. Para recuperar posteriormente los cambios futuros realizados por otros usuarios desde el repositorio, debe actualizar su copia de trabajo . Estas operaciones básicas están cubiertas en otros ejemplos.

Revisando una copia de trabajo

Para comenzar a realizar modificaciones en los datos del proyecto, debe obtener una copia local del proyecto versionado. Use el cliente de línea de comando svn o su cliente SVN favorito (TortoiseSVN, por ejemplo). Su copia local del proyecto se llama una copia de trabajo en Subversion y la obtiene al emitir el comando svn checkout <URL> donde <URL> es una URL del repositorio. p.ej

$ svn checkout https://svn.example.com/svn/MyRepo/MyProject/trunk
 

Alternativamente, puede usar svn co <URL> como una taquigrafía para sacar una copia local.

Como resultado, obtendrá una copia de trabajo de /trunk de un proyecto llamado MyProject que reside en el repositorio MyRepo. La copia de trabajo se ubicará en un directorio llamado trunk en su computadora en relación con el directorio en el que emitió el comando.

Si desea tener un nombre diferente para su copia de trabajo, puede agregarlo como parámetro al final del comando. p.ej

$ svn checkout https://svn.example.com/svn/MyRepo/MyProject/trunk MyProjectSource
 

Esto creará una copia de trabajo llamada MyProjectSource .

Tenga en cuenta que en lugar de revisar el tronco, puede revisar algunas sucursales, estanterías privadas o una etiqueta (asumiendo que ya existen en el repositorio); puede tener un número ilimitado de copias de trabajo locales en su máquina.

También puede obtener la copia de trabajo de todo el repositorio MyRepo. Pero debes abstenerte de hacerlo. En general, no necesita tener una copia de trabajo de todo el repositorio para su trabajo porque su copia de trabajo se puede cambiar instantáneamente a otra rama / etiqueta / lo que sea de desarrollo. Además, el repositorio de Subversion puede contener una serie de (des) proyectos relacionados y es mejor tener una copia de trabajo dedicada para cada uno de ellos, no una sola copia de trabajo para todos los proyectos.

Revisando una copia de trabajo en una revisión específica

Para obtener la versión 5394 use:

svn co --revision r5394 https://svn.example.com/svn/MyRepo/MyProject/trunk
 

O la versión más corta:

svn co -r 5394 https://svn.example.com/svn/MyRepo/MyProject/trunk
 

O mediante el uso de revisiones vinculadas:

svn co https://svn.example.com/svn/MyRepo/MyProject/trunk@5394
 

Si ya está desprotegido, puede usar el comando de update para mover a una revisión en particular, haciendo lo siguiente:

svn up -rXXX
 

Confirmando tus cambios locales en el repositorio

Para publicar los cambios realizados en su copia de trabajo, ejecute el comando svn commit .

IMPORTANTE: ¡ Revisa tus cambios antes de cometerlos! Utilice svn status y svn diff para revisar los cambios. Además, asegúrese de que está en la ruta correcta antes de realizar una confirmación. Si actualizó muchos archivos en varios directorios, debería estar en el nivel adecuado para incluirlos debajo de su ubicación.

Aquí hay un ejemplo del comando commit:

svn commit -m "My Descriptive Log Message"
 

Alternativamente, svn ci es la abreviatura de svn commit

Note la opción -m (--message) . Los buenos mensajes de confirmación ayudan a otros a comprender por qué se realizó una confirmación. Además, en el lado del servidor es posible imponer mensajes no vacíos , e incluso imponer que cada mensaje de confirmación menciona un ticket existente en su sistema de seguimiento de errores.

Creación y aplicación de parches.

Un parche es un archivo que muestra las diferencias entre dos revisiones o entre su repositorio local y la última revisión a la que apunta su repositorio.

Para compartir o guardar un parche de sus cambios locales no confirmados para revisión por pares o para aplicar más tarde, haga lo siguiente:

svn diff > new-feature.patch
 

Para obtener un parche de las diferencias entre dos revisiones:

svn diff -r NEWER_REVISION:OLDER_REVISION > feature.patch
 

Para aplicar un parche, ejecute:

svn patch new-feature.patch
 

Para aplicar el parche correctamente, debe ejecutar el comando desde la misma ruta donde se creó el parche.

Exportando los datos versionados (descarga plana)

Si desea obtener los datos del proyecto versionado, pero no necesita ninguna de las capacidades de control de versión que ofrece Subversion, puede ejecutar el comando svn export <URL> . Aquí hay un ejemplo:

$ svn export https://svn.example.com/svn/MyRepo/MyProject/trunk
 

Como resultado, obtendrá la exportación de datos del proyecto, pero a diferencia de una copia de trabajo, no podrá ejecutar comandos svn en él. La exportación es solo una simple descarga de los datos.

Si algún tiempo después desea convertir los datos descargados a una copia de trabajo completamente funcional, ejecute svn checkout <URL> al directorio donde ejecutó la exportación.

Haciendo cambios en su copia de trabajo local

La copia de trabajo (WC) es su espacio de trabajo local y privado que utiliza para interactuar con el repositorio central de Subversion. Utiliza la copia de trabajo para modificar el contenido de su proyecto y obtener los cambios confirmados por otros.

La copia de trabajo contiene los datos de su proyecto y se ve y actúa como un directorio regular en su sistema de archivos local, pero con una gran diferencia: la copia de trabajo rastrea el estado y los cambios de los archivos y directorios. Puede pensar en la copia de trabajo como en un directorio normal con un sabor de control de versión agregado por un directorio de metadatos .svn oculto en su raíz.

La mayoría de las veces, va a realizar modificaciones a los datos del proyecto modificando el contenido de la copia de trabajo. Tan pronto como esté satisfecho con las modificaciones y las haya revisado a fondo, estará listo para publicarlas en el repositorio central.

Puede realizar cualquier acción con los datos de su proyecto dentro de la copia de trabajo, pero las operaciones que implican copiar, mover, renombrar y eliminar deben realizarse utilizando los comandos svn correspondientes:

  • Modificando archivos existentes . Modifique los archivos como lo hace normalmente usando su procesador de texto favorito, editor de gráficos, software de edición de audio, IDE, etc. Tan pronto como guarde los cambios en el disco, Subversion los reconocerá automáticamente.

  • Añadiendo nuevos archivos . Ponga los archivos nuevos en la copia de trabajo y Subversion los reconocerá como sin versión . No iniciará automáticamente el seguimiento de los nuevos archivos a menos que ejecute el comando svn add :

    svn add foo.cs
     
  • Mover archivos y directorios . Mueve archivos y directorios usando el comando svn move :

    svn move foo.cs bar.cs
     
  • Renombrando archivos y directorios . Renombra archivos y directorios usando el comando svn rename :

    svn rename foo.cs bar.cs
     

    NOTA: el comando svn rename es un alias del comando svn move .

  • Copiando archivos y directorios . Copie archivos y directorios usando el comando svn copy :

    svn copy foo.cs bar.cs
     
  • Eliminando archivos y directorios . Eliminar archivos y directorios usando el comando svn delete :

    svn delete foo.cs
     
  • Comprobación del estado de los archivos y directorios en la copia de trabajo . Revise sus cambios usando el comando svn status (o svn st para abreviar):

    svn status
     

    IMPORTANTE: siempre revise sus cambios antes de cometerlos. Esto le ayudará a evitar cometer cambios innecesarios o irrelevantes.

  • Revertir los cambios . Revierta sus cambios usando el comando svn revert :

    svn revert foo.c
     
  • Revirtiendo todos los cambios : Desde la raíz del repositorio:

    svn revert -R .
     

    IMPORTANTE: Los cambios no comprometidos revertidos se perderán para siempre. No podrás recuperar los cambios revertidos. Utilice svn revert con precaución! Si desea mantener los cambios pero necesita revertir, guárdelos en un parche. Vea el ejemplo de cómo crear y aplicar un parche.

Revertir o deshacer un archivo

Para restaurar un archivo a la última versión de svn actualizada, es decir, deshacer los cambios locales, puede usar revert :

svn revert file
 

Para restaurar un archivo a una versión anterior (revisión XXX) use la update :

svn update -r XXX file
 

Advertencia : en ambos casos perderá cualquier cambio local en el archivo porque se sobrescribirá.


Para ver solo la versión anterior de un archivo usa cat :

svn cat -r XXX file
 

Y para ver las diferencias con su versión local del archivo:

svn diff -r XXX file
 

Revisando los logs

Ejecutar svn log le mostrará todos los mensajes de confirmación, probablemente desee revisar solo ciertas revisiones.

  • Ver las n revisiones más recientes:

    svn log -n

  • Ver una revisión específica:

    svn log -c rXXX

  • Ver los caminos afectados:

    svn log -v -c rXXX

Actualizando una copia de trabajo

No eres la única persona que trabaja en el proyecto, ¿verdad? Esto significa que sus colegas también están haciendo modificaciones a los datos del proyecto. Para mantenerse actualizado y obtener las modificaciones confirmadas por otros, debe ejecutar el comando svn update en su copia de trabajo. Como resultado, su copia de trabajo se sincronizará con el repositorio y descargará los cambios realizados por sus colegas.

Shorthand para svn update is svn up .

Es una regla ejecutar la svn update antes de confirmar sus cambios.

Usando un repositorio protegido por contraseña

Se puede configurar un repositorio de Subversion para que ciertos contenidos o comandos solo sean accesibles para ciertos usuarios. Para acceder a este contenido restringido, deberá especificar un nombre de usuario y una contraseña.

Su nombre de usuario y contraseña se pueden especificar directamente como parte del comando:

$ svn checkout https://svn.example.com/MyRepo/trunk --username JoeUser --password topsecret
 

Desafortunadamente, esto hace que su contraseña aparezca en texto sin formato en la consola. Para evitar este posible problema de seguridad, especifique un nombre de usuario pero no una contraseña. Al hacer esto aparecerá un mensaje de contraseña, permitiéndole ingresar su contraseña sin exponerla:

$ svn checkout https://svn.example.com/MyRepo/trunk --username JoeUser
Password for 'JoeUser':
 

Al no proporcionar información de autenticación, Subversion le solicita el nombre de usuario y la contraseña:

$ svn checkout https://svn.example.com/MyRepo/trunk
Username:  JoeUser
Password for 'JoeUser':
 

Si bien el primer método es menos seguro, se lo ve con frecuencia en scripts automatizados, ya que es difícil para muchos tipos de scripts proporcionar información a un mensaje interactivo.

Nota : los comandos que solo operan en su copia de trabajo (como revert o status ) nunca requerirán una contraseña, solo los comandos que requieren comunicación con el servidor de repositorio.