Subversión

subversión
Tipo de sistema de control de versiones centralizado [d] , proyecto Apache Foundation [d] ysoftware de código abierto
Autor Red de colaboración [d]
Desarrollador Fundación de software Apache
Escrito en C [4] [5] , Python [4] , C++ [6] [7] y Java [6] [7]
Sistema operativo GNU/Linux [8] , Microsoft Windows [8] , macOS [8] y BSD [8]
Primera edición 20 de octubre de 2000 [1]
ultima versión
Formatos de archivo legibles Formato de volcado SVN (v1) [d] , formato de volcado SVN (v2) [d] , formato de volcado SVN (v3) [d] y formato de volcado SVN (genérico) [d]
Formatos de archivo generados Formato de volcado SVN (v1) [d] , formato de volcado SVN (v2) [d] , formato de volcado SVN (v3) [d] y formato de volcado SVN (genérico) [d]
Licencia Licencia Apache 2.0 [9]
Sitio web subversion.apache.org
 Archivos multimedia en Wikimedia Commons

Subversion [10] (también conocido como " SVN " [11] ) es un sistema de control de versiones centralizado gratuito lanzado oficialmente en 2004 por CollabNet . Desde 2010, Subversion ha sido un proyecto de Apache Software Foundation y se llama oficialmente Apache Subversion ( marca registrada [12] ).

El objetivo del proyecto al comienzo del desarrollo era reemplazar [13] [14] el Sistema de Versiones Concurrentes (CVS) entonces extendido , que ahora se considera obsoleto [15] [16] [17] . Subversion implementa todas las características principales de CVS y está libre de algunas de las deficiencias de este último.

Algunas comunidades de código abierto todavía utilizan Subversion (incluidas las que antes usaban CVS ), pero casi todos los proyectos importantes se han trasladado a DVCS . Entre los últimos usuarios de Subversion entre los proyectos abiertos se mantiene FreeBSD , pero también anunciaron una transición a Git [18] , y, por ejemplo, Free Pascal . Subversion ha sido utilizado durante bastante tiempo por proyectos tan conocidos como Apache , GCC , FFmpeg , LLVM . Subversion también se usa en proyectos privados y en el mundo corporativo, pero es difícil medir cuán ampliamente. El alojamiento de Subversion , incluso para proyectos de código abierto, también lo proporcionan los proyectos de alojamiento populares SourceForge.net , Tigris.org , Google Code y BountySource .

En 2007, Forrester , una empresa de análisis , calificó a Subversion como "el líder único en la categoría de gestión de configuración de software independiente (SCM) y un gran contribuyente en la categoría de gestión de cambios y configuración de software (SCCM)" al comparar las ventajas y desventajas de varios sistemas _ [19]

Según las estadísticas sobre el uso de paquetes de Linux , distribuciones Debian [20] y Ubuntu [21] , el número de usuarios activos de Subversion alcanzó su punto máximo alrededor de 2010 y ha comenzado a disminuir desde 2016. Sin embargo, todavía hay más proyectos que usan Subversion que CVS , Mercurial y Bazaar (hasta agosto de 2019 ).

La documentación oficial está posicionada [22] por el libro publicado por O'Reilly Media , que está disponible gratuitamente [23] y los autores lo agregan a medida que se lanzan nuevas versiones de SVN. También publica sus traducciones a varios idiomas, incluido el ruso, pero a pesar de que las versiones en inglés del libro ahora describen las versiones 1.8 y 1.7, solo hay libros en ruso que describen versiones hasta la 1.4 inclusive [24] .

Historia

El desarrollo de Subversion comenzó en el año 2000 por iniciativa y con el apoyo financiero de CollabNet. Los iniciadores del proyecto querían crear un sistema de control de versiones gratuito , básicamente similar a CVS, pero sin sus errores e inconvenientes . En ese momento no había mejores programas de esta clase con licencia libre, CVS era el estándar de facto entre los desarrolladores de software libre. Al elegirlo como línea de base, los desarrolladores de Subversion esperaban simplificar el desarrollo aprovechando conceptos ya probados, mientras que al mismo tiempo facilitaba la migración de muchos usuarios de CVS al nuevo sistema. [25]

Principales acontecimientos en la historia del desarrollo de Subversion.

Información general

Características

Modelo de trabajo

Subversion es un sistema centralizado (a diferencia de los sistemas distribuidos como Git o Mercurial ), lo que significa que los datos se almacenan en un único repositorio. El repositorio se puede ubicar en un disco local o en un servidor de red .

Trabajar en Subversion no es muy diferente de trabajar en otros sistemas de control de versiones centralizados. Los clientes copian archivos del almacén para crear copias de trabajo locales, luego realizan cambios en las copias de trabajo y confirman esos cambios en el almacén. Varios clientes pueden acceder al almacenamiento al mismo tiempo. Subversion utiliza principalmente el modelo copiar-modificar-fusionar para colaborar en archivos . Además, para los archivos que no se pueden fusionar (varios formatos de archivos binarios), puede usar el modelo de bloqueo, modificación y desbloqueo .

Al guardar nuevas versiones, se utiliza la compresión delta : el sistema encuentra diferencias entre la nueva versión y la anterior y las escribe solo, evitando la duplicación de datos.

Cuando se utiliza el acceso WebDAV, también se admite el control de versiones transparente: si cualquier cliente WebDAV se abre para escribir y luego guarda un archivo almacenado en un recurso compartido de red, se crea automáticamente una nueva versión.

Tipos de repositorio

Subversion ofrece dos opciones para organizar repositorios [40] . Los repositorios del primer tipo se utilizan para almacenar una base de datos basada en Berkeley DB , los repositorios del segundo tipo son archivos ordinarios de un formato especial (el acceso a los datos se organiza utilizando sus propias bibliotecas, sin utilizar bases de datos de terceros). Los desarrolladores de Subversion a menudo se refieren al almacenamiento como un "sistema de archivos", razón por la cual el segundo tipo se llama FSFS, lo que significa un sistema de archivos (versionado) ( English  File System ) encima de un sistema de archivos (regular).

Ambos tipos de repositorios brindan suficiente confiabilidad cuando se organizan adecuadamente [41] (Berkeley DB usa bloqueos de archivos, por lo que no se puede usar en algunos sistemas de archivos de red que no admiten bloqueos), cada uno de ellos tiene sus propias ventajas y desventajas. Se cree que FSFS es más fácil de configurar correctamente, requiere menos atención por parte del administrador. Además, antes de la versión 1.4, los repositorios que usaban Berkeley DB podían, bajo ciertas condiciones, terminar en el  llamado estado de cuña ; se requirió la intervención del administrador para restaurar su funcionalidad.

A partir de la versión 1.2, FSFS se usa de forma predeterminada para nuevos almacenamientos. Con la versión 1.8, el uso de Berkeley DB quedó obsoleto [37] . Es posible que las nuevas funciones que se agregarán en versiones futuras no funcionen en servidores que utilizan Berkeley DB. El soporte para Berkeley DB puede suspenderse en el futuro.

Acceso al repositorio

Subversion proporciona las siguientes formas de acceder a un repositorio:

Todos estos métodos se pueden utilizar para trabajar con ambos tipos de repositorios (FSFS y Berkeley DB). Se pueden usar diferentes métodos al mismo tiempo para acceder al mismo repositorio.

