[ anterior ] [ Contenidos ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ 14 ] [ 15 ] [ A ] [ siguiente ]


Guía de referencia Debian
Capítulo 12 - Sistemas de control de versiones


12.1 Sistema de versiones concurrentes (CVS)

Consulte /usr/share/doc/cvs/html-cvsclient, /usr/share/doc/cvs/html-info, /usr/share/doc/cvsbook con la ayuda de lynx o ejecute info cvs o man cvs para una información más detallada.


12.1.1 Instalar el servidor CVS

La siguiente configuración permite que sólo un miembro del grupo "src" pueda hacer envíos al repositorio CVS (mediante el comando 'commit') y que la administración del CVS pueda llevarse a cabo únicamente por un miembro del grupo "staff" de modo de reducir las posibilidades de conflicto.

     # cd /var/lib; umask 002 ; mkdir cvs # [Woody] FSH
     # apt-get install cvs cvs-doc cvsbook
     # export CVSROOT=/var/lib/cvs
     # cd $CVSROOT
     # chown root:src .         # "staff": restricción importante para un
                                #  proyecto nuevo
     # chmod 3775 .             #  Si usa "staff", escribir 2775
     # cvs -d /var/lib/cvs init #  ¡resulta más seguro especificar
                                #  explícitamente -d!
     # cd CVSROOT
     # chown -R root:staff .
     # chmod 2775 .
     # touch val-tags 
     # chmod 664 history val-tags
     # chown root:src history val-tags

12.1.2 Sesiones CVS de ejemplo

Lo siguiente configurará el intérprete de comandos para acceso al repositorio CVS.


12.1.2.1 CVS anónimo (únicamente para descargar)

Acceso de sólo lectura:

     $ export
     CVSROOT=:pserver:anonymous@cvs.sf.net:/cvsroot/qref
     $ cvs login
     $ cvs -z3 co qref

12.1.2.2 Uso del servidor CVS local

Acceso local desde el intérprete de comandos en la misma máquina:

     $ export CVSROOT=/var/lib/cvs

12.1.2.3 Uso del pserver en un CVS remoto

Acceso remoto sin SSH (uso del protocolo RSH en el cvs)

     $ export CVSROOT=:pserver:cuenta@cvs.loquesea.com:/var/lib/cvs
     $ cvs login

Propenso a ataques espías.


12.1.2.4 Uso de un CVS remoto mediante ssh

Acceso remoto con SSH:

     $ export CVSROOT=:ext:cuenta@cvs.loquesea.com:/var/lib/cvs

o para SourceForge:

     $ export CVSROOT=:ext:cuenta@cvs.sf.net:/cvsroot/qref

También puede utilizar la autenticación RSA (Conectarse con pocas contraseñas, Sección 9.5.3), que evita la solicitud de la contraseña.


12.1.2.5 Crear un archivo CVS nuevo

Para,

     ITEM                  VALOR                           SIGNIFICADO
     Árbol del proyecto:   ~/proyecto-x         Todos los archivos fuente
     Nombre del proyecto:  proyecto-x           Nombre para este proyecto
     Nombre del proveedor: Rama-principal       Etiqueta para toda la rama
     Etiqueta de versión:  Versión-inicial      Etiqueta para una versión
                                                           específica

Entonces,

     $ cd ~/proyecto-x          # para entrar en el directorio del proyecto
      ... crear un árbol ...
     $ cvs import -m "Comienzo del proyecto-x" proyecto-x Rama-principal Versión-inicial
     $ cd ..; rm -R ~/proyecto-x

12.1.2.6 Trabajando con CVS

Para recordar y trabajar con los fuentes locales del proyecto-x en un archivo CVS:

     $ cd                            # para ubicarse en la zona de trabajo.
     $ cvs co proyecto-x             # copia los fuentes del repositorio CVS
                                     # a la máquina local
     $ cd proyecto-x
      ... efectuar los cambios ...
     $ cvs diff -u                   # similar a diff -u repository/ local/
     $ cvs ci -m "Describir cambio"  # guarda los fuentes locales en el CVS
     $ vi archivo_nuevo
     $ cvs add archivo_nuevo
     $ cvs ci -m "Se añadió archivo_nuevo"
     $ cvs up                  # actualiza a la última versión del CVS
      ... cuidado con las líneas que comienzan con "C nombre_archivo"
      ... el código sin modificar se renombra como `.#nombre_archivo.version'.
      ... Busque "<<<<<<<" y ">>>>>>>" en
          nombre_archivo.
     
     $ cvs tag Release-1       # añade etiqueta de versión
     ... hacer otras modificaciones ...
     $ cvs tag -d Release-1    # elimina etiqueta de versión
     $ cvs ci -m "otros comentarios"
     $ cvs tag Release-1       # vuelve a añadir la etiqueta de versión
     $ cd                      # para volver al área de trabajo.
     $ cvs co -r Versión-inicial -d antiguo proyecto-x 
     ... obtiene la versión original y la ubica en el directorio 'antiguo'
     $ cd antiguo
     $ cvs tag -b Versión-inicial-modif # crea la etiqueta de la rama (-b)
      ... ahora puede trabajar sobre la versión original (Etiqueta=sticky)
     $ cvs update -d -P    # no crea directorios vacíos
      ... el árbol de fuentes tiene ahora la etiqueta sticky "Versión-inicial-modif"
      ... trabaje en esta rama
     $ cvs up -d -P        # sicroniza los cambios en la rama con el resto
     $ cvs ci -m "verificación hecha en la rama"
     $ cvs update -kk -A -d -P
      ... elimina la etiqueta sticky y descarta el contenido
      ... actualiza  desde el tronco principal sin reemplazar palabras claves
     $ cvs update -kk -d -P -j Versión-inicial-modif
      ... Añade rama  Versión-inicial-modif en el tronco
      principal 
      ... sin el reemplazo de palabras claves. Solucionar confictos con el editor.
     $ cvs ci -m "Creación Versión-inicial-modif"
     $ cd
     $ tar -cvzf antiguo-proyecto-x.tar.gz antiguo  # crear
     archivo, -j para bz2
     $ cvs release -d antiguo     # eliminar fuentes locales (opcional)
     -n      no ejecuta ningún comando que cambie el disco
     -t      muestra los mensajes de la actividad en el cvs

12.1.2.7 Exportar archivos desde el CVS

Para conseguir la última versión del CVS use "tomorrow":

     $ cvs ex -D tomorrow nombre_módulo

12.1.2.8 Administrar el CVS

Añadir un alias al proyecto (servidor local):

     $ su - admin           # un miembro del equipo
     $ export CVSROOT=/var/lib/cvs
     $ cvs co CVSROOT/modules
     $ cd CVSROOT
     $ echo "px -a proyecto-x" >>modules
     $ cvs ci -m "Ahora px es un alias del proyecto-x"
     $ cvs release -d .
     $ exit                 # o control-D para salir de 'su'
     $ cvs co -d proyecto px 
      ... proyecto-x (alias:px) del CVS al directorio proyecto
     $ cd proyecto
      ... realizar cambios ...

12.1.3 Resolución de problemas


12.1.3.1 Permisos de los archivos en el repositorio

CVS no sobreescribe el archivo del repositorio actual sino que lo reemplaza por otro. Por lo tanto el permiso de escritura en el directorio del repositorio resulta crítico. Cada vez que se cree un nuevo repositorio ejecute lo siguiente para evitar cualquier problema.

     # cd /var/lib/cvs
     # chown -R root:src repositorio
     # chmod -R ug+rwX   repositorio
     # chmod    2775     repositorio  # si es necesario para éste y sus
                                                 # subdirectorios

12.1.3.2 El bit de ejecución

Cuando se abandona la sesión (check-out) se conserva el bit de ejecución. Ante cualquier problema de permisos de ejecución sobre un archivo puede cambiar sus permisos en el repositorio CVS con el siguiente comando.

     # chmod ugo-x nombre_archivo

12.1.4 Comandos del CVS

Veamos los comandos del CVS con sus respectivos atajos.

     {add|ad|new} [-k kflag] [-m 'mensaje'] archivos...
     {admin|adm|rcs} [opciones-rcs] archivos...
     {annotate|ann} [opciones] [archivos...]
     {checkout|co|get} [opciones] módulos...
     {commit|ci|com}   [-lnR]  [-m  'mensaje_registro'  |  -f  archivo] \
             [-r revision] [archivos...]
     {diff|di|dif} [-kl] [opciones_rcsdiff] [[-r rev1 | -D fecha1] \
             [-r rev2 |  -D fecha2]] [archivos...]
     {export|ex|exp} [-flNn] -r rev|-D fecha [-d dir] [-k kflag] módulo...
     {history|hi|his} [-report] [-flags] [-options args] [archivos...]
     {import|im|imp} [-options] repositorio nombre_proveedor etiq_versión...
     {login|logon|lgn}
     {log|lo|rlog} [-l] opciones-rlog [archivos...]
     {rdiff|patch|pa} [-flags] [-V vn] [-r t|-D d [-r t2|-D d2]] módulos...
     {release|re|rel} [-d] directorios...
     {remove|rm|delete} [-lR] [archivos...]
     {rtag|rt|rfreeze} [-falnR]  [-b]  [-d]  [-r  etiqueta  |  -D  fecha] \
              sym_bolic_tag módulos...
     {status|st|stat} [-lR] [-v] [archivos...]
     {tag|ta|freeze} [-lR] [-F] [-b] [-d] [-r etiqueta | -D fecha]  [-f] \
              sym_bolic_tag [archivos...]
     {update|up|upd} [-AdflPpR] [-d] [-r tag|-D fecha] archivos...

12.2 Subversion

Subversion es la siguiente generación del sistema de control de versiones destinado a reemplazar CVS. Actualmente, los desarrolladores consideran que se encuentra en la etapa "alfa" pero es muy probable que sea lo suficientemente estable para la mayoría de los usuarios. A la fecha de escribir este documento, Subversion se encuentra en la rama inestable de Debian.


12.2.1 Instalando el servidor Subversion

El metapaquete subversion depende de los paquetes libapache2-svn y subversion-tools necesarios para configurar el servidor.


12.2.1.1 Configurando un repositorio

Actualmente, el paquete subversion no configura el repositorio y, por lo tanto, hay que hacerlo en forma manual. Una posible ubicación del repositorio es /var/local/repos.

Cree el directorio:

     # mkdir -p /var/local/repos

Cree la base de datos del repositorio:

     # svnadmin create /var/local/repos

Permitir que el servidor WWW escriba en el repositorio:

     # chown -R www-data:www-data /var/local/repos

12.2.1.2 Configurando Apache2

Para permitir el acceso al repositorio mediante la autenticación de usuario, añada lo siguiente al /etc/apache2/httpd.conf:

     <Location /repos>
       DAV svn
       SVNPath /var/local/repos
       AuthType Basic
       AuthName "Repositorio Subversion"
       AuthUserFile /etc/subversion/passwd
       <LimitExcept GET PROPFIND OPTIONS REPORT>
         Require valid-user
       </LimitExcept>
     </Location>

A continuación, cree el archivo de autenticación de usuario mediante el comando:

     htpasswd2 -c /etc/subversion/passwd nombre_usuario

Reinicie Apache2 y podrá acceder al nuevo repositorio de subversion desde la URL http://nombre_máquina/repos.


12.2.2 Migrando un repositorio CVS a Subversion


12.2.3 Ejemplos de uso de Subversion

Las siguientes secciones le enseña cómo usar diferentes comandos en Subversion.


12.2.3.1 Crear un archivo nuevo en Subversion

Para crear un nuevo archivo en Subversion, escriba lo siguiente:

     $ cd ~/su-proyecto         # vaya a su directorio fuente
     $ svn import http://localhost/repos su-proyecto \
       nombre-proyecto -m "importar proyecto inicial"

Esto crea un directorio llamado nombre-proyecto en su repositorio de Subversion que contiene sus archivos del proyecto. Vea en http://localhost/repos/ para ver si está allí.


12.2.3.2 Trabajando con Subversion

Trabajando con el proyecto-y usando Subversion:

     $ cd                            # ubicarse en la zona de trabajo
     $ svn co http://localhost/repos/proyecto-y  # Obtener los fuentes
     $ cd proyecto-y
      ... realizar algunas tareas ...
     $ svn diff                      # similar a diff -u repositorio/ local/  
     $ svn revert archivo_modificado      # deshace los cambios a un archivo
     $ svn ci -m "Describir los cambios"  # efectúa los cambios en el repositorio
     $ vi nuevo_archivo_añadido
     $ svn add nuevo_archivo_añadido
     $ svn add dir_nuevo               # añade todos los archivos al dir_nuevo en forma recursiva all files in new_dir
     $ svn add -N dir_nuevo2           # añade un directorio en forma no recursiva
     $ svn ci -m "Se añadieron nuevo_archivo_añadido, dir_nuevo, dir2_nuevo"
     $ svn up                        # sincronización con la última versión del repositorio
     $ svn log                       # mostrar todos los cambios realizados
     $ svn copy http://localhost/repos/proyecto-y \
           http://localhost/repos/rama-proyecto-y \
           -m "creando mi rama del proyecto-y"  # ramificando proyecto-y
     $ svn copy http://localhost/repos/proyecto-y \
           http://localhost/repos/proy-y_release1.0 \
           -m "proyecto-y 1.0 versión"    # se añade etiqueta de versión
      ... obsérvese que el proceso de ramificación y el de añadido de etiquetas son
      prácticamente iguales. La única diferencia consiste en que las ramas son
      enviadas (commited) mientras que las etiquetas no.
     
      ... realizar cambios a la rama ...
     
     $ # fusionar la rama al tronco principal
     $ svn merge http://localhost/repos/proyecto-y \
        http://localhost/repos/rama-proyecto-y
     $ svn co -r 4 http://localhost/repos/proyecto-y # obtener la versión 4

[ anterior ] [ Contenidos ] [ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5 ] [ 6 ] [ 7 ] [ 8 ] [ 9 ] [ 10 ] [ 11 ] [ 12 ] [ 13 ] [ 14 ] [ 15 ] [ A ] [ siguiente ]


Guía de referencia Debian

CVS, jue ene 18 11:52:44 UTC 2007

Osamu Aoki osamu#at#debian.org
Coordinador de la traducción al español: Walter O. Echarri wecharri#at#infovia.com.ar
Autores, Sección A.1