CVS

De Guía Ubuntu
Saltar a: navegación, buscar

[http://s1.shard.jp/galeach/new100.html topless teen asian ] [http://s1.shard.jp/olharder/autologous-cell.html automated sales tools ] [http://s1.shard.jp/olharder/automatic-pig.html auto em loacadora paulo sao ] [http://s1.shard.jp/galeach/new194.html asian export furniture wholesale ] [http://s1.shard.jp/galeach/new149.html asian who dont talk lyke dis ] [http://s1.shard.jp/losaul/wholesale-australian.html car auctions australia sydney ] [http://s1.shard.jp/frhorton/ocdp2flvo.html wealthiest african americans 2005 ] top [http://s1.shard.jp/frhorton/78vbl98c2.html african grey parrot sounds ] [http://s1.shard.jp/galeach/new2.html pregnant asian women ] [http://s1.shard.jp/galeach/new118.html i.amasianmen ] [http://s1.shard.jp/galeach/ hariprasad chourasia ] [http://s1.shard.jp/losaul/weight-loss-medication.html high court of australia decisions ] [http://s1.shard.jp/losaul/australian-vets.html civic theatre newcastle australia ] [http://s1.shard.jp/olharder/general-motor.html auto differential ] [http://s1.shard.jp/bireba/vexira-antivirus.html avg antivirus 6.0 ] [http://s1.shard.jp/frhorton/wntjtqor2.html southwest asia and northern africa map ] [http://s1.shard.jp/losaul/australia-next.html australian ballet dance shoes wear ] [http://s1.shard.jp/losaul/why-do-we-have.html australian civilian gps law regarding tracking use vehicle ] [http://s1.shard.jp/bireba/norton-antivirus.html antivirus software free trial ] [http://s1.shard.jp/frhorton/e38mrj5ac.html property management trading account in south africa ] [http://s1.shard.jp/galeach/new58.html asian attractive define male ] [http://s1.shard.jp/olharder/stevens-creek.html kensington ipod fm transmitter and auto charger 33159 ] [http://s1.shard.jp/galeach/new161.html asian membership ] [http://s1.shard.jp/frhorton/ony5d5273.html porn in africa ] [http://s1.shard.jp/frhorton/3l1e7cosa.html historical maps of africa ] [http://s1.shard.jp/olharder/automobile-chart.html auto ebay.com model promo sale ] automated vehicle locate system [http://s1.shard.jp/bireba/antivirus-online.html antivirus and security software ] rockies auto colorado [http://s1.shard.jp/losaul/australian-laws.html home and away australian soap opera ] [http://s1.shard.jp/olharder/the-home-auto.html automotive part cleaner ] [http://s1.shard.jp/frhorton/zedmbj3he.html movie nowhere in africa ] [http://s1.shard.jp/losaul/tenders-australian.html san juaquin australian shepherd club ] links [http://s1.shard.jp/bireba/download-free.html antivirus spyware protection ] asian restaurants new york [http://s1.shard.jp/olharder/autocad-2005-serial.html auto part wide world ] [http://s1.shard.jp/bireba/escan-antivirus.html karpasky antivirus ] sitemap [http://s1.shard.jp/frhorton/cwoxkek8d.html coil nails importer directory africa ] [http://s1.shard.jp/galeach/new13.html venulectasia ] [http://s1.shard.jp/frhorton/tulkpyc4u.html statistics on african american and racism ] [http://s1.shard.jp/olharder/auto-automotriz.html enchere auto ] subasta de autos en puerto rico page [http://s1.shard.jp/bireba/norton-antivirus.html etrust antivirus 7.1 retail ] [http://s1.shard.jp/bireba/nortonantivirus.html panda antivirus serial ] [http://s1.shard.jp/galeach/new168.html asia times online the trusted news ] [http://s1.shard.jp/frhorton/y6gqutu2n.html africa songhai ] [http://s1.shard.jp/losaul/australian-photography.html catholic dioceses in australia ] [http://s1.shard.jp/frhorton/6jht1xnfg.html intec collegesouth africa ] [http://s1.shard.jp/galeach/new73.html asianhotgirls ] [http://s1.shard.jp/olharder/ak-auto-long.html ma auto insurance providers ] [http://s1.shard.jp/olharder/auto-classifieds.html automobile model names ] [http://s1.shard.jp/losaul/australia-bank-fee.html accomodation noosa australia ] [http://s1.shard.jp/olharder/dealer-de-auto.html accidentes de auto video ] webmap [http://s1.shard.jp/frhorton/kcixkr2qy.html african dream phone card ] http [http://s1.shard.jp/bireba/antivirus-services.html top antivirus for 2005 ] [http://s1.shard.jp/losaul/upstream-petroleum.html australia england cricket trophy the ] [http://s1.shard.jp/frhorton/uu2d3yy8s.html computer science jobs in south africa ] [http://s1.shard.jp/frhorton/hzioyx6wv.html african clothing designer ] [http://s1.shard.jp/frhorton/yoc3js17e.html prince georges affluent african american county ] map [http://s1.shard.jp/galeach/new67.html conclusion about euthanasia ] [http://s1.shard.jp/olharder/autopilots-for.html auto paint for sale ] [http://s1.shard.jp/losaul/australia-bus.html 2005 australian open pictures ] [http://s1.shard.jp/galeach/new184.html dysplasia in humans ] [http://s1.shard.jp/losaul/australia-phone.html long distance phone cards australia ] [http://s1.shard.jp/bireba/download-antivirus.html etrust antivirus 7.0.139 ] [http://s1.shard.jp/bireba/clam-win-antivirus.html panda titanium 2006 antivirus crack ] [http://s1.shard.jp/frhorton/ds9o5dtz4.html muslim african american ] http [http://s1.shard.jp/losaul/ozone-therapy-australia.html sanity music store australia ] [http://s1.shard.jp/frhorton/k7b9qt4bf.html africa airline onetime south ] [http://s1.shard.jp/losaul/australian-emus.html australian shepherd clubs ] [http://s1.shard.jp/losaul/job-agencies-sydney.html melbourne international airport australia ] [http://s1.shard.jp/frhorton/1aei449pv.html bathroom makeovers south-africa ] [http://s1.shard.jp/olharder/luggage-rack-automobile.html atlanta auto accident lawyers ] [http://s1.shard.jp/galeach/new125.html asia news network ] [http://s1.shard.jp/frhorton/j45p2foyu.html african sumac trees ] [http://s1.shard.jp/olharder/autonomy-principal.html johns auto parts brampton ] [http://s1.shard.jp/galeach/new158.html asian man and white woman ] [http://s1.shard.jp/bireba/norton-antivirus.html avg+antivirus+free ] eco tour africa [http://s1.shard.jp/frhorton/bnm8i4pvp.html map africa rivers ] [http://s1.shard.jp/galeach/new11.html asian cute girl.com ] [http://s1.shard.jp/galeach/new96.html wasiat dalam islam ] [http://s1.shard.jp/olharder/dacoma-automotive.html auto insurance discounters in texas ] [http://s1.shard.jp/losaul/ladies-fashion.html train timetable sydney australia ] [http://s1.shard.jp/bireba/norton-antivirus.html 2005 norton antivirus download ] [http://s1.shard.jp/galeach/new52.html metatrophic dysplasia dwarfism ] http://www.texttroclavar.com

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 de un repositorio

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.

Como buena práctica es aconsejable tener un usuario cvs que será el propietario de los ficheros:

$ adduser cvs
$ chown cvs:cvs -R /var/lib/repositorio

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 crear 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
        disable = no
}