Conceptos básicos

Sistema de archivos

Desde la perspectiva del usuario, el repositorio de Subversion es un sistema de archivos "bidimensional" . Los objetos de un repositorio ( archivos y directorios ) se identifican mediante dos " coordenadas ": un nombre y un número de revisión . En otras palabras, el repositorio es una matriz de instantáneas (revisiones) de un árbol de archivos y directorios, indexados por el número de revisión. Cada una de estas instantáneas es un sistema de archivos normal (unidimensional).

Si es necesario indicar una revisión específica de un objeto, se utiliza una entrada del formulario: имя@ревизия, por ejemplo, /main.c@29 el archivo /main.c en la revisión 29. Tal indicación de la revisión utilizada para aclarar el nombre se denomina peg revisión _ 

En la fig. 1 muestra una representación gráfica del sistema de archivos: el eje vertical corresponde al conjunto de nombres, el eje horizontal corresponde al conjunto de revisiones.

Nombres de archivo

El nombre de un objeto del sistema de archivos en Subversion se forma de acuerdo con las mismas reglas que en los sistemas operativos similares a UNIX: solo hay un directorio raíz, los elementos de la ruta están separados por una barra inclinada ("/"). Los objetos del sistema de archivos son archivos y directorios (así como enlaces simbólicos , que se emulan desde archivos normales configurando el atributo svn:special).

Números de revisión

El número de revisión en Subversion es un número natural (o 0 para la primera revisión) que indica el número de estado del repositorio a medida que cambian los datos que contiene. Cada confirmación exitosa genera exactamente una nueva revisión en el repositorio, por lo que la N- ésima revisión es el estado del repositorio después de la N- ésima confirmación.

En Subversion, una revisión caracteriza el estado no de un solo archivo, sino del repositorio completo como un todo. Por ejemplo, la revisión 32 (punteada en la figura) es el estado de cuatro archivos y dos directorios que existían en el repositorio en ese momento.

El número de revisión es análogo al tiempo en el sentido de que los números de revisión más bajos corresponden a estados anteriores del repositorio y los números de revisión más altos corresponden a estados posteriores.

  • El número mínimo de revisión 0 (cero) corresponde al estado inicial del repositorio, cuando aún no se han confirmado cambios. En la revisión cero, el repositorio contiene solo un directorio raíz vacío.
  • El número de revisión máximo corresponde al estado más reciente del repositorio, es decir, el estado posterior a la confirmación de la última edición. En lugar de especificar el último número de revisión, puede usar la palabra clave HEAD(revisión principal); esto es útil porque el número de revisión principal se incrementa con cada confirmación.

El número de revisión se puede considerar como una especie de marca de tiempo en el historial del repositorio. Además, cada número de revisión tiene un valor absoluto asociado con el momento en que se realizó la revisión ( propiedad svn:date ). Sin embargo, especificar el número de revisión es más conveniente que especificar la hora, ya que no hay confusión con las zonas horarias, la entrada del número es más corta y el número de revisión no se puede cambiar.

Revisiones operativas y básicas

El número de revisión se utiliza en dos contextos diferentes :

  • revisión operativa ( revisión operativa inglesa  );
  • revisión del núcleo ( eng.  peg revision ).

Una revisión se denomina operativa si especifica la revisión o el rango de revisiones a las que se aplicará la operación , por ejemplo:

svn log -r 199:230 http://alguna.ruta

En este ejemplo, el comando se ejecuta svn logpara un rango de revisiones 199:230, que es el rango de revisiones en línea.

Sin embargo, especificar solo el nombre del archivo y la revisión en línea a veces puede apuntar de manera ambigua a los objetos del repositorio. Por ejemplo, en la situación mostrada en la Fig. 2, existe una ambigüedad al ejecutar el siguiente comando:

svn log -r 29:33 http://alguna.ruta/bar.txt

El comando especifica un rango de revisiones en línea ( 29:33), pero las áreas resaltadas en azul y verde en la figura pueden considerarse igualmente como el historial del archivo /bar.txten el rango de revisión 29:33. En tales casos, también es necesario especificar la revisión del pivote para resolver la ambigüedad. La revisión principal es el número de revisión especificado además de la URL del objeto del sistema de archivos (usando la URL@ревизияnotación " "). El nombre proviene de la palabra inglesa peg , que se puede traducir como "rod" o "peg". La revisión pivote marca la cadena de estados a la que pertenece el par especificado URL@ревизияy, por lo tanto, identifica de forma única el objeto del repositorio al que se aplicará el comando. En el ejemplo a continuación, el primer comando imprimirá la historia resaltada en azul en la figura y el segundo comando imprimirá la historia resaltada en verde:

svn log -r 29:33 http://alguna.ruta/archivo.txt@32 svn log -r 29:33 http://alguna.ruta/bar.txt@34

El último estado del objeto de interés debe especificarse como la revisión principal. La razón de esto es que la cadena de estado se rastrea de forma única "hacia atrás" pero no "hacia adelante". Por ejemplo, la URL con la revisión dinámica http://some.path/foo.txt@31 pertenece a dos cadenas de estado (resaltadas en verde y gris respectivamente). De estas dos cadenas, la URL especificada se dirige a la cadena gris, es decir, cuando se avanza "hacia adelante" desde la revisión principal, se ignoran las operaciones de copia.

Operaciones en el sistema de archivos

Las siguientes operaciones se pueden realizar en los objetos del sistema de archivos en el repositorio de Subversion [42] (consulte la Figura 1). Los corchetes indican el nombre abreviado de la operación en la notación del comando svn status.

  • Apéndice (A). Adición de un objeto al sistema de archivos. El objeto agregado no tiene historial de revisión. Ejemplo en la imagen:
  • El archivo /main.cse agregó en la revisión 27.
  • Modificación (M). Modificar un objeto, como cambiar el contenido de un archivo o cambiar las propiedades de un archivo o directorio. Ejemplo en la imagen:
  • El archivo /main.cfue modificado en la revisión 28.
  • Eliminación (D). Eliminación de un archivo de la cabecera y revisiones posteriores. En este caso, el archivo permanece en revisiones anteriores. Ejemplo en la imagen:
  • El archivo /main.cse eliminó en la revisión 30.
  • Suma con historia (A+). Representa la copia de un objeto dentro del sistema de archivos de almacenamiento, es decir, el objeto se имя_источника@ревизия_источникаcopia en un archivo имя_копии@HEAD. El objeto copiado hereda el historial de revisiones desde la fuente hasta el momento de la copia (la herencia del historial se muestra en la figura mediante enlaces punteados). Ejemplos en la figura:
  • en la revisión 29 el directorio /tags/R1fue copiado del directorio /trunk@27;
  • en la revisión 31, el archivo /main.cfue copiado de /main.c@29, es decir, de una revisión anterior del mismo, por lo tanto, el archivo previamente eliminado (en la revisión 30) fue restaurado manteniendo el historial de revisiones.
  • Reemplazo (R+). Ocurre en el caso en que en una revisión se realizó tanto la eliminación de un objeto (D) como la adición con historial (A+) de un objeto con el mismo nombre. Aunque el nombre permanece sin cambios durante la operación de reemplazo, Subversion trata el objeto antes y después del reemplazo como dos objetos diferentes con diferentes historiales de revisión (el historial del antiguo termina en el punto del reemplazo, el historial del nuevo se hereda del copia la fuente y continúa hacia adelante). Ejemplo en la imagen:
  • en la revisión 30 el archivo /file.txtfue reemplazado por : el archivo antiguo fue /file.txtborrado y un nuevo archivo con el mismo nombre fue copiado del /bar.txt@29.

Confirmando cambios

Copia de trabajo

Una copia de trabajo es una copia local de un fragmento de datos del repositorio creado por el programa cliente de Subversion que contiene, además de los datos en sí, alguna información de servicio (directorios ocultos denominados .svn). La información del servicio es necesaria para el correcto funcionamiento de la copia de trabajo; no se puede cambiar nada en los datos de servicio. La unidad de datos más pequeña que se puede recuperar de un repositorio como copia de trabajo es un directorio. Es posible que el contenido de un directorio no se extraiga por completo: por ejemplo, se pueden excluir archivos o subdirectorios individuales. Sin embargo, no es posible extraer un solo archivo del almacén como copia de trabajo.

Cualquier subdirectorio de una copia de trabajo de Subversion 1.6 y anterior también es una copia de trabajo completa, porque cada directorio contiene sus datos de mantenimiento (directorios .svn). Desde la versión 1.7, cada copia de trabajo tiene solo un directorio .svnen la raíz de su directorio.

La copia de trabajo es autónoma en el sentido de que Subversion no almacena ningún dato relacionado con la copia de trabajo fuera de ella. Por lo tanto, al tener una copia de trabajo, puede hacer varias copias más simplemente copiando sin gastar tráfico de red.

En los directorios de servicio de la copia de trabajo, entre otras cosas, se almacena la llamada copia limpia ( ing.  copia prístina ): los archivos de la copia de trabajo en forma no modificada, tal como se extrajeron del repositorio (para svn esto es una revisión denominada BASE). Tener una copia limpia le permite ver y revertir rápidamente los cambios locales sin acceder al repositorio. Sin embargo, el tamaño de la copia de trabajo en el disco es aproximadamente el doble (datos + copia limpia de datos) que el tamaño de los propios datos. Este enfoque se debe al hecho de que los recursos de disco son más baratos y más accesibles que los recursos de red de datos .

Por lo general, la creación de una copia de trabajo es el primer paso necesario para confirmar los cambios locales, ya que solo los cambios realizados en la copia de trabajo se pueden confirmar en el repositorio. La excepción son las operaciones que se pueden realizar directamente en el almacén sin crear una copia de trabajo.

Transacciones

El almacenamiento en Subversion está organizado en forma de transacciones con atomicidad y propiedades de aislamiento del conjunto de propiedades ACID . Así, el sistema de control de versiones garantiza la integridad, consistencia y disponibilidad del repositorio en todo momento.

  • Atomicidad de las confirmaciones ( eng.  atomic commits ): los cambios en varios archivos o directorios se corrigen en una sola transacción, mientras se genera una revisión. En caso de una confirmación fallida, en caso de falla o error, el sistema garantiza que el repositorio no terminará en un estado parcialmente modificado; o todos los cambios ingresarán al repositorio o (en caso de falla), ninguno.
  • El aislamiento garantiza que los estados de almacenamiento intermedios dentro de una transacción no sean visibles para otras transacciones y usuarios. Por ejemplo, si un usuario corrige los cambios en varios archivos en una transacción, entonces otros usuarios no pueden ver ese estado de almacenamiento en el que algunos de los archivos ya se han cambiado y otros no.

Estas propiedades no están garantizadas para una copia de trabajo de Subversion ; a diferencia de un repositorio, puede estar en un estado intermedio o bloqueado si falla o se interrumpe (es decir, deberá restaurarse mediante un comando svn cleanupo volver a crearse antes de continuar).

Formularios de comando locales y remotos

Todos los comandos de cliente de Subversion se pueden dividir en los siguientes grupos:

  • modificar la copia de trabajo;
  • modificar el almacenamiento;
  • modificar tanto la copia de trabajo como el repositorio;
  • sin modificar nada.

Estructura de almacenamiento

Estructura del proyecto en el repositorio

Formalmente, Subversion no impone ninguna restricción sobre la estructura de archivos del proyecto; puede ser cualquier cosa dentro del marco de las reglas para nombrar objetos en el sistema de archivos. Sin embargo, existen pautas para facilitar el trabajo con ramas y etiquetas. En el caso más simple, se recomienda crear al menos tres subdirectorios en el directorio raíz del repositorio:

/. trunk branches tags

Toda la estructura de archivos del proyecto (la línea de desarrollo principal) debe estar contenida en el subdirectorio trunk, el subdirectorio branchesdebe contener las ramas del proyecto y tags las etiquetas . Por ejemplo, la siguiente estructura de directorios del repositorio:

/. trunk branches branch_1 tags tag_1 tag_2

asume que el proyecto ( trunk) tiene una rama “ branch_1” y dos etiquetas “ tag_1” y “ tag_2”. Cada uno de estos directorios ( , y trunk) branch_1contiene una copia de la versión correspondiente del proyecto. tag_1tag_2

Si hay varios (sub)proyectos en el repositorio, se crea la siguiente estructura de subdirectorios para cada (sub)proyecto:

/. project1 trunk branches tags project2 trunk branches tags

Es decir, el directorio raíz contiene directorios de proyectos, y cada uno de ellos tiene su propio trunk, branches, tags, relacionado únicamente con este proyecto. Las estructuras de directorios de almacenamiento descritas son solo ejemplos; en la práctica, el almacenamiento se puede organizar de la manera que mejor se adapte a un caso particular dado. [43] [44]

Otra forma de almacenar varios proyectos es crear varios repositorios. Los proyectos que no estén relacionados de ninguna manera deben ubicarse en diferentes repositorios, ya que no se pueden realizar operaciones de copia, movimiento y fusión entre repositorios. Se pueden fusionar varios repositorios en uno, si es necesario, conservando el historial de revisiones (importando con el comando svnadmin loadcon el parámetro --parent-dir).

Sucursales

Subversion usa un modelo de "archivo" (igual que Perforce [45] ) para implementar ramas y etiquetas, es decir, una rama es solo un directorio (también puede crear una rama desde un solo archivo en lugar de un directorio). El comando crea una nueva rama svn copy. Se puede crear una rama en cualquier directorio de repositorio, pero tiene sentido seguir las convenciones descritas anteriormente sobre dónde crear nuevas ramas. Para obtener más información sobre las sucursales, consulte Ramificación y fusión .

Etiquetas

La creación de una etiqueta también se realiza con el comando svn copy, es decir, técnicamente es lo mismo que crear una rama. La única diferencia está en el método de uso: se supone que nadie cambiará los datos en la etiqueta (comprometerá cambios). Por ejemplo, en la fig. 1 etiqueta creada en la revisión 29: directorio /trunkde la revisión 27 copiado con el nombre /tags/R1. Ahora, si no cambia los datos en el directorio /tags/R1, seguirá siendo para siempre una copia exacta del directorio /trunk@27, es decir, será una etiqueta .

El concepto de etiquetas utilizado en Subversion es diferente del concepto de etiquetas en otros sistemas de control de versiones. Normalmente, una etiqueta es un nombre simbólico que se refiere a un conjunto de archivos y su estado. En Subversion, una etiqueta copia un conjunto de archivos y su estado. Las etiquetas de copia en Subversion tienen sus ventajas y desventajas.

ventajas:

  • la etiqueta es visible en la estructura del directorio, puede hacer una organización conveniente de etiquetas en forma de árbol.

Defectos:

  • es difícil averiguar qué etiquetas ingresó el archivo (lo mismo para el directorio);
  • si los derechos de acceso se establecen individualmente [46] para directorios, entonces la etiqueta no hereda estos derechos;
  • el contenido de la etiqueta se puede cambiar;
  • si crea una copia de trabajo a partir de una etiqueta y confirma cualquier cambio de esta copia de trabajo, esto cambiará la etiqueta en sí, y no los datos que se marcaron. La forma correcta de trabajar "a partir de la etiqueta" es crear una copia de trabajo no a partir de la etiqueta, sino a partir de la fuente de esta etiqueta.

Propiedades

Una de las características importantes de Subversion es el soporte para propiedades, es decir, pares de texto de nombre = valor , que se pueden establecer en objetos en la tienda. Las propiedades se usan en dos contextos diferentes: para objetos del sistema de archivos y para revisiones.

Propiedades de los objetos del sistema de archivos

A cada archivo o directorio de un almacén se le puede asignar un conjunto de propiedades. Los cambios de propiedad se almacenan en el historial de la misma manera que los cambios en el sistema de archivos. Los usuarios pueden establecer propiedades con cualquier nombre; también hay un conjunto predefinido de propiedades de utilidades que utiliza el programa cliente de Subversion (los nombres de las propiedades de utilidades tienen el prefijo "svn:").

Propiedades de archivo svn:executable Hace que el archivo sea ejecutable (para copias de trabajo en sistemas operativos de la familia UNIX ). svn:mime-type Almacena el tipo MIME del archivo. Afecta la forma en que funcionan los comandos que muestran diferencias de archivos y combinan cambios (fusión). svn:keywords Lista de palabras clave ( ing.  keywords ), que serán reemplazadas en el archivo con los valores correspondientes. Para que se produzca la sustitución, la palabra clave debe estar presente en el archivo como un archivo $keyword$. Se utiliza para actualizar automáticamente los valores de un archivo que cambian de una versión a otra (por ejemplo, el número de revisión). svn:eol-style Especifica la regla para convertir caracteres de fin de línea ( EOL ) en un archivo de texto .  Se utiliza en los casos en que el archivo debe tener un tipo de carácter EOL específico. Por lo general, se usa "nativo"; en este caso, el tipo de caracteres de final de línea corresponde al adoptado en el sistema operativo en el que se crea la copia de trabajo. svn:needs-lock Indica que el archivo será de solo lectura cuando se recupere del almacenamiento. Esta propiedad está pensada para usarse junto con el mecanismo de bloqueo . Denegar la escritura en un archivo es un recordatorio para adquirir un bloqueo en el archivo antes de editarlo: cuando se adquiere un bloqueo, el programa cliente de Subversion hace que el archivo se pueda escribir automáticamente (liberar el bloqueo nuevamente hace que el archivo no se pueda modificar). Los bloqueos se pueden utilizar sin establecer esta propiedad. Sin embargo, esto no se recomienda, ya que existe el riesgo de que otro usuario comience a editar el archivo bloqueado, y esto solo se descubrirá cuando se confirmen los cambios. svn:special La propiedad no está destinada a ser configurada o modificada por los usuarios. Actualmente se utiliza para almacenar enlaces simbólicos en el repositorio. Cuando se agrega un enlace simbólico a un repositorio, se crea un archivo en el repositorio con la extensión svn:special. Cuando este archivo se desprotege en un sistema similar a UNIX , el programa cliente de Subversion lo vuelve a convertir en un enlace. svn:mergeinfo Almacena información sobre qué rutas se fusionaron en este archivo. La propiedad se introdujo en la versión 1.5, se utiliza para el seguimiento de fusiones .  Es un conjunto de cadenas de la forma file_name: revision_range . Aquí filename  es el nombre completo (con la ruta desde la raíz del sistema de archivos del repositorio) del archivo o directorio desde el cual se fusionó el rango especificado de revisiones. Las filas se actualizan automáticamente durante las operaciones de combinación; en fusiones posteriores, Subversion tiene en cuenta las líneas añadidas previamente, evitando así la fusión repetida de los mismos cambios. No se recomienda cambiar la propiedad manualmente; esto puede romper el mecanismo de seguimiento de combinación.svn:mergeinfo Propiedades del directorio svn:ignore Una lista de patrones de nombres de archivos y directorios que el programa cliente de Subversion ignorará en este directorio. Esta propiedad es similar a un archivo .cvsignoreen CVS . Como regla general, la propiedad está configurada de tal manera que el programa cliente "no ve" archivos y directorios que son creados automáticamente por varios programas y no deben ser versionados (por ejemplo, archivos de objetos , archivos temporales , etc.). Esta propiedad no se aplica a los subdirectorios. svn:externals Le permite extraer automáticamente un conjunto de directorios en una copia de trabajo especificando su URL (incluso puede hacerlo desde otro repositorio). svn:mergeinfo Lo mismo que para los archivos . Propiedades de revisión

El segundo tipo de objeto para el que existen propiedades son las propias revisiones. En este caso, los nombres de propiedad también pueden ser cualquier cosa; algunas propiedades con el prefijo "svn:" tienen un significado especial. La diferencia entre las propiedades de las revisiones y las propiedades de los objetos del sistema de archivos es que para las primeras, el concepto de historial de versiones no es aplicable (ya que se asigna un valor de propiedad específico a una revisión). En otras palabras, las propiedades de revisión se pueden cambiar, pero se pierde el valor anterior. De forma predeterminada, los cambios en las propiedades de revisión están deshabilitados; para permitir que el administrador cree un script ( eng.  hook ) manejando el evento pre-revprop-change.

svn:date La fecha y hora en que se creó la revisión. svn:author El nombre del usuario que confirmó los cambios incluidos en esta revisión. svn:log Una descripción de los cambios confirmados en esta revisión (el texto ingresado por el usuario al confirmar los cambios).

Como regla general, las propiedades de revisión solo las cambia el administrador del repositorio para corregir datos incorrectos. Por ejemplo, si el usuario olvidó proporcionar una descripción de texto al confirmar sus cambios, el administrador puede crear esta descripción editando el archivo svn:log.

Uso de Subversion

Ciclo de trabajo

Una iteración típica de flujo de trabajo con Subversion incluye los siguientes pasos.

  • Actualizar una copia de trabajo desde el repositorio ( svn update) o crear una ( svn checkout).
  • Cambiar la copia de trabajo. Los cambios en los directorios y la información sobre los archivos se realizan con las herramientas de Subversion, pero Subversion no está involucrado en cambiar el (contenido) de los archivos de ninguna manera; los cambios se realizan mediante programas diseñados para esto ( editores de texto , herramientas de desarrollo , etc.):
    • se deben agregar archivos y directorios nuevos (aún no enviados al repositorio) (comando svn add), es decir, transferirlos bajo el control de versiones;
    • si es necesario eliminar , renombrar , mover o copiar un archivo o directorio en su copia de trabajo , debe usar las funciones de Subversion ( svn mkdir, svn delete, svn move, svn copy);
    • ver el estado de la copia de trabajo y los cambios locales (aún no confirmados) ( svn info, svn status, svn diff);
    • cualquier cambio local que falle se puede deshacer ( svn revert).
  • Si es necesario, una actualización adicional para recibir los cambios enviados al repositorio por otros usuarios y fusionar estos cambios con los suyos propios ( svn update).
  • Confirmar sus cambios (y/o fusionar resultados) en el repositorio ( svn commit).

Ramificación

La bifurcación es un aspecto importante de cómo funcionan los sistemas de control de versiones porque las técnicas típicas de control de versiones [47] (al menos en el desarrollo de software ) implican el uso de bifurcaciones. Subversion tiene capacidades de bifurcación y fusión bastante avanzadas (sin embargo , no admite la fusión de archivos y directorios renombrados).

En la fig. La Figura 3 muestra convencionalmente un ejemplo de la evolución de las ramas en el repositorio. El color verde muestra la línea principal de desarrollo del proyecto ( eng.  mainline, trunk ), amarillo - ramas, azul - etiquetas, magenta - una rama cuyo desarrollo se ha interrumpido. Las flechas rojas muestran los cambios de fusión.

Creación de sucursales

El comando crea una nueva rama (así como una etiquetasvn copy ) , que crea una copia en el repositorio con la herencia del historial de revisión de la fuente ( operación A+ ). Siempre debe usar la forma "remota" del comando para crear ramas svn copy, por ejemplo:

svn copy http://.../trunk/dir http://.../branches/branch_name -m "Creando una rama de dir"

La copia resultante será una rama (o una etiqueta, dependiendo de cómo trabajes con ella). En el futuro, los cambios realizados en una rama se pueden realizar en la fuente a partir de la cual se creó esta rama; dicha propagación de cambios se denomina combinación . 

Las operaciones de copia en Subversion son baratas ( es decir, copia  barata ), es decir, requieren una pequeña cantidad fija de tiempo y espacio en disco. El almacenamiento está diseñado de tal manera [48] que durante cualquier copia, los datos no se duplican, sino que se crea un enlace a la fuente (similar a un enlace duro ); sin embargo, este mecanismo es puramente interno, desde el punto de vista del usuario. vista, es la creación de una copia que se produce. Gracias a la alta eficiencia de la bifurcación, se pueden crear ramas con la frecuencia necesaria (sin embargo , la fusión  , una adición necesaria a la bifurcación, es más lenta en Subversion que en otros sistemas de control de versiones modernos).

Trabajando con ramas

En general, trabajar en una sucursal no es diferente de trabajar en la línea de desarrollo principal ( troncal ). Se requieren comandos específicos solo para actividades que involucran más de una rama. Estos comandos incluyen (además del comando crear rama svn copy):

  • svn switch - cambiar una copia de trabajo existente a otra sucursal. Un cambio cambia la sobrecarga de la copia de trabajo como si la copia de trabajo se hubiera obtenido mediante una operación svn checkoutde la sucursal a la que se cambió. En este caso, la cantidad de tráfico de red es menor que con svn checkout, ya que solo se transmite la diferencia entre los datos en la copia de trabajo y la rama de destino;
  • svn merge - copiar conjunto de cambios entre ramas - utilizado para fusionar.

Como regla general, el ciclo completo de trabajo con sucursales incluye los siguientes pasos:

  • creación de sucursales ( svn copy);
  • cambiando una copia de trabajo existente a una sucursal ( svn switch) o creando una nueva copia de trabajo cargando ( svn checkout);
  • cambiar archivos y directorios en la copia de trabajo, confirmando estos cambios ( svn commit);
  • copiar a la rama los cambios recientes de la rama principal realizados después de la rama ( svn merge, svn commit);
  • copiar los cambios de la rama a la rama principal ( svn merge, svn commit);
  • eliminando una rama ( svn delete) si su ciclo de vida ha terminado.

Fusión

Copiar cambios entre ramas

Una fusión en Subversion es la aplicación a una rama de un conjunto de cambios realizados en otra (o la misma) rama. Para implementar una combinación, debe usar un comando svn merge : aplica un conjunto de cambios a una copia de trabajo; entonces necesita confirmar los cambios ( svn commit).

Combinar la terminología es algo confuso. El término fusión no es del todo exacto, ya que no hay fusión de ramas como tal . Además, no debe equiparar la combinación y el comando : en primer lugar, para la combinación debe realizar (además de ) la resolución de conflictos y la confirmación, y en segundo lugar, la aplicación no se limita a la combinación.  svn mergesvn mergesvn merge

Otros usos del comando svn merge

El comando svn mergese puede usar para algo más que fusionar. De hecho, el comando realiza cambios en la copia de trabajo iguales a la diferencia entre dos directorios o archivos en el repositorio , por lo que svn mergees una herramienta universal para transferir cambios. Aquí hay algunos ejemplos de cómo usar el comando svn merge:

  • reversión de cambios ya comprometidos, incluida una amplia gama de revisiones;
  • vista conveniente (en forma de cambios en la copia de trabajo) de la diferencia entre los dos estados del repositorio.

Crear una bóveda

El comando se utiliza para crear una bóveda svnadmin create. Esta operación creará una tienda vacía en el directorio especificado.

Subversion y CVS

Comparación

A continuación se muestra una comparación de los parámetros de los sistemas Subversion y CVS, ya que Subversion se posiciona precisamente como una mejora sobre CVS. Se hace una comparación solo para aquellos parámetros en los que estos sistemas difieren. En general, Subversion supera a CVS en todos los sentidos excepto en las etiquetas en el sentido convencional (es decir, etiquetas que se refieren a objetos del sistema de archivos).

Parámetro subversión CVS
Capacidades
Catálogos Realiza un seguimiento de las versiones no solo de los archivos, sino también de los directorios. Las versiones del directorio no se rastrean, es decir, la estructura del directorio es la misma (la que existe en el repositorio en este momento) para todas las revisiones y todas las ramas. Si cambia la estructura de directorios, al extraer los estados antiguos, obtenemos las revisiones correctas (antiguas) de los archivos, pero en la estructura de directorios incorrecta (existente en el momento de la extracción).
Actas Atomicidad de confirmaciones de varios archivos. La atomicidad está solo al nivel de las confirmaciones de un solo archivo. En efecto, la confirmación de cambios en varios archivos se divide en una secuencia de confirmaciones en archivos individuales. Si se interrumpe una secuencia de confirmaciones de este tipo, algunos de los archivos permanecerán confirmados, mientras que otros permanecerán sin confirmar.
conjuntos de cambios Los conjuntos de cambios son compatibles .  Los conjuntos de cambios no son compatibles.
Modificaciones de nombre de archivo Admite copiar, mover y renombrar archivos y directorios sin perder el historial de cambios. Al copiar, mover y renombrar archivos, el archivo con el nuevo nombre no tiene historial, es decir, se pierde por completo la conexión con el nombre anterior y su historial de versiones. Lo mismo para archivos dentro de un directorio al modificar su nombre [49] .
propiedades Cada archivo y directorio puede tener un conjunto arbitrario de propiedades asociadas, que consisten en un nombre y un valor. Las propiedades también están bajo control de versiones. Las propiedades no son compatibles.
Cerraduras Se admite el bloqueo de archivos opcional (desde la versión 1.2). No se admiten bloqueos, pero existe un mecanismo similar llamado seguimiento .
sucursales Las ramas ( rama , ver Glosario ) se implementan en el espacio de ruta. Esto quiere decir que para crear una sucursal se copia el directorio (la copia será la sucursal). La creación de tales copias es una operación rápida y que no consume muchos recursos, porque los datos no se duplican , sino que se fija una nueva versión, que difiere de la anterior solo en la ubicación de los archivos. Las ramas se implementan en la "tercera dimensión". Esto significa que un archivo en una rama se direcciona con tres parámetros: ruta en el sistema de archivos, revisión (o alguna otra forma de indicar la revisión, como la hora), nombre de la rama .
Etiquetas No existen etiquetas ( tag , ver diccionario ) como tal. En su lugar, se utiliza una jerarquía de directorios: se crea un directorio separado para la etiqueta (así como para la rama). Una etiqueta es una rama en la que, por convención, no se realizan más cambios. Una etiqueta es una copia del estado etiquetado de archivos y directorios. Las etiquetas son compatibles. La etiqueta aborda el estado etiquetado de los archivos.
Eficiencia
Intercambio cliente-servidor Cualquier actualización de versión entre el cliente y el servidor solo transfiere las diferencias de archivos, lo que puede reducir significativamente el tráfico de red. Las diferencias se transfieren del servidor al cliente y el objeto completo se transfiere del cliente al servidor.
binarios Funciona con la misma eficacia con archivos de texto y binarios . Trabajar con archivos binarios es menos eficiente: cada nueva versión se almacena en el repositorio en su totalidad.
Creación de ramas y etiquetas Requiere una pequeña cantidad fija de tiempo y espacio en disco. Los costos de tiempo son altos (dependiendo de la cantidad de archivos involucrados). Los nombres de ramas y etiquetas se almacenan de forma redundante (en todos los archivos involucrados).
Gastos generales en copia de trabajo Los directorios de servicio de la copia de trabajo almacenan una copia limpia. Por lo tanto, navegar y revertir los cambios locales es rápido (sin ir al almacenamiento), pero el tamaño de la copia de trabajo en el disco es aproximadamente el doble del tamaño de los datos mismos. No se almacena una copia limpia, el tamaño de la copia de trabajo es aproximadamente igual al tamaño de los datos. Como resultado, las operaciones de visualización y reversión de cambios locales requieren acceso al repositorio y son lentas.
Consumo de memoria en el servidor Menos [50] . Más.

Migración de CVS a Subversion

Conversión de repositorio

Hay un programa cvs2svn diseñado para convertir un repositorio CVS en un repositorio Subversion listo para usar (o un repositorio git ) o ​​en un volcado de texto, que luego se puede importar al repositorio usando el archivo svnadmin. Al mismo tiempo, cvs2svn guarda toda la información contenida en el repositorio de CVS: ramas, etiquetas, descripciones de cambios, nombres de autores, fechas de confirmación. Además, los cambios en diferentes archivos comprometidos juntos se convierten en una sola revisión.

Diferencias en el uso Diferencias en el manejo de archivos

En CVS, mover (renombrar) y copiar archivos y directorios se realiza volviendo a agregar un objeto con un nuevo nombre y (al mover y renombrar) eliminando el objeto anterior. Con este trabajo, los archivos y directorios del repositorio se crean de nuevo y pierden su historial de cambios. Subversion debe usar los comandos mover ( moveo mv) y copiar ( copy) para realizar estas operaciones. Su uso conserva el historial de cambios y le permite evitar operaciones innecesarias (especialmente cuando se trata de directorios o incluso de ramas del sistema de archivos).

A diferencia de CVS, algunas operaciones de copia de trabajo (como eliminar y mover un archivo) son manejadas por Subversion. Las diferencias descritas y otras cuando se trabaja con archivos de copia de trabajo se resumen en la siguiente tabla ( commitse omite la operación , donde es necesaria en ambos casos):

Operación CVS subversión notas
Borrar un archivo archivo rm archivo
cvs rm
svn rm file el archivo no necesita ser borrado manualmente primero
Eliminación de archivos por máscara rm *
cvs rm archivo1 archivo2 ...
svn rm * los archivos no necesitan ser eliminados manualmente de antemano
no es necesario enumerar todos los archivos
Renombrar/Mover mv archivo1 archivo2
cvs rm archivo1
cvs agregar archivo2
svn mv file1 file2 el archivo no necesita ser movido manualmente
el historial del archivo se conserva
proceso de copiar cp archivo1 archivo2
cvs agregar archivo2
svn copy file1 file2 el archivo no necesita ser copiado manualmente
el historial del archivo se conserva (bifurcado)
Agregar (crear) un directorio mkdir directorio
cvs agregar directorio
svn mkdir dir
svn confirmar
el directorio no se puede crear manualmente
después de agregar el directorio es necesariocommit
Agregar un directorio con archivos cvs agregar dir
cd dir
cvs agregar archivo1 archivo2
svn add dir se agrega el directorio con los archivos que contiene
Cambiar el nombre de un directorio con archivos
(sin subdirectorios)
mkdir dir2
cvs agregar dir2
mv dir1/* dir2
cvs rm dir1/archivo1 dir1/archivo2 ...
cvs agregar dir2/*
svn mv dir1 dir2 no es necesario crear y agregar directorios
no es necesario mover archivos manualmente
no es necesario enumerar todos los archivos
se guarda el historial de archivos
Cambiar el nombre de una rama del sistema de archivos
(directorios con archivos y subdirectorios)
repita los comandos anteriores
para cada nivel de anidamiento
o cada subdirectorio [51]
svn mv dir1 dir2 ver arriba
no depende del número de niveles y directorios
Direccionamiento del estado de almacenamiento

En Subversion, no es necesario crear etiquetas o usar una fecha/hora para abordar el estado del repositorio, en casos simples (por ejemplo, para obtener una versión después de un compromiso determinado), será más fácil especificar el número de revisión requerido .

Estructura interna

Niveles

Subversion está diseñado como un conjunto de bibliotecas divididas en varios niveles. Cada uno de ellos realiza una tarea específica y permite a los desarrolladores crear sus propias herramientas, según la complejidad y la tarea.

fs El nivel más bajo; implementa un sistema de archivos versionado que almacena datos. Repos El nivel de almacenamiento implementado en el sistema de archivos. En este nivel se implementan muchas funciones auxiliares, y también se soporta el lanzamiento de handlers (en inglés  hooks ), es decir, scripts que se lanzan cuando ocurre un evento. Juntos, los niveles Fs y Repos conforman la interfaz del sistema de archivos . mod_dav_svn Proporciona acceso WebDAV / Delta-V a través de Apache 2. Real academia de bellas artes Implementa el acceso al almacenamiento (tanto local como remoto). A partir de este nivel, el repositorio puede ser referenciado por URL, es decir,
  • file:///path/para acceso local,
  • http://host/ruta/ o https://host/ruta/ para acceso WebDAV, o
  • svn://host/ruta/ o para acceder a través del protocolo SVN.svn+ssh://host/path/
Cliente, WC El nivel más alto. Abstrae el acceso al almacenamiento y realiza tareas típicas de los clientes, como la autenticación de usuarios o la comparación de versiones. El Cliente utiliza la biblioteca Wc para administrar la copia de trabajo local.

Configuración del cliente

La utilidad de cliente estándar de Subversion, SVN, se configura mediante variables de entorno y archivos INI creados en el directorio de inicio del usuario en un subdirectorio .subversion(la ubicación de la configuración en sistemas Windows, en archivos o en el registro, depende de la configuración del sistema). En la configuración, SVN también almacena en caché certificados SSL, inicios de sesión, contraseñas, etc. (a menos que esté deshabilitado en la configuración) para acceder a los servidores de Subversion.

Contenido del directorio .subversion:

  • archivo servers : contiene información sobre los métodos de conexión de red a un repositorio remoto;
  • archivo config : contiene otra información de configuración [52]
  • directorio auth : contiene un caché de servidores, certificados, inicios de sesión y contraseñas
  • archivo README.txt - documentación de configuración de SVN

Desventajas

Problemas para renombrar archivos

Es posible que Subversion no siempre maneje los cambios de nombre de archivo correctamente si el contenido del archivo se cambia al mismo tiempo que el cambio de nombre. También pueden surgir problemas si un archivo renombrado en la copia local es modificado por otra persona en el repositorio. Algunos de estos problemas se corrigieron en la versión 1.5, pero esta solución aún no está completa. [53]

Soporte deficiente para la fusión de sucursales

Las operaciones de fusión de sucursales también se consideran un punto débil de Subversion. Antes de la versión 1.5, los usuarios tenían que realizar un seguimiento manual de todas esas operaciones utilizando entradas detalladas del registro de cambios. Desde la versión 1.5, se ha introducido soporte básico para el seguimiento automático de fusiones, que los desarrolladores planean mejorar en versiones posteriores [54] . Subversion actualmente admite escenarios de fusión comunes bastante bien; en casos más complejos, los problemas son posibles. Se recomienda [55] organizar el flujo de trabajo de forma que se eviten escenarios problemáticos. No se admite la combinación de archivos y directorios renombrados.

No se pueden eliminar los datos del almacenamiento

La información una vez colocada en el repositorio de Subversion permanece allí para siempre: un archivo se puede eliminar en la revisión actual, pero siempre es posible recuperar del repositorio una de las revisiones anteriores en las que existía el archivo. Aunque mantener las revisiones pasadas es en realidad el propósito de usar los sistemas de control de versiones, a veces es necesario eliminar por completo la información de un repositorio que se colocó allí por error. Subversion no proporciona ninguna forma nativa de hacer esto [56] ; la única posibilidad es crear un volcado de almacenamiento, procesarlo con la utilidad svndumpfilter estándar y luego restaurar el almacenamiento desde el volcado. También existen programas de terceros para automatizar este proceso, pero en cualquier caso, esta operación requiere una suspensión temporal del acceso al almacenamiento y la intervención de un administrador con privilegios lo suficientemente altos como para borrar completamente el antiguo almacenamiento y reemplazarlo por uno nuevo. una.

Software adicional

  • Clientes :
    • RapidSVN  es un cliente Subversion C++ multiplataforma ;
    • SmartSVN  es un cliente Subversion Java multiplataforma ;
    • TortoiseSVN  es un cliente Subversion implementado como una extensión del Explorador de Windows ;
    • RabbitVCS  es un cliente de Subversion implementado como una extensión para el administrador de archivos de Linux (anteriormente llamado NautilusSVN);
    • KDESvn es un cliente gráfico de Subversion como parte del conjunto de aplicaciones de compilación de software de KDE;
    • VisualSVN  es una extensión para Microsoft Visual Studio .
  • Complementos :
  • Interfaces web :
    • Trac  es una herramienta basada en tecnología Wiki,
    • Redmine  : además, realiza un seguimiento de los errores,
    • USVN  es una utilidad para crear y administrar el acceso a repositorios, especializada para SVN,
    • VerVC ,
    • websvn ,
    • SVNManager  : utilidad PHP para administrar repositorios (crear, eliminar, cargar y descargar; administrar usuarios y grupos),
    • Submin  es una utilidad para administrar repositorios y usuarios, incluida la administración del control de acceso a directorios individuales en un repositorio,
    • cSvn  es un cliente Subversion C multiplataforma .
  • Tabla comparativa: interfaces web:

Nombre

Descripción

Idioma

base de datos

Licencia

Sitio web

Actualizar

Versión

seguimiento

una herramienta basada en tecnología Wiki

Pitón

SQLite, PostgreSQL, MySQL y MariaDB

Licencia BSD modificada

trac.edgewall.org Archivado el 8 de abril de 2013 en Wayback Machine .

21/06/2017

1.2.2

redmine

seguimiento de errores adicional

rubí

MySQL, PostgreSQL, SQLite, Oracle.

Licencia Pública General GNU

redmine.org Archivado el 27 de abril de 2011 en Wayback Machine .

09.12.2018

4.0.0

USVN

utilidad para crear y administrar el acceso a repositorios, especializada para SVN

PHP

MySQL, SQLite

CeCill (licencia compatible con GPL).

www.usvn.info Archivado el 12 de mayo de 2011 en Wayback Machine .

13/01/2012

1.0.6

VerVC

sin gestión de usuarios, no requiere soporte DAV por parte del servidor web.

Pitón

mysql

Estilo Berkeley de dos cláusulas

www.viewvc.org Archivado el 4 de mayo de 2011 en Wayback Machine .

02.12.2010

1.1.8

WebSVN

interfaz de navegación para SVN

PHP

XML

GNU GPL

websvn.tigris.org Archivado el 12 de junio de 2006 en Wayback Machine .

10/12/2010

2.3.2

Administrador de SVNM

utilidad para gestionar repositorios (crear, borrar, cargar y descargar; gestionar usuarios y grupos)

PHP

MySQL o SQLite

svnmanager.sourceforge.net Archivado el 30 de abril de 2011 en Wayback Machine .

28/01/2012

1.09

Submin (MIT)

utilidad para administrar repositorios y usuarios, incluida la administración del control de acceso para directorios individuales en un repositorio

Pitón

MIT/X Archivado el 6 de junio de 2011 en Wayback Machine .

24.12.2012

2.1

cSvN

interfaz web para ver los repositorios de Subversion

C

RADIX-1.0

csvn.radix.pro Archivado el 16 de marzo de 2022 en Wayback Machine .

17/11/2020

0.1.3

Notas

  1. https://subversion.apache.org/docs/release-notes/release-history.html
  2. Lanzamiento de Apache Subversion 1.10.8  - 2022 .
  3. Lanzamiento de Apache Subversion 1.14.2  - 2022 .
  4. 1 2 Proyecto de código abierto de subversion en Open Hub: página de idiomas - 2006.
  5. https://projects.apache.org/json/projects/subversion.json
  6. 1 2 Centro abierto - 2006.
  7. 1 2 https://www.openhub.net/p/subversion/analyses/latest/languages_summary
  8. 1 2 3 4 Directorio de software libre
  9. http://subversion.tigris.org/license-1.html
  10. La palabra inglesa subversion se puede traducir de dos maneras: como "overthrow" ( subversion ) y como "subversion" ( sub - version )
  11. Por el nombre del programa cliente para la línea de comandos , que es parte del paquete
  12. Listado de marcas registradas de Apache . Consultado el 10 de octubre de 2015. Archivado desde el original el 7 de octubre de 2015.
  13. Características de Subversion Archivado el 8 de abril de 2011 en Wayback Machine . 
  14. The Risks of Distributed Version Control Archivado el 15 de julio de 2011 en Wayback Machine Ben Collins-   Sussman
  15. CVS está disponible, Subversion está en Archivado el 25 de marzo de 2010.  (Inglés) Revista Red Hat, agosto de 2005
  16. CVS - sourceforge Archivado el 10 de junio de 2010.
  17. Sistema de control de versiones CVS . Consultado el 30 de junio de 2010. Archivado desde el original el 8 de julio de 2010.
  18. HEADS UP: FreeBSD src repo en transición a git este  fin de semana . lists.freebsd.org (17 de diciembre de 2020). Consultado el 22 de diciembre de 2020. Archivado desde el original el 18 de diciembre de 2020.
  19. The Forrester Wave: Cambio de software y gestión de la configuración, segundo trimestre de 2007 (enlace no disponible) . Investigaciones Forrester . Archivado desde el original el 25 de agosto de 2011. 
  20. Estadísticas del concurso de popularidad para bzr, git, git-core, mercurial, subversion . Consultado el 24 de junio de 2010. Archivado desde el original el 6 de abril de 2014.
  21. Copia archivada . Consultado el 24 de junio de 2010. Archivado desde el original el 17 de julio de 2011.
  22. ver http://subversion.apache.org/docs/ Archivado el 17 de junio de 2010 en Wayback Machine .  
  23. Ben Collins-Sussman, Brian W. Fitzpatrick y C. Michael Pilato. Control de versiones con  Subversion . Consultado el 27 de noviembre de 2019. Archivado desde el original el 8 de agosto de 2010.
  24. Ben Collins-Sussman, Brian W. Fitzpatrick, C. Michael Pilato. Control de versiones en Subversion . Consultado el 27 de noviembre de 2019. Archivado desde el original el 18 de noviembre de 2019.
  25. Ben Collins-Sussman, Brian W. Fitzpatrick, C. Michael Pilato. Historia de Subversion / Control de versiones en Subversion (enlace no disponible) (2007). — Para Subversión 1.4. Consultado el 21 de julio de 2010. Archivado desde el original el 25 de agosto de 2011. 
  26. ↑ Registro de cambios Archivado el 18 de junio de 2010 en Wayback Machine . 
  27. Goliath Business News Archivado el 5 de diciembre de 2008.
  28. Notas de la versión de Subversion 1.1 . Consultado el 18 de junio de 2010. Archivado desde el original el 17 de junio de 2010.
  29. Notas de la versión de Subversion 1.2 . Consultado el 18 de junio de 2010. Archivado desde el original el 17 de junio de 2010.
  30. Notas de la versión de Subversion 1.3 . Consultado el 19 de junio de 2010. Archivado desde el original el 17 de junio de 2010.
  31. Notas de la versión de Subversion 1.4 . Consultado el 18 de junio de 2010. Archivado desde el original el 17 de junio de 2010.
  32. Notas de la versión de Subversion 1.5 . Consultado el 18 de junio de 2010. Archivado desde el original el 2 de julio de 2016.
  33. Notas de la versión de Subversion 1.6 . Consultado el 18 de junio de 2010. Archivado desde el original el 17 de junio de 2010.
  34. Subversion transferido al control de Apache Software Foundation . Archivado el 23 de febrero de 2010 en Wayback Machine , nixp.ru.
  35. Subversion & the Move to the Apache Software Foundation  (enlace descendente) , (mensaje de video del presidente de Subversion Corporation)
  36. Notas de la versión de Apache Subversion 1.7 . Consultado el 12 de octubre de 2011. Archivado desde el original el 12 de octubre de 2011.
  37. 12 Notas de la versión de Subversion 1.8 . Consultado el 9 de julio de 2013. Archivado desde el original el 10 de julio de 2013.
  38. el trabajo con enlaces simbólicos solo se admite en copias de trabajo en sistemas UNIX
  39. 1 2 Las ramas y etiquetas en Subversion no son una dimensión de repositorio independiente. Ver los conceptos clave detrás de la ramificación . Archivado el 5 de octubre de 2015 en Wayback Machine .
  40. Los términos repositorio y repositorio son sinónimos.
  41. Capítulo 5. Administración del repositorio. Archivado el 9 de noviembre de 2017 en Wayback Machine en Subversion Version Control.
  42. Las operaciones se enumeran aquí desde el punto de vista del sistema de archivos de almacenamiento . En una copia de trabajo, las acciones sobre los objetos son algo diferentes. Sin embargo, los cambios en la copia de trabajo, una vez confirmados, activarán las acciones descritas aquí en el repositorio. Por ejemplo, un comando svn moveen la copia de trabajo realizará operaciones Den A+el almacén.
  43. Estructura del proyecto C++ usando Subversion y Mxx_ru . Archivado el 19 de febrero de 2008 en Wayback Machine .
  44. Almacenar proyectos complejos en un repositorio y etiquetar varios proyectos a la vez . Archivado el 4 de agosto de 2008 en Wayback Machine .
  45. Bifurcación entre archivos en Perforce Archivado el 14 de julio de 2007.
  46. Autorización basada en ruta . Fecha de acceso: 27 de mayo de 2008. Archivado desde el original el 7 de octubre de 2008.
  47. Ejemplos típicos Archivado el 3 de diciembre de 2008 en Wayback Machine , sección en Subversion Version Control, versión 1.4
  48. Método Bubble-Up Archivado el 17 de junio de 2010 en Wayback Machine . 
  49. En CVS, un directorio se puede mover directamente al repositorio por medio del sistema de archivos , mientras que los archivos en él no perderán su historial. Sin embargo, esta modificación afectará todas las revisiones y ramas de archivos en ese directorio (porque los directorios no tienen información de versión en CVS).
  50. Preguntas frecuentes de Subversion . Consultado el 14 de abril de 2010. Archivado desde el original el 15 de abril de 2010.
  51. ↑ Una mejor opción podría ser hackear el repositorio de CVS - cambiar el nombre del directorio directamente al repositorio en el servidor
  52. Área de configuración de tiempo de ejecución. Personalización de su experiencia Subversion (enlace descendente) . Consultado el 16 de septiembre de 2010. Archivado desde el original el 25 de agosto de 2011. 
  53. Mejoras relacionadas con copiar/mover en Subversion 1.5 . Consultado el 24 de junio de 2008. Archivado desde el original el 24 de junio de 2008.
  54. Seguimiento de combinación (fundamental) . Consultado el 24 de junio de 2008. Archivado desde el original el 24 de junio de 2008.
  55. Subversion merge reintegrate Archivado el 31 de agosto de 2009 en Wayback Machine . 
  56. svn obliterar . Consultado el 21 de julio de 2008. Archivado desde el original el 22 de noviembre de 2002.

Enlaces