Control de versiones con Subversion

Revision 6065

Ben Collins-Sussman

Brian W. Fitzpatrick

C. Michael Pilato

Este trabajo se publica bajo la licencia Creative Commons Attribution License. Para ver una copia de esta licencia, visite http://creativecommons.org/licenses/by/2.0/ o envíe una carta a Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA.

(TBA)


Tabla de contenidos

Prólogo
Prefacio
Audiencia
Cómo leer este libro
Convenciones empleadas en este libro
Convenciones tipográficas
Iconos
Organización de este libro
Este libro es libre
Agradecimientos
De parte de Ben Collins-Sussman
De parte de Brian W. Fitzpatrick
De parte de C. Michael Pilato
1. Introducción
¿Qué es Subversion?
Historia de Subversion
Características de Subversion
Arquitectura de Subversion
Instalando Subversion
Componentes de Subversion
Un comienzo rápido
2. Conceptos básicos
El repositorio
Modelos de versionado
El problema de compartir archivos
La solución bloqueo-modificación-desbloqueo
La solución copiar-modificar-mezclar
Subversion en acción
Copias de trabajo
Revisiones
Cómo las copias de trabajo siguen la pista al repositorio
Las limitaciones de las revisiones mixtas
Resumen
3. Recorrido guiado
¡Ayuda!
Import
Revisiones: Números, Palabras Clave, y Fechas, ¡Dios Mío!
Números de revisión
Palabras clave de la revisión
Fechas de revisión
Descarga inicial
Ciclo básico de trabajo
Actualizar su copia de trabajo local
Hacer cambios en su copia de trabajo local
Examine sus cambios
svn status
svn diff
svn revert
Resolver conflictos (fusionando los cambios de otros)
Fusionando conflictos a mano
Copiando un fichero en su fichero de trabajo
Punting: Usando svn revert
Enviar sus cambios
Examinando el historial
svn log
svn diff
Examinando cambios locales
Comparando copia de trabajo con repositorio
Comparando repositorio con repositorio
svn cat
svn list
Una palabra final en el historial
Otros comandos útiles
svn cleanup
svn import
Sumario
4. Crear ramas y fusionarlas
¿Qué es una rama?
Usando ramas
Creando una rama
Trabajando con su rama
Conceptos clave sobre las ramas
Copiando cambios entre ramas
Copiando cambios específicos
Procedimientos ideales de fusionado
Realizar fusiones de forma manual
Visualización previa de fusiones
Teniendo en cuenta o ignorando ascendencia
Casos habituales de fusionado
Fusionando una rama completa con otra
Deshaciendo cambios
Resucitando elementos borrados
Cambiando la copia local de trabajo
Etiquetas
Creando una etiqueta simple
Creando una etiqueta compleja
Mantenimiento de ramas
Estructura del repositorio
Longevidad de los datos
Sumario
5. Administración del Repositorio
Cuestiones básicas acerca de el repositorio
Entendiendo las Transacciones y Revisiones
Propiedades no versionadas
Base de datos Berkeley
Creación y Configuración de Repositorios
Scripts de enganche
Configuración de la base de datos Berkeley
Mantenimiento del Repositorio
Una caja de herramientas del Administrador
svnlook
svnadmin
svndumpfilter
svnshell.py
Utilidades de la base de datos Berkeley
Limpieza del repositorio
Gestionando el espacio de almacenamiento
Restauración del repositorio
Migrando un repositorio
Copias de seguridad del repositorio
Añadiendo proyectos
Escogiendo el esquema de repositorio
Creando el esquema, importando los datos iniciales
Sumario
6. Configuración del servidor
Introducción
Modelo de red
Solicitudes y Respuestas
Client Credentials Caching
svnserve, un servidor personalizado
Invocando el Servidor
Autenticación y autorización integradas
Crear un fichero 'users' y realm
Activar control de acceso
Autenticación y autorización SSH
httpd, el servidor HTTP Apache
Requisitos previos
Configuración básica de Apache
Opciones de autenticación
Autenticación HTTP básica
Gestión de certificados SSL
Opciones de autorización
Control de acceso simple
Control de acceso por directorio
Regalitos extra
Navegar por el repositorio
Otras características
Ofrecer múltiples métodos de acceso al repositorio
7. Tópicos avanzados
Área de configuración de parámetros de ejecución
Estructura del área de configuración
La configuración y el registro de Windows
Opciones de configuración
Servers
Config
Propiedades
¿Por qué propiedades?
Manipulando propiedades
Propiedades especiales
svn:executable
svn:mime-type
svn:ignore
svn:keywords
svn:eol-style
svn:externals
Ajuste automático de propiedades
Repositorios externos
Ramas de proveedores
Procedimiento general de gestión de ramas de proveedor
svn_load_dirs.pl
8. Información para desarrolladores
Diseño de librería por capas
Capa de repositorio
Capa de acceso al repositorio
RA-DAV (Acceso al repositorio usando HTTP/DAV)
RA-SVN (Acceso al repositorio usando protocolo propio)
RA-Local (Acceso directo al repositorio)
Su librería RA aquí
Capa cliente
Usando las APIs
La librería Apache Portable Runtime
Requisitos de URL y ruta
Usando lenguajes distintos de C y C++
Dentro del área de administración de la copia local de trabajo
El fichero de entradas
Copias prístinas y propiedades de ficheros
WebDAV
Programando con áreas de memoria
Contribuyendo a Subversion
Únase a la comunidad
Obtenga el código fuente
Familiarícese con las reglas de la comunidad
Realizando y verificando sus cambios
Donar sus cambios
9. Referencia completa de Subversion
El cliente de línea de comando de Subversion: svn
Parámetros de svn
Subcomandos de svn
svn add
svn blame
svn cat
svn checkout
svn cleanup
svn commit
svn copy
svn delete
svn diff
svn export
svn help
svn import
svn info
svn list
svn log
svn merge
svn mkdir
svn move
svn propdel
svn propedit
svn propget
svn proplist
svn propset
svn resolved
svn revert
svn status
svn switch
svn update
svnadmin
Parámetros de svnadmin
Subcomandos de svnadmin
svnadmin create
svnadmin deltify
svnadmin dump
svnadmin help
svnadmin hotcopy
svnadmin list-dblogs
svnadmin list-unused-dblogs
svnadmin load
svnadmin lstxns
svnadmin recover
svnadmin rmtxns
svnadmin setlog
svnadmin verify
svnlook
Parámetros de svnlook
svnlook
svnlook author
svnlook cat
svnlook changed
svnlook date
svnlook diff
svnlook dirs-changed
svnlook help
svnlook history
svnlook info
svnlook log
svnlook propget
svnlook proplist
svnlook tree
svnlook uuid
svnlook youngest
svnserve
Parámetros de svnserve
A. Subversion para usuarios de CVS
Los números de revisión son diferentes ahora
Versiones de directorios
Más operaciones estando desconectado
Distinciones entre estado (status) y actualización (update)
Ramas y etiquetas
Propiedades de los metadatos
Resolución de conflictos
Ficheros binarios y traducción
Versionado de módulos
Autenticación
Convirtiendo un repositorio de CVS a Subversion
B. Solución de problemas
Problemas comunes
Problemas usando Subversion
Cada vez que intento acceder a mi repositorio, mi cliente de Subversion se cuelga
Cada vez que intento ejecutar svn, dice que mi copia de trabajo está bloqueada.
Estoy teniendo errores encontrando o abriendo un repositorio, pero sé que mi URL del repositorio es correcta.
Cómo puedo especificar una letra de un dispositivo Windows en una URL file://?
Estoy teniendo problemas haciendo operaciones de escritura en un repositorio de Subversion sobre una red.
Bajo Windows XP, a veces el servidor de Subversion parece enviar datos corruptos.
¿Cual es el mejor método de hacer un trazo de red de la conversación entre un cliente de Subversion y un servidor Apache?
Acabo de construir la distribución binaria, y cuando intento descargar Subversion, consigo un error sobre un "Esquema desconocido de URL."
¿Por qué el comando 'svn revert' requiere un target explícito? ¿Por qué no es recursivo por defecto? Este comportamiento difiere de casi el resto de subcomandos.
Cuando arranco Apache, mod_dav_svn se queja por una "mala versión de la base de datos", que encontró db-3.X, en vez de db-4.X.
Estoy obteniendo errores de "Función no implementada" en RedHat 9, y nada funciona. ¿Cómo arreglo esto?
¿Por qué el informe de cambios dice "(no author)" para los ficheros enviados o importados vía Apache (ra_dav)?
Estoy obteniendo errores ocasionales de "Acceso Denegado" en Windows. Parece que sucede al azar.
En FreeBSD, ciertas operaciones (especialmente svnadmin create) a veces se cuelgan.
Puedo ver mi repositorio en un navegador web, pero 'svn checkout' me da un error sobre "301 Movido Permanentemente".
Estoy intentando mirar una versión antigua de mi fichero, pero svn dice algo sobre "path no encontrado".
C. WebDAV y autoversionado
Conceptos básicos de WebDAV
WebDAV sencillo
Extensiones DeltaV
Subversion y DeltaV
Mapping Subversion to DeltaV
Soporte de autoversionado
La Alternativa mod_dav_lock
Interoperabilidad de autoversionado
WebFolders Win32
Mac OS X
Unix: Nautilus 2
Linux davfs2
D. Herramientas de terceras partes
Clientes y módulos
Language Bindings
Conversores de repositorios
Herramientas de mayor nivel
Herramientas de exploración de repositorios
E. Sobre esta traducción
Origen del proyecto
Quienes somos
Listas de correo
F. Copyright

Lista de figuras

1.1. Arquitectura de Subversion
2.1. Un sistema cliente/servidor típico
2.2. El problema a evitar
2.3. La solución bloqueo-modificación-desbloqueo
2.4. La solución copiar-modificar-mezclar
2.5. La solución copiar-modificar-mezclar (continuación)
2.6. El sistema de archivos del repositorio
2.7. El repositorio
4.1. Ramas de desarrollo
4.2. Estructura inicial del repositorio
4.3. Repositorio con nueva copia
4.4. Bifurcación de la historia de un fichero
8.1. Ficheros y directorios en dos dimensiones
8.2. Versionando el tiempo—¡la tercera dimensión!

Lista de tablas

2.1. URLs de Acceso al Repositorio
6.1. Comparación de tipos de servidores de red
8.1. Un corto inventario de las librerías de Subversion

Lista de ejemplos

5.1. Usando svnshell para navegar por el repositorio
5.2. txn-info.sh (Informe de transacciones pendientes)
6.1. A sample configuration for anonymous access.
6.2. A sample configuration for authenticated access.
6.3. A sample configuration for mixed authenticated/anonymous access.
7.1. Fichero ejemplo de registro (.reg).
8.1. Usando la capa de repositorio
8.2. Usando la capa de repositorio con Python
8.3. Un script simple para obtener una copia de trabajo local.
8.4. Contenido de un fichero .svn/entries típico.
8.5. Uso efectivo de áreas de memoria