- ¿Qué es el CVS, y por qué me debería interesar?
- El Servidor
- Comenzando
- Creación de un Módulo
- Check it out now, Funk Soul Brother!
- Actualizar el proyecto
- Agregar un archivo (o dos)
- CVS Commit
- Borrar archivos del servidor
- Cerrando
¿Qué es el CVS, y por qué me debería interesar?
CVS es Sistema de Versiones Concurrentes (Concurrent Version System). Originalmente CVS fue desarrollado para el entorno UNIX, pero ahora ambas aplicaciones cliente y servidor están disponibles para la plataforma Windows haciéndolos disponible para todos ustedes ahí afuera.Entonces, ¿qué es? Les digo, es una buena forma de mantener backups y versiones de su código (y archivos binarios pueden guardarse también) en un servidor. Además es posible que otros se unan a su proyecto sin la necesidad de seguir manualmente las versiones ni quién tiene la Última versión o release build1.
Quizás hayan oído acerca del Source Safe (de Microsoft Corporation), Perforce (de Perforce Software Inc) o alguno similar. CVS es todo eso, pero es 100% libre para cantidad ilimitada de usuarios, archivos y tiempo. No estoy diciendo que los otros sean malos o que deben ser excluidos solo porque salen dinero, pero CVS ofrece un sistema para resguardar/compartir barato y fácil-de-usar.
Entonces ¿por qué estoy escribiendo un tutorial sobre CVS cuando hay tantos por ahí? Bueno, antes que nada, no creo que necesiten todas las características fantásticas que ofrece para comenzar, y al principio solo les va a confundir, ya que el mundo de CVS es bastante grande. ¡Es más fácil primero enfocarse en la funcionalidad básica! Yo también me pregunto bastante a menudo acerca de CVS y cómo usarlo, así que ésta será una buena referencia para mi también, obviamente.
Agregando que los manuales de CVS describen absolutamente todo detalladamente (lo cual podría ser una buena idea), pero no creo que necesiten todo eso en este momento. Prefiero no asustarlos, y si quieren investigar después, siempre pueden leer esos manuales (Cederqvist es un buen lugar).
El Servidor
Pueden encontrar un servidor para GNU/Linux en www.cvshome.org. Un servidor para Windows puede ser encontrado en www.cvsnt.org.Ambos sitios tienen una buena explicación de como instalarlos. Yo solo he instalado el servidor para NT y no fue tan difícil.
Para empezar, es mas fácil intentar obtener acceso de alguien que ya esté corriendo un servidor, ya que cuando no sabés lo que podés hacer con CVS, lo más fácil no es setear un servidor :-/
Comenzando
Ahora ya tienen seteado un servidor con algunos usuarios y contraseñas, entonces lo primero que hay que hacer es setear la variable de entorno CVSROOT escribiendo (en la linea de comandos de Windows):set cvsroot=:pserver:username@some.server.com:/test
Donde username es (duh) tu nombre de usuario, some.server.com es tu DNS o número de IP de tu servidor CVS. /test es el nombre del repositorio seteado en el servidor. Esto es así para que múltiples grupos de usuarios (hasta niveles de proyectos inclusive, si es apropiado) puedan trabajar en un servidor CVS.
Después de eso, para loguearse usamos el siguiente comando:
cvs login
Donde me logueo con el nombre de usuario especificado por la variable de entorno CVSROOT. Entonces se mostrará una petición para la contraseña, y por supuesto escribirán la contraseña especificada en el servidor. El servidor debería decirles que están logueados. Si no, algo no esta correcto en su instalación y deben encontrar qué es lo que está mal.
El servidor tiene un directorio específico en donde todos los proyectos (incluyendo los fuentes) se guardarán. Como usuarios, no es necesario preocuparnos por esto ya que es manejado por el servidor.
Creación de un Módulo
Un módulo es un proyecto dentro del repositorio. En nuestro grupo, usamos un módulo por cada proyecto porque tener todos los proyectos bajo el mismo techo se puede complicar después de un tiempo. Es mas sencillo mantener módulos pequeños. Al menos así pensamos nosotros, ustedes formen su propia opinión por experiencia, pero para comenzar, trataremos solamente de crear un módulo sencillo y trabajar desde ahí.Crear un módulo vacio puede resultar medio complicado, pero el comando 'import' nos va a ayudar con esto. Asumiré que han creado un directorio local en sus computadoras donde quieran guardar sus módulos, algunpath/nombrerepositorio creo que es un muy buen lugar para comenzar, y que están parados en ese directorio. Inspeccionemos los comandos necesarios para crear el módulo "myproject":
md myproject cd myproject cvs import -m "Creating my first project" myproject thec start rd myproject
El comando cvs import trabaja así.
El -m seguido por "" es simplemente un mensaje de log, que guardará lo que escribas ahí. Escriban lo que les ocurra. Al CVS le gusta tener uno, así que solamente haganlo :-)
El próximo argumento, myproject, es el nombre del módulo, el mismo nombre que el directorio2 servirá.
thec es la etiqueta de vendedor. Solo escribí mi nombre ahí para que el resto pueda ver que fui yo el que comenzó el proyecto, pero no es nada importante en realidad, lo mismo que el último parámetro; el llamado etiqueta de lanzamiento. Si quieren obtener la primera versión del repositorio (si ustedes agregan archivos a su directorio-myproject antes de ejecutar el comando, serán agregados) pueden usar esta etiqueta, pero la dejaremos por ahora.
¡Ahora tenemos un nuevo módulo con el cual trabajar!
Check it out now, Funk Soul Brother!
3Dado que queremos que nuestra copia local siga en contacto con CVS, CVS guarda directorios CVS (maldición, cuantas veces voy a tener que escribir CVS ;-) ) en todos sus directorios de proyecto. Como sea, después de importar, ningún directorio CVS es creado y por eso lo borramos para traerlo nuevamente. Ejecuten esto en su repositorio local:
cvs checkout myproject
No hay mucho que pensar acerca de eso, myproject es nuestro proyecto y lo estamos trayendo del repositorio, pero si examinan un poco lo que pasó verán que un directorio, myproject, fue creado y dentro hay un directorio CVS que mantendrá las versiones locales, y unirá nuestros archivos de código con las versiones del servidor. Señoras y Señores esto es pura magia, pero afortunadamente, no necesitamos saber como el servidor maneja las versiones (fuh).
Actualizar el proyecto
Antes de cada commit (explicado mas adelante) y antes que empieces a escribir el código del día, lo mejor es traerse la última versión de los archivos, para asegurarse que utilizando la última versión disponible. Nótese que esto NO actualiza nada de su código al servidor, si hicieron algunos bugs desde anoche, ¡no se preocupen, nadie los verá ya que tienen control sobre la actualización de código! :-)cvs update -d -P cvs up -d -P
La segunda línea hace exactamente lo mismo que la primera, es solo una abreviación. La opción -d le dice que quieren buscar en todos los subdirectorios por actualizaciones y -P especifica que no queremos descargar directorios vacíos. Créanme, solo aprendan a hacerlo de esta manera y nunca se preguntarán por qué no pueden borrar directorios dentro del servidor CVS ;-)
Agregar un archivo (o dos)
Agregar un archivo es tan fácil como el uno dos tres, solo creen el archivo dentro del directorio myproject así podemos continuar. Digamos que crearon "test1.h", "test1.cpp", "test2.h" y así, podemos entonces agregar un archivo con una o algunos de las siguientes lineas:cvs add test1.h cvs add test2.h test2.cpp test3.h cvs add .h .cpp
Como pueden ver, pueden usar wildcards4 y especificar muchos archivos en una sola línea. Noten que, esto no actualiza realmente los archivos al servidor, dejenme agregar solo una manera más de agregar archivos y estamos listos para la actualización.
cvs add -kb mypicture.jpg
Por razones naturales, es difícil mantener archivos binarios dentro del servidor CVS como archivos normales de texto, entonces usamos la opción -kb para asegurarnos que sea tratado como binario en todo sentido. Esto significa que si hacen un cambio a la imagen, el archivo ENTERO será copiado en el próximo commit, y no solo la parte modificada como lo haría los archivos de código.
CVS Commit
Antes de hacer un commit, asegúrense que han ejecutado cvs update -d -P dado que baja las posibilidades de que literalmente estropeen las cosas. Solo escriban:cvs commit
Todos los archivos que han cambiado (verán una 'M' o una 'P' antes del nombre del archivo al hacer un cvs update) y agregado serán actualizados al servidor, y el resto de los desarrolladores podrán obtenerlos la próxima vez que usen cvs update. ¿Fácil? Debería.
Borrar archivos del servidor
Si quieren borrar archivos del servidor, lo primero que tienen que hacer es eliminar el archivo del dispositivo local:del test1.h cvs remove test1.h cvs commit
Por supuesto, ejecutan update antes de comenzar a borrar archivos. La próxima vez que los demás ejecuten su update, el archivo les será borrado en su lado también.
Cerrando
Esto fue lo más básico de CVS. si ustedes quieren leer más, les recomiendo que exploren www.cvshome.org por recursos. Pero yo quería mostrarles lo fácil que puede ser empezar a usar realmente un sistema de control de revisiones, lo cual es realmente un buen punto de comienzo en su desarrollo, ya que instantaneámente hace más fácil hacer copias de resguardo, compartir y planificar4. Están obligados a pensar antes de crear la estructura de directorios de sus proyectos, y eso no puede ser malo :-)Si piensan que este tutorial los ayudó, me encantaría escuchar sobre ustedes, así que, por favor, escríbanme a thec@home.se con comentarios. Si piensan que apesta o que CVS apesta, no los puedo ayudar ;-)
Albert "thec" Sandberg
Programador de 'Outbreak'
1 - Release Build:
No encontre una traducción exacta para esta conjunto de palabras, que se podría entender como la última versión ejecutable o compilada.
2 - Directorio:
El autor utiliza constantemente la palabra carpeta y directorios como la misma cosa; me tome el atrevimiento de utilizar siempre la palabra directorio para referirme a esta estructura del sistema de archivos.
3 - Check It Out Now, Funk Soul Brother:
El autor juega con una expresión norteamericana, la cual tiene parecido a un commando de CVS: checkout. Traducido literalmente la expresión quedaría algo asi: Sacalo ahora, hermano de alma Funk. Si busamos una expresion parecida en nuestra habla cotidiana sería: ''Mira que loco, bolu**"".
4 - Wildcards:
Un wildcard es un caracter especial el cual el interprete de comandos (DOS o BASH) remplaza para realizar busquedas ente otras.
Por ejemplo *.h será reemplazado por todos los archivos que terminen por .h.
