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.
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
Lo siguiente configurará el intérprete de comandos para acceso al repositorio CVS.
Acceso de sólo lectura:
$ export CVSROOT=:pserver:anonymous@cvs.sf.net:/cvsroot/qref $ cvs login $ cvs -z3 co qref
Acceso local desde el intérprete de comandos en la misma máquina:
$ export CVSROOT=/var/lib/cvs
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.
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.
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
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
Para conseguir la última versión del CVS use "tomorrow":
$ cvs ex -D tomorrow nombre_módulo
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 ...
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
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
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...
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.
El metapaquete subversion-server
depende de los paquetes
libapache2-dav-svn
y subversion-tools
necesarios para
configurar el servidor.
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
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.
Las siguientes secciones le enseña cómo usar diferentes comandos 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í.
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
Guía de referencia Debian
CVS, lun abr 3 22:57:45 UTC 2005osamu@debian.org
wecharri@infovia.com.ar