Diferencia entre revisiones de «CVS»

De Guía Ubuntu
Saltar a: navegación, buscar
(Enlaces externos)
Línea 1: Línea 1:
 
__TOC__
 
__TOC__
  
El Sistema de Control de Versiones [[w:es:CVS|CVS]] permite que varios programadores trabajen de forma colaborativa en un mismo proyecto llevando un control de las versiones de los ficheros. De esta forma se permiten cambios concurrentes en un mismo fichero sin perder lo cambios realizados. Si usas o quieres usar esta herramienta te recomiendo que le eches un ojo a [[Programación/CVSTrac|CVSTrac]].
+
El '''Sistema de Control de Versiones''' ([[w:es:CVS|CVS]]) permite que varios programadores trabajen de forma colaborativa en un mismo proyecto llevando un control de las versiones de los ficheros. De esta forma se permiten cambios concurrentes en un mismo fichero sin perder lo cambios realizados. Si usas o quieres usar esta herramienta se recomienda que pruebes [[CVSTrac]].
  
 
== Instalación ==
 
== Instalación ==
El programa viene en el paquete '''cvs''' que puedes encontrar en los repositorios de Ubuntu. O sea, que lo puedes instalar de forma fácil usando algunos de los métodos disponibles en [[Primeros pasos/Añadir aplicaciones|Añadir aplicaciones]].  
+
 
 +
El programa viene en el paquete '''cvs''' que podemos [[Añadir aplicaciones|instalar]] los repositorios oficiales de Ubuntu.
  
 
== Configuración ==
 
== Configuración ==
 +
 
Vamos a tener cada proyecto en un repositorio separado, que es lo suyo para tener un control más fino sobre cada uno de los distintos repositorios. Es mejor así por el tema de usuarios, permisos y configuraciones varias. Todos estos repositorios los vamos a crear dentro del directorio '''/var/lib/repositorio/''', por ejemplo, para tenerlos juntos y facilitar el tema de la copia de seguridad.  
 
Vamos a tener cada proyecto en un repositorio separado, que es lo suyo para tener un control más fino sobre cada uno de los distintos repositorios. Es mejor así por el tema de usuarios, permisos y configuraciones varias. Todos estos repositorios los vamos a crear dentro del directorio '''/var/lib/repositorio/''', por ejemplo, para tenerlos juntos y facilitar el tema de la copia de seguridad.  
  
Línea 27: Línea 29:
 
Al final debe quedar una cosa así:
 
Al final debe quedar una cosa así:
  
<pre>
+
service cvspserver
service cvspserver
+
{
{
+
        socket_type = stream
        socket_type = stream
+
        protocol = tcp
        protocol = tcp
+
        user = root
        user = root
+
        group = cvs
        group = cvs
+
        server = /usr/bin/cvs
        server = /usr/bin/cvs
+
        server_args = -f --allow-root=/var/lib/repositorio/perico --allow-root=/var/lib/repositorio/tuxitron pserver
        server_args = -f --allow-root=/var/lib/repositorio/perico --allow-root=/var/lib/repositorio/tuxitron pserver
+
        wait = no
        wait = no
+
}
}
+
</pre>
+
  
 
Y reiniciamos el superservidor para que los cambios surtan efecto:
 
Y reiniciamos el superservidor para que los cambios surtan efecto:
 
 
  $ /etc/init.d/xinetd reload
 
  $ /etc/init.d/xinetd reload
  
 
== Añadir un proyecto al repositorio ==
 
== Añadir un proyecto al repositorio ==
 +
 
Una vez tengamos creado el repositorio tenemos que crear un proyecto. En los proyectos simples habrá un sólo proyecto por repositorio, pero en los más complejos puede haber varios proyectos relacionados en un mismo repositorio. En GNOME, por ejemplo, hay un repositorio y cada uno de los componentes de GNOME es un proyecto (Evolution, Nautilus, Evince, etc.).  
 
Una vez tengamos creado el repositorio tenemos que crear un proyecto. En los proyectos simples habrá un sólo proyecto por repositorio, pero en los más complejos puede haber varios proyectos relacionados en un mismo repositorio. En GNOME, por ejemplo, hay un repositorio y cada uno de los componentes de GNOME es un proyecto (Evolution, Nautilus, Evince, etc.).  
  
Línea 62: Línea 62:
  
 
== Trabajar con CVS ==
 
== Trabajar con CVS ==
[[Imagen:TkCVS.jpg|thumb|TkCVS es un magnífico cliente gráfico para CVS.]]
 
  
 +
[[Imagen:TkCVS.jpg|thumb|TkCVS es un magnífico cliente gráfico para CVS.]]
 
La línea de comandos admite gran cantidad de comandos y opciones. En la nomenclatura de CVS, los comandos son parámetros funcionales de CVS. En lugar de tener varios ejecutables, uno para hacer ''checkout'', otro para ''checkin'', otro para ''status''... tiene uno sólo llamado '''cvs''' que admite todos estos modos de funcionamiento. Veamos los principales:
 
La línea de comandos admite gran cantidad de comandos y opciones. En la nomenclatura de CVS, los comandos son parámetros funcionales de CVS. En lugar de tener varios ejecutables, uno para hacer ''checkout'', otro para ''checkin'', otro para ''status''... tiene uno sólo llamado '''cvs''' que admite todos estos modos de funcionamiento. Veamos los principales:
  
* '''checkout''': Saca el fichero del repositorio y lo almacena localmente para poder trabajar con él.
+
* '''checkout:''' Saca el fichero del repositorio y lo almacena localmente para poder trabajar con él.
* '''checkin''': Una vez realizados los cambios, volcamos el fichero al repositorio donde estará disponible para el resto de desarrolladores.
+
* '''checkin:''' Una vez realizados los cambios, volcamos el fichero al repositorio donde estará disponible para el resto de desarrolladores.
* '''status''': Indica el estado actual del fichero.
+
* '''status:''' Indica el estado actual del fichero.
* '''log''': Saca un listado con las revisiones del fichero.
+
* '''log:''' Saca un listado con las revisiones del fichero.
  
Pero lo más normal es que uses alguno de los clientes gráficos que existen. Para mi el mejor, aunque un poco feo, es TkCVS el cual está en los repositorios y podemos instalar con un simple:
+
Pero lo más normal es que uses alguno de los clientes gráficos que existen. Uno de los mejores, aunque no tenga buena apariencia, es '''TkCVS''', el cual podemos [[Añadir aplicaciones|instalar]] con el paquete '''tkcvs''' de los repositorios oficiales de Ubuntu.
 
+
$ sudo aptitude install tkcvs
+
  
 
== Notificación de los commits ==
 
== Notificación de los commits ==
 +
 
La configuración de un repositorio también está sujeta al versionado. Así que para añadir la opción de notificación de correo de los ''commits'' tenemos que hacer un ''checkout'' del directorio especial '''CVSROOT'''.
 
La configuración de un repositorio también está sujeta al versionado. Así que para añadir la opción de notificación de correo de los ''commits'' tenemos que hacer un ''checkout'' del directorio especial '''CVSROOT'''.
  
Línea 82: Línea 81:
 
Dentro de ese directorio hay unos cuantos ficheros. El que nos interesa ahora es '''loginfo''', al que tenemos que añadir la siguiente línea:
 
Dentro de ese directorio hay unos cuantos ficheros. El que nos interesa ahora es '''loginfo''', al que tenemos que añadir la siguiente línea:
  
<pre>
+
DEFAULT /usr/bin/cvs-mailcommit --mailto direccion@correo.com --from direccion@correo.com --cvs %{sVv} --diff --full
DEFAULT /usr/bin/cvs-mailcommit --mailto direccion@correo.com --from direccion@correo.com --cvs %{sVv} --diff --full
+
</pre>
+
  
El programa que envía los correos lo puedes encontrar en http://www.infodrom.org/Infodrom/tools/cvs-mailcommit.html. El parámetro ''mailto'' indica a quien va el correo. Puedes especificar varios ''mailto''. Lo que yo hago es crear un alias en el servidor de correo y enviar el correo a ese alias. Así puedo poner o quitar los usuarios de destino sin tocar este fichero de configuración.
+
El programa que envía los correos lo podemos encontrar [http://www.infodrom.org/Infodrom/tools/cvs-mailcommit.html aquí]. El parámetro ''mailto'' indica a quién va destinado el correo. Podemos especificar varios ''mailto''. Lo que yo hago es crear un alias en el servidor de correo y enviar el correo a ese alias. Así puedo poner o quitar los usuarios de destino sin tocar este fichero de configuración.
  
== Hacer un backup ==
+
== Hacer una copia de seguridad ==
Veamos un ejemplo de cómo hacer un backup de nuestro preciado repositorio de CVS. Simplemente lo que hace es:
+
  
* Crea un fichero ''.tgz'' con el contenido del repositorio
+
Veamos un ejemplo de cómo hacer una copia de seguridad de nuestro preciado repositorio de CVS. Simplemente lo que hace es:
* Envía el fichero a un servidor de backup
+
 
 +
* Crea un archivo ''.tgz'' con el contenido del repositorio
 +
* Envía el archivo a un servidor de backup
 
* Envía un correo al usuario ''root'' para avisarle del proceso
 
* Envía un correo al usuario ''root'' para avisarle del proceso
  
Línea 118: Línea 116:
  
 
== Ver también ==
 
== Ver también ==
 +
 
* [[CVSTrac]]
 
* [[CVSTrac]]
  
 
== Enlaces externos ==
 
== Enlaces externos ==
* http://es.wikipedia.org/wiki/CVS {{es}}
+
 
* http://es.wikibooks.org/wiki/Tutorial_de_uso_de_CVS {{es}}
+
* [[w:es:CVS|Artículo de la Wikipedia sobre CVS]] {{es}}
* http://www.linux.ie/articles/tutorials/cvs.php {{en}}
+
* [[b:es:Tutorial de uso de CVS|Tutorial de uso de CVS en Wikilibros]] {{es}}
* http://www.cvstrac.org/ {{en}}
+
* [http://www.linux.ie/articles/tutorials/cvs.php linux.ie :: Getting Started with CVS] {{en}}
 +
* [http://www.cvstrac.org/ Sitio web oficial de CVSTrac] {{en}}
 
* [http://www.sanchivi.com/cm/cvspermissions/ CVSPermissions] {{en}}
 
* [http://www.sanchivi.com/cm/cvspermissions/ CVSPermissions] {{en}}
 
* [http://www.ossp.org/pkg/tool/shiela/ OSSP shiela: CVS Access Control and Logging] {{en}}
 
* [http://www.ossp.org/pkg/tool/shiela/ OSSP shiela: CVS Access Control and Logging] {{en}}
* [http://ali.as/devel/cvsmonitor/ CVS Monitor] {{en}}
+
* [http://ali.as/devel/cvsmonitor/ Sitio web oficial de CVS Monitor] {{en}}
  
 
[[Categoría:Programación]]
 
[[Categoría:Programación]]

Revisión de 03:13 14 jun 2007

El Sistema de Control de Versiones (CVS) permite que varios programadores trabajen de forma colaborativa en un mismo proyecto llevando un control de las versiones de los ficheros. De esta forma se permiten cambios concurrentes en un mismo fichero sin perder lo cambios realizados. Si usas o quieres usar esta herramienta se recomienda que pruebes CVSTrac.

Instalación

El programa viene en el paquete cvs que podemos instalar los repositorios oficiales de Ubuntu.

Configuración

Vamos a tener cada proyecto en un repositorio separado, que es lo suyo para tener un control más fino sobre cada uno de los distintos repositorios. Es mejor así por el tema de usuarios, permisos y configuraciones varias. Todos estos repositorios los vamos a crear dentro del directorio /var/lib/repositorio/, por ejemplo, para tenerlos juntos y facilitar el tema de la copia de seguridad.

Una vez declaradas estas premisas procedemos a la inicialización del repositorio que albergará un hipotético llamado tuxitron. Estas tareas de instalación las haremos como root:

$ cvs -d /var/lib/repositorio/tuxitron init

Para que todos los usuarios del grupo cvs tengan permisos para trabajar con el repositorio, hacemos que todos los ficheros del recién creado repositorio pertenezcan a ese grupo:

$ chgrp cvs /var/lib/repositorio/tuxitron -R

Ahora le tenemos que indicar al CVS que puede disponer del nuevo repositorio. Si usamos el superdemonio xinetd tendremos que editar el fichero:

$ gedit /etc/xinetd.d/cvs 

y añadir el nuevo repositorio:

--allow-root=/var/lib/repositorio/tuxitron

Al final debe quedar una cosa así:

service cvspserver
{
        socket_type = stream
        protocol = tcp
        user = root
        group = cvs
        server = /usr/bin/cvs
        server_args = -f --allow-root=/var/lib/repositorio/perico --allow-root=/var/lib/repositorio/tuxitron pserver
        wait = no
}

Y reiniciamos el superservidor para que los cambios surtan efecto:

$ /etc/init.d/xinetd reload

Añadir un proyecto al repositorio

Una vez tengamos creado el repositorio tenemos que crear un proyecto. En los proyectos simples habrá un sólo proyecto por repositorio, pero en los más complejos puede haber varios proyectos relacionados en un mismo repositorio. En GNOME, por ejemplo, hay un repositorio y cada uno de los componentes de GNOME es un proyecto (Evolution, Nautilus, Evince, etc.).

Lo que haremos en importar lo que tenemos creando un proyecto en el repositorio, de esta forma pondremos disponible el código para que otra gente se pueda incluir en el proceso de desarrollo. Se usa el comando import del CVS. Es importante ejecutar este comando desde el directorio donde tengamos las fuentes para importar. También es fundamental establecer la variable de entorno CVSROOT que le indicará al cliente CVS donde está el repositorio.

$ export CVSROOT=/var/lib/repositorio/tuxitron

La sintaxis del comando de importación es la siguiente:

$ cvs import -m "comentario" <proyecto> <etiqueta_vendedor> <etiqueta_version>

Los dos últimos parámetros tienen poca importancia, de modo que puedes sustituirlos por tu usuario y la palabra "inicio" mismo. Por ejemplo, si eres el usuario monkiki y el proyecto a importar se llama tuxitron la línea de comandos sería:

$ cvs import -m "Importación inicial" tuxitron monkiki inicio
Nota clasica.png Si vas a usar CVSTrac en lugar de importar todo el proyecto, importa un directorio vacío o uno que contenga un fichero de texto sin importancia (del estilo de leeme.txt) y haz un commit del resto de los ficheros. Los ficheros importados no aparecen en el navegador web de CVS.

Trabajar con CVS

TkCVS es un magnífico cliente gráfico para CVS.

La línea de comandos admite gran cantidad de comandos y opciones. En la nomenclatura de CVS, los comandos son parámetros funcionales de CVS. En lugar de tener varios ejecutables, uno para hacer checkout, otro para checkin, otro para status... tiene uno sólo llamado cvs que admite todos estos modos de funcionamiento. Veamos los principales:

  • checkout: Saca el fichero del repositorio y lo almacena localmente para poder trabajar con él.
  • checkin: Una vez realizados los cambios, volcamos el fichero al repositorio donde estará disponible para el resto de desarrolladores.
  • status: Indica el estado actual del fichero.
  • log: Saca un listado con las revisiones del fichero.

Pero lo más normal es que uses alguno de los clientes gráficos que existen. Uno de los mejores, aunque no tenga buena apariencia, es TkCVS, el cual podemos instalar con el paquete tkcvs de los repositorios oficiales de Ubuntu.

Notificación de los commits

La configuración de un repositorio también está sujeta al versionado. Así que para añadir la opción de notificación de correo de los commits tenemos que hacer un checkout del directorio especial CVSROOT.

$ cvs co CVSROOT

Dentro de ese directorio hay unos cuantos ficheros. El que nos interesa ahora es loginfo, al que tenemos que añadir la siguiente línea:

DEFAULT /usr/bin/cvs-mailcommit --mailto direccion@correo.com --from direccion@correo.com --cvs %{sVv} --diff --full

El programa que envía los correos lo podemos encontrar aquí. El parámetro mailto indica a quién va destinado el correo. Podemos especificar varios mailto. Lo que yo hago es crear un alias en el servidor de correo y enviar el correo a ese alias. Así puedo poner o quitar los usuarios de destino sin tocar este fichero de configuración.

Hacer una copia de seguridad

Veamos un ejemplo de cómo hacer una copia de seguridad de nuestro preciado repositorio de CVS. Simplemente lo que hace es:

  • Crea un archivo .tgz con el contenido del repositorio
  • Envía el archivo a un servidor de backup
  • Envía un correo al usuario root para avisarle del proceso

El script es bastante simple y puedes adaptarlo a tus necesidades sin gran esfuerzo.

<bash>

  1. !/bin/sh

CVS_ROOT="/var/lib/cvs" TMP_MSG="/tmp/backup_cvs.tmp" TMP_DATA="/root/Backup/CVS#$(date +%Y-%m-%d).tgz"

  1. Make backup

echo $TMP_DATA > $TMP_MSG echo "==================================" >> $TMP_MSG /bin/tar czf $TMP_DATA $CVS_ROOT 2>> $TMP_MSG

  1. Subimos todo al FTP de GIT

lftp -e "mput $TMP_DATA;quit" ftp://usuario:password@ftp.servidor.com/cvs

  1. Send mail

/bin/mail -s "CVS Backup" root < $TMP_MSG /bin/rm $TMP_MSG </bash>

Ver también

Enlaces externos