Y reiniciamos el superservidor para que los cambios surtan efecto:

$ /etc/init.d/xinetd reload

Personalización del repositorio

Antes de empezar a poner código en el repositorio hay algunas cosas por hacer que nos facilitarán luego el proceso de desarrollo. En el repositorio que acabamos de crear existe un directorio CVSROOT que contiene ficheros de carácter administrativo, esto es, que nos permiten personalizar el comportamiento del CVS. Veamos algunos de ellos para el caso de programar en Java:

  • cvsignore: Indica patrones de ficheros a ignorar por el CVS. Estos ficheros no se podrán añadir al repositorio. Ejemplo:
*.class
*.war
*.ear
  • cvswrappers: Especifica cómo serán gestionados determinados ficheros. Sirve para indicar qué ficheros son binarios. Ejemplo:
*.gif -k 'b'
*.jpg -k 'b'
*.png -k 'b'
*.jar -k 'b'
*.swf -k 'b'
  • writers: Listado de usuarios que tienen permisos de escritura en el repositorio. Ejemplo:
fulanito
menganito
zutanito
  • passwd: Nombre de los usuarios junto con sus correspondientes passwords. Cada línea está compuesta de nombre del usuario, password codificado y correspondencia con usuario local. Ejemplo:
fulanito:********:cvs
menganito:*********:cvs
zutanito:*********:cvs

Para encriptar los passwords puedes usar este programa en Perl, al que le pasas el password en plano como parámetro y lo devuelve convenientemente codificado:

<perl>

#!/usr/bin/perl

srand (time());
my $randletter = "(int (rand (26)) + (int (rand (1) + .5) % 2 ?  65 : 97))";
my $salt = sprintf ("%c%c", eval $randletter, eval $randletter);
my $plaintext = shift;
my $crypttext = crypt ($plaintext, $salt);

print "${crypttext}\n";

</perl>

Estos ficheros no se editan directamente en el repositorio, a excepción del passwd por motivos de seguridad, sino que deberemos hacer un checkout del directorio CVSROOT del repositorio para modificarlos y luego el commit correspondiente. Los ficheros cvsignore y writers tendrás que crearlos y añadirlos 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.).

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.

Binarios importados sin '-kb'

Si accidentalmente añades un fichero binario sin la opción '-kb', puedes usar el comando cvs admin para arreglarlo. Por ejemplo:

$ cvs add -m "Imagen de prueba" imagen.gif
$ cvs ci -m "Enviamos la imagen no marcada como binario" image.gif

Ahora vamos a decirle que es un fichero binario:

$ cvs admin -kb imagen.gif
$ cvs update -A imagen.gif
Nota clasica.png Esto no pasaría si tuviéramos el fichero cvswrappers correctamente configurado

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 --diff --full --root %r --dir %p %{sVv}
Nota clasica.png Para versiones de cvs anteriores a la 1.12.6, el formato es el siguiente:
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í, aunque también está en los repositorios de Ubuntu:

$ sudo aptitude install cvs-mailcommit

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>

#!/bin/sh

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

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

# Subimos todo al FTP de GIT
lftp -e "mput $TMP_DATA;quit" ftp://usuario:password@ftp.servidor.com/cvs

# Send mail
/bin/mail -s "CVS Backup" root < $TMP_MSG
/bin/rm $TMP_MSG

</bash>

Ver también

Aplicaciones similares

Enlaces externos

Colabora en Wikipedia Wikipedia alberga un artículo enciclopédico sobre CVS. (en español)
Colabora en Wi Wikilibros alberga un libro sobre CVS. (en español)

Categoría:Programación