En el entorno de programación en equipo CVS (Concurrent Versions System), los miembros de un equipo realizan todo su trabajo en sus entornos de trabajo, aislados de los demás miembros. De vez en cuando deben compartir su trabajo. Este compartimiento lo realizan mediante un Depósito CVS.
CVS utiliza un modelo de ramas para dar soporte a varios cursos de trabajo, en cierto modo aislados entre sí, pero con una gran interdependencia. Las ramas son el lugar donde un equipo de desarrollo comparte e integra el trabajo en curso. Una rama puede verse como un área de trabajo compartido que actualizan los miembros del equipo a medida que efectúan cambios en el proyecto. Este modelo permite a las personas individuales trabajar en un proyecto de equipo CVS, compartir su trabajo con los demás a medida que se efectúan cambios y acceder al trabajo de los demás a medida que evoluciona el proyecto. Una rama especial, denominada HEAD, representa el curso principal del trabajo en el depósito (HEAD también suele recibir el nombre de tronco).
A medida que los miembros de un equipo producen trabajo nuevo, comparten entre sí este trabajo mediante el compromiso de dichos cambios en la rama. De forma similar, cuando desean obtener el trabajo disponible más reciente, actualizan sus áreas de trabajo locales con los cambios existentes en la rama. De este modo, la rama sufre un cambio constante, avanzando a medida que los miembros del equipo someten trabajos nuevos.
La rama efectivamente representa el estado actual del proyecto. En cualquier punto, un miembro del equipo puede actualizar su área de trabajo con la rama y saber que está actualizado.
CVS proporciona dos características importantes necesarias para trabajar en un equipo:
Una historia del trabajo que ha enviado el equipo
Un modo de coordinar e integrar este trabajo
El mantenimiento de la historia es importante para poder comparar el trabajo actual con borradores anteriores, revertir a un trabajo anterior que es mejor, etc. La coordinación del trabajo es crítica para que exista una sola definición del estado actual del proyecto que contiene el trabajo integrado del equipo. Esta coordinación se proporciona mediante el modelo de rama.
Un modelo optimista es aquel en el que cualquier miembro del equipo puede efectuar cambios en cualquier recurso al que tiene acceso. Ya que dos miembros del equipo pueden enviar a la rama cambios efectuados en el mismo recurso, pueden producirse conflictos que deben solucionarse. Este modelo se denomina optimista porque asume que los conflictos son raros.
Habitualmente, los recursos no existen aisladamente: normalmente contienen dependencias explícitas o implícitas con otros recursos. Por ejemplo, las páginas Web tienen enlaces con otras páginas Web y el código fuente tiene referencias a código descrito en otros recursos de código fuente. Ningún recurso es una isla.
Cuando los recursos se envían a la rama, estas dependencias pueden verse afectadas. La garantía de integridad de las dependencias es importante, porque la rama representa el estado actual del proyecto: en cualquier momento un miembro del equipo puede tomar el contenido de la rama como la base de un trabajo nuevo.
El flujo de trabajo ideal, por lo tanto, es aquel en que se conserva la integridad de la rama.
Los procedimientos del flujo de trabajo ideal serían los siguientes:
Inicio nuevo: antes de empezar el trabajo, actualizar los recursos del área de trabajo con el estado actual de la rama. Si está seguro de que no tiene ningún trabajo local que desea conservar, el modo más rápido de estar al día es seleccionar los proyectos que le interesan en la rama (o HEAD) y seleccionar Reservar como proyecto (o Sustituir por >Último del depósito si los proyectos ya existen localmente). Esta acción sobreescribirá los recursos locales con los de la rama.
Efectuar cambios: trabajar localmente en el Entorno de trabajo, creando recursos nuevos, modificando recursos existentes y guardando localmente los cambios.
Sincronizar: cuando esté preparado para enviar el trabajo, efectúe la acción de Sincronizar con el depósito.
Actualizar: examinar los cambios entrantes y añadirlos al Entorno de trabajo local. Esta acción permite determinar si hay cambios que pueden afectar a la integridad de lo que está a punto de enviar. Resolver conflictos. Volver a probar, ejecutar analizadores de integridad (por ejemplo, buscar enlaces de hipertexto rotos, garantizar la compilación del código, etc.).
Enviar: ahora que ya está seguro de que los cambios se han integrado bien en el contenido más reciente de la rama, envíe los cambios a la rama. Como medida de prudencia, puede repetir el paso anterior si hay cambios entrantes nuevos.
Por supuesto, este es un flujo de trabajo ideal. Bajo ciertas condiciones, puede estar seguro de que los cambios entrantes no le afectarán y optar por el envío sin actualizarse previamente. No obstante, generalmente, los miembros del equipo deben hacer un esfuerzo por seguir un flujo similar al expuesto anteriormente para tener la garantía de que la integridad de la rama no se verá comprometida accidentalmente.
Puede encontrar más información sobre CVS en http://www.cvshome.org.
Depósitos CVS
Ramas
Versiones
Sincronizarse con un depósito CVS
Crear una ubicación de depósito CVS
Reservar un proyecto de un depósito CVS
Sustituir recursos del Entorno de trabajo
Compartir un proyecto nuevo utilizando CVS
Sincronizarse con el depósito
Actualizar
Resolver conflictos
Fusionar desde una rama
Comprometer