stringtranslate.com

Sistema de versiones concurrentes

El Sistema de Versiones Concurrentes ( CVS , o Concurrent Versioning System ) es un sistema de control de versiones desarrollado originalmente por Dick Grune en julio de 1986. [4]

Diseño

CVS funciona como interfaz para el Sistema de Control de Revisiones (RCS), un sistema de control de versiones más antiguo que administra archivos individuales pero no proyectos completos. Amplía el RCS al agregar soporte para el seguimiento de cambios a nivel de repositorio y un modelo cliente-servidor. [5] Los archivos se rastrean utilizando el mismo formato de historial que en RCS, con un directorio oculto que contiene un archivo de historial correspondiente para cada archivo en el repositorio.

CVS utiliza la compresión delta para almacenar de manera eficiente las distintas versiones del mismo archivo. Esto funciona bien con archivos de texto grandes con pocos cambios de una versión a la siguiente. Este suele ser el caso de los archivos de código fuente. Por otro lado, cuando se le indica a CVS que almacene un archivo como binario, mantendrá cada versión individual en el servidor. Esto se utiliza normalmente para archivos que no son de texto, como imágenes ejecutables, donde es difícil crear deltas compactos entre versiones.

CVS excluye los enlaces simbólicos porque, cuando se almacenan en un sistema de control de versiones, pueden suponer un riesgo de seguridad. Por ejemplo, se puede almacenar un enlace simbólico a un archivo confidencial en el repositorio, lo que hace que el archivo confidencial sea accesible incluso cuando no está registrado. En lugar de enlaces simbólicos, se pueden registrar en CVS los scripts que requieren ciertos privilegios e intervención consciente para ejecutarse. [ cita requerida ]

Operación

CVS etiqueta un único proyecto (conjunto de archivos relacionados) que administra como módulo . Un servidor CVS almacena los módulos que administra en su repositorio . Los programadores adquieren copias de los módulos mediante el método de extracción . Los archivos extraídos sirven como copia de trabajo , sandbox o espacio de trabajo . Los cambios en la copia de trabajo se reflejan en el repositorio mediante su confirmación . Actualizar es adquirir o fusionar los cambios en el repositorio con la copia de trabajo.

CVS utiliza una arquitectura cliente-servidor : un servidor almacena la(s) versión(es) actual(es) de un proyecto y su historial, y los clientes se conectan al servidor para "extraer" una copia completa del proyecto, trabajar en esta copia y luego "registrar" sus cambios. Los servidores CVS pueden permitir "acceso de lectura anónimo", [6] en el que los clientes pueden extraer y comparar versiones con una contraseña en blanco o publicada (por ejemplo, "anoncvs"); solo el registro de cambios requiere una cuenta y contraseña personal en estos escenarios. Varios desarrolladores pueden trabajar en el mismo proyecto simultáneamente, cada uno editando archivos dentro de su propia "copia de trabajo" del proyecto y enviando (o registrando ) sus modificaciones al servidor. Para evitar conflictos, el servidor solo acepta cambios realizados a la versión más reciente de un archivo. Por lo tanto, se espera que los desarrolladores mantengan su copia de trabajo actualizada incorporando los cambios de otras personas de manera regular. Esta tarea la gestiona en su mayor parte de forma automática el cliente CVS, que sólo requiere intervención manual cuando surge un conflicto de edición entre una modificación registrada y la versión local aún no registrada de un archivo. Los clientes también pueden utilizar el comando "update" para actualizar sus copias locales con la versión más reciente del servidor. Los clientes también pueden comparar versiones, solicitar un historial completo de cambios o consultar una instantánea histórica del proyecto (por ejemplo, en función de una fecha determinada). Si la operación de registro tiene éxito, los números de versión de todos los archivos implicados se incrementan automáticamente y el servidor escribe una línea de descripción proporcionada por el usuario, la fecha y el nombre del autor en sus archivos de registro . CVS también puede ejecutar scripts de procesamiento de registros externos especificados por el usuario después de cada confirmación. Estos scripts se instalan mediante una entrada en loginfoel archivo de CVS, que puede activar una notificación por correo electrónico o convertir los datos de registro a un formato basado en la Web.

CVS también puede mantener diferentes "ramas" de un proyecto. Por ejemplo, una versión publicada del proyecto de software puede formar una rama, utilizada para corregir errores, mientras que una versión en desarrollo actual, con cambios importantes y nuevas características, puede formar una rama separada. CVS asume que la mayoría del trabajo se lleva a cabo en el tronco y que las ramas generalmente deben ser de corta duración o históricas. Cuando se utilizan como están diseñadas, las ramas se administran fácilmente y las operaciones de las ramas son eficientes y rápidas. [7] [8]

Portabilidad

El software del servidor normalmente se ejecuta en Unix (aunque al menos el servidor CVSNT también admite varias versiones de Microsoft Windows ), mientras que los clientes CVS pueden ejecutarse en cualquier plataforma de sistema operativo principal .

Historia

Grune recordó: [9]

Creé CVS para poder colaborar con mis estudiantes, Erik Baalbergen y Maarten Waage, en el compilador de C ACK ( Amsterdam Compiler Kit ). Los tres teníamos horarios muy diferentes (un estudiante trabajaba de 9 a 5, el otro era irregular y yo sólo podía trabajar en el proyecto por las tardes). Su proyecto duró desde julio de 1984 hasta agosto de 1985. CVS se llamó inicialmente cmt, por la obvia razón de que nos permitía enviar versiones de forma independiente.

Grune publicó el código públicamente el 23 de junio de 1986. [10]

El código que finalmente evolucionó hasta convertirse en la versión actual de CVS fue creado por Brian Berliner en abril de 1989, con aportes posteriores de Jeff Polk y muchos otros colaboradores. Brian Berliner escribió un artículo en el que presentaba sus mejoras al programa CVS, en el que se describe cómo Prisma, un desarrollador externo que trabajaba en el núcleo de SunOS, amplió y utilizó la herramienta internamente, y se publicó para beneficio de la comunidad bajo la licencia GPL. [11] El 19 de noviembre de 1990, la versión 1.0 de CVS fue enviada a la Free Software Foundation para su desarrollo y distribución. [12]

La última versión se publicó el 8 de mayo de 2008. [13]

Adopción y sucesores

En el mundo del software de código abierto, el Sistema de Versiones Concurrentes (CVS, por sus siglas en inglés) ha sido durante mucho tiempo la herramienta preferida para el control de versiones. Y con razón. El CVS en sí es software libre, y su modus operandi no restrictivo y su compatibilidad con el funcionamiento en red (que permite que docenas de programadores dispersos geográficamente compartan su trabajo) se adaptan muy bien a la naturaleza colaborativa del mundo del código abierto. El CVS y su modelo de desarrollo semi-caótico se han convertido en piedras angulares del código abierto. [14]

Con el tiempo, los desarrolladores han creado nuevos sistemas de control de versiones basados ​​en CVS para agregar funciones, alterar el modelo operativo y mejorar la productividad de los desarrolladores. Los proyectos de reemplazo de CVS incluyen CVSNT y Subversion . [15] [16]

Véase también

Notas

  1. ^ ¡ Versión estable CVS 1.11.23 lanzada!
  2. ^ ¡Se lanzó la versión 1.12.13 de la función CVS! * Actualización de seguridad *
  3. ^ "Contenido de /ccvs/README".
  4. ^ "CVS--Sistema de versiones concurrentes v1.12.12.1: descripción general". Archivado desde el original el 15 de abril de 2012 . Consultado el 9 de diciembre de 2011 .
  5. ^ Stopak, Jacob (30 de noviembre de 2019). «La evolución de los componentes internos del sistema de control de versiones (VCS)» . Consultado el 22 de septiembre de 2020 .
  6. ^ Charles D. Cranor; Theo de Raadt (1999). "Apertura del repositorio de código fuente con CVS anónimo, USENIX 1999" (PDF) . Archivado (PDF) desde el original el 9 de octubre de 2022.
  7. ^ Collins-Sussman, Ben; Greg Ward (septiembre de 2004). "Subversion Users: Re: Performance (Subversion vs. CVS)" (Usuarios de Subversion: Re: Rendimiento (Subversion vs. CVS)). subversion-users . Consultado el 7 de julio de 2010 .
  8. ^ West, Adrian (julio de 2004). "Corrección del rendimiento de cvs branchtag". Archivado desde el original el 3 de agosto de 2009. Consultado el 7 de julio de 2010 .
  9. ^ "Sistema de versiones concurrentes CVS". dickgrune.com .
  10. ^ Dick Grune (3 de julio de 1986). «CVS, un front-end RCS (cvs)». Grupo de noticias : mod.sources. Usenet:  [email protected] . Consultado el 14 de septiembre de 2016 .
  11. ^ "CVS II: Paralelización del desarrollo de software - Berliner (ResearchIndex)". Archivado desde el original el 9 de septiembre de 2004.
  12. ^ "[cvs] Contenido de /ccvs/NEWS". cvs.savannah.gnu.org .
  13. ^ "Sistema de versiones concurrentes - Noticias: ¡Se lanzó la versión estable 1.11.23 de CVS! [Savannah]". savannah.nongnu.org .
  14. ^ Ben Collins-Sussman, Control de versiones con Subversion para Subversion 1.1, 2005
  15. ^ "Subversion FAQ: ¿Por qué existe este proyecto?". Subversion . Consultado el 21 de septiembre de 2009 .
  16. ^ "Dispelling Subversion FUD" (Disipando el miedo, la incertidumbre y la duda sobre Subversion). Ben Collins-Sussman. Archivado desde el original el 18 de julio de 2011. Consultado el 30 de junio de 2010 .

Referencias

Enlaces externos