<chapter id="cvs">
<title>Uso de &CVS;</title>
<indexterm zone="cvs"><primary>CVS</primary></indexterm>
<indexterm zone="cvs"><primary>control de revisiones</primary></indexterm>

<sect1 id="cvs-basics">
<title>Conceptos básicos de &CVS;</title>

<para>&CVS; es el sistema de control de revisiones que usan muchos proyectos de código abierto (incluido &kde;). Almacena todo el código fuente en un lugar centralizado, llamado <emphasis>repositorio</emphasis>. A partir del repositorio, los desarrolladores pueden extraer una versión actual del proyecto o porciones de él en distintos puntos de su desarrollo. En contraste con otros sistemas de control de revisiones, no es necesario <emphasis>bloquear</emphasis> los archivos sobre los que alguien desea trabajar. Así, el desarrollo puede ser altamente paralelizado. </para>

<para>Cada vez que un desarrollador ha terminado una tarea, <emphasis>envía</emphasis> su código (acompañado de un mensaje de registro). &CVS; realiza el trabajo de mezclar los cambios realizados por varios desarrolladores. Por supuesto, puede ocurrir que los desarrolladores trabajen en el mismo trozo de código, lo que generará un conjunto de cambios conflictivos (en la práctica esto ocurre raramente, y a menudo es un síntoma de una falta de comunicación). En este caso, &CVS; rechaza el envío; solo cuando se hayan resuelto todos los conflictos se podrá enviar el archivo. </para>

<para>Hasta aquí hemos descrito las características básicas de &CVS; con las que se trabaja normalmente. Pero &CVS; puede proporcionar mucho más. Es posible mantener distintas ramas de un proyecto (&eg;, &kde; 1.1.2 y &kde; 2 fueron ramas en el árbol de desarrollo de &kde;), mezclar los cambios de una rama en otra, consultar las diferencias entre revisiones, el histórico de la revisión de archivos, &etc; </para>

<para>&CVS; se implementa como un sistema cliente-servidor. Como usuario, toda comunicación con el repositorio se realiza mediante el comando &cvs;. También puede usar una interfaz de usuario de más alto nivel como &cervisia; (<ulink url="http://cervisia.sf.net"></ulink>) o <application>TkCVS</application> (<ulink url="http://tkcvs.sf.net"></ulink>). En &tdevelop;, solo podrá usar directamente una pequeña parte de las funcionalidades de &cvs; que son importantes para su trabajo diario. </para>

<para>Se asume que posee un conocimiento básico de &CVS;. En particular, debería saber cómo descargar un determinado proyecto del repositorio. Recomendamos la lectura del libro <quote>Desarrollo de código abierto con &CVS;</quote>, por Karl Fogel, que se distribuye gratuitamente (a excepción de los capítulos no técnicos). Vea <ulink url="http://cvsbook.red-bean.com/cvsbook.html"></ulink>. </para>

</sect1> <!-- cvs-basics -->

<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->

<sect1 id="cvs-commands">
<title>Comandos &CVS; de &tdevelop;</title>

<para>En las vistas de archivos se dispone de las siguientes opciones en el menú de contexto: </para>

<variablelist>
<varlistentry>
<term>Añadir al repositorio</term>
<listitem>
<para>Prepara los archivos marcados para ser añadidos al repositorio. Los archivos se transfieren al repositorio al repositorio cuando los envíe (o cuando envíe el directorio que los contiene) la próxima vez. </para>
</listitem>
</varlistentry>

<varlistentry>
<term>Eliminar del repositorio</term>
<listitem>
<para>Prepara un archivo para ser eliminado del repositorio. Esto también elimina el archivo del sistema de archivos local, así que use esta característica con cuidado. </para>
</listitem>
</varlistentry>

<varlistentry>
<term>Actualizar</term>
<listitem>
<para>Ejecuta <command>cvs update</command> para mezclar cualquier cambio realizado por otros usuarios en su directorio de trabajo. Cuando use esta opción del menú sobre un directorio, la actualización se realiza de forma recursiva, excepto si ha desactivado esta característica en el archivo de configuración <filename>.cvsrc</filename>. </para>
</listitem>
</varlistentry>

<varlistentry>
<term>Enviar</term>
<listitem>
<para>Ejecuta <command>cvs commit</command> para enviar cualquier cambio local al repositorio. Tenga en cuenta que debe actualizar su copia antes de hacer esto. De otro modo, si otro usuario ha enviado sus propios cambios antes, &CVS; puede mostrarle un mensaje de error. </para>
</listitem>
</varlistentry>
</variablelist>

<para>Todos estos comandos son invocados como subprocesos por &tdevelop; sin ninguna opción más de la línea de comandos ni variables de entorno. Esto puede ser un problema cuando la conexión con el servidor de &CVS; se realiza mediante &ssh; y se le solicita que introduzca su contraseña cada vez que envía o actualiza. Esto es necesario, por ejemplo, cuando su proyecto se almacena en <filename>sourceforge.net</filename>. Las posibles soluciones para este problema se describen en las «preguntas frecuentes» de &CVS;/SSH, que puede encontrar en la documentación de SourceForge. </para>

</sect1> <!-- cvs-basics -->

<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->

<sect1 id="cvs-behind">
<title>Detrás del telón</title>

<sect2 id="cvs-behind-workdir">
<title>Qué guarda &CVS; en el directorio de trabajo</title>

<para>(... pendiente de escribir ...) </para>
</sect2> <!-- cvs-behind-workdir -->

</sect1> <!-- cvs-behind -->

</chapter> <!-- cvs -->
