Subversion proporciona muchos comportamientos opcionales que pueden ser controlados por el usuario. Muchas de estas opciones son del tipo que el usuario querría aplicar a todas las operaciones de Subversion. Así que en lugar de obligar a los usuarios a recordar parámetros de línea de comando para especificar estas opciones, y usarlos para todas y cada una de las operaciones que realicen, Subversion usa ficheros de configuración, segregados en un área de configuración de Subversion.
El área de configuración de Subversion es una jerarquía de dos capas de nombres de opciones y sus respectivos valores. Normalmente, esto se reduce a un directorio especial que contiene ficheros de configuración (la primera capa), que son simplemente ficheros de texto en un formato INI estándar (con “secciones”, las cuales forman la segunda capa). Estos ficheros pueden ser modificados fácilmente usando su editor de texto favorito (como Emacs o vi), y contienen directivas leídas por el cliente para determinar qué comportamiento opcional, de varios a elegir, prefiere el usuario.
La primera vez que el cliente de línea de comando
svn es ejecutado, crea un área
de configuración para el usuario. En sistemas
tipo Unix, este área aparece como el directorio
.subversion
en el directorio home del usuario.
En sistemas Win32, Subversion crea un directorio llamado
Subversion
, típicamente dentro del
área Application Data
del directorio
de perfil del usuario (el cual, por cierto, suele ser un
directorio oculto). No obstante, en esta plataforma la
ubicación exacta difiere de sistema a sistema, y es dictada
por el registro de Windows.
[33]
A lo largo del libro nos referiremos al área de
configuración de cada usuario usando su nombre Unix,
.subversion
.
Además del área de configuración de cada usuario,
Subversion también reconoce la existencia de un área
de configuración global de sistema. Ésta le permite al
administrador de sistema establecer valores por defecto para
todos los usuarios en una máquina determinada. Tenga en
cuenta que el área de configuración global de sistema por
sí sola no dicta reglas obligatorias—los parámetros
del área de configuración de cada usuario tienen prioridad
a los globales, y los parámetros proporcionados en la
línea de comando al programa svn
tienen la palabra final sobre el comportamiento. En
plataformas tipo Unix, el área de configuración
global de sistema estará posiblemente en el directorio
/etc/subversion
; en máquinas Windows,
se busca el directorio Subversion
dentro
de la ubicación común Application Data
(de nuevo, especificada por el registro de Windows).
A diferencia del caso específico de cada usuario, el
programa svn no intentan crear un área
de configuración global de sistema.
El área de configuración actualmente contiene tres
ficheros—dos ficheros de configuración
(config
y servers
),
y un fichero README.txt
que describe el
formato INI. En el momento de su creación, los ficheros
contienen los valores por defecto para cada una de las
opciones soportadas por Subversion, en su mayoría con
comentarios y agrupadas con descripciones textuales
que indican cómo los valores de cada opción afectan al
comportamiento de Subversion. Para cambiar un comportamiento
dado, sólo necesita cargar el fichero de configuración
adecuado en su editor de texto, y modificar el valor de la
opción deseada. Si en algún momento desea recuperar los
valores de configuración por defecto, puede simplemente
borrar (o renombrar) su directorio de configuración y
entonces ejecutar algún comando svn
inocuo, como svn --version. Entonces se
creará un nuevo directorio de configuración con el contenido
por defecto.
El área de configuración de cada usuario también contiene
una cache de datos de autenticación. El directorio
auth
agrupa un conjunto de
subdirectorios que contienen trozos de información guardada
usada por los varios métodos de autenticación soportados
por Subversion. Este directorio es creado de tal manera que
sólo su usuario tiene permiso para leer su contenido.
Además del área de configuración habitual basada en ficheros INI, los clientes de Subversion ejecutados en plataformas Windows también pueden usar el registro de Windows para almacenar datos de configuración. Los nombres de las opciones y sus valores son iguales que en los ficheros INI. La jerarquía “fichero/sección” también se mantiene, aunque especificada de una manera ligeramente diferente—en este esquema, los ficheros y las secciones son simples niveles del árbol del registro de claves.
Subversion busca valores de configuración global de
sistema bajo la clave
HKEY_LOCAL_MACHINE\Software\Tigris.org\Subversion
.
Por ejemplo, la opción global-ignores
,
que pertenece a la sección miscellany
del fichero config
, se encontraría en
HKEY_LOCAL_MACHINE\Software\Tigris.org\Subversion\Config\Miscellany\global-ignores
.
Los valores de configuración de cada usuario debería poder
encontrarlos en
HKEY_CURRENT_USER\Software\Tigris.org\Subversion
.
Las opciones de configuración almacenadas en el registro son procesadas antes que sus versiones en ficheros de texto, por lo que sus valores son sobreescritos por lo que contengan los ficheros de configuración. En otras palabras, en un sistema Windows, la prioridad de configuración sigue el siguiente orden:
Opciones de línea de comando
Ficheros INI de cada usuario
Valores de registro de cada usuario
Ficheros INI globales de sistema
Valores de registro globales de sistema
Además, el registro de Windows no soporta el concepto
de que algo esté “comentado”. No obstante,
Subversion ignorará cualquier opción cuyo nombre comience
con el carácter almohadilla (#
). Esto le
permite comentar de forma efectiva una opción de Subversion
sin tener que borrar la clave completa del registro,
obviamente simplificando el proceso de recuperación de
esta opción.
El cliente de línea de comando svn
nunca intenta modificar el registro de Windows, así que
no intentará crear ahí ningún área de configuración por
defecto. Puede crear las claves que necesita usando el
programa REGEDIT. Alternativamente,
puede crear un fichero .reg
, y entonces
hacer doble click sobre ese fichero desde una ventana de
explorador, lo cual hará que los datos sean fusionados en
su registro.
Ejemplo 7.1. Fichero ejemplo de registro (.reg).
REGEDIT4 [HKEY_LOCAL_MACHINE\Software\Tigris.org\Subversion\Servers\groups] [HKEY_LOCAL_MACHINE\Software\Tigris.org\Subversion\Servers\global] "#http-proxy-host"="" "#http-proxy-port"="" "#http-proxy-username"="" "#http-proxy-password"="" "#http-proxy-exceptions"="" "#http-timeout"="0" "#http-compression"="yes" "#neon-debug-mask"="" "#ssl-authority-files"="" "#ssl-trust-default-ca"="" "#ssl-client-cert-file"="" "#ssl-client-cert-password"="" [HKEY_CURRENT_USER\Software\Tigris.org\Subversion\Config\auth] "#store-auth-creds"="no" [HKEY_CURRENT_USER\Software\Tigris.org\Subversion\Config\helpers] "#editor-cmd"="notepad" "#diff-cmd"="" "#diff3-cmd"="" "#diff3-has-program-arg"="" [HKEY_CURRENT_USER\Software\Tigris.org\Subversion\Config\miscellany] "#global-ignores"="*.o *.lo *.la #*# .*.rej *.rej .*~ *~ .#*" "#log-encoding"="" "#use-commit-times"="" "#template-root"="" "#enable-auto-props"="" [HKEY_CURRENT_USER\Software\Tigris.org\Subversion\Config\tunnels] [HKEY_CURRENT_USER\Software\Tigris.org\Subversion\Config\auto-props]
El ejemplo anterior muestra el contenido de un fichero
.reg
que contiene algunas de las
opciones de configuración más usadas y sus valores por
defecto. Tenga en cuenta la presencia tanto de opciones
globales de sistema (para opciones relacionadas con proxys)
como opciones de cada usuario (programas de edición y
almacenamiento de claves, entre otras). Fíjese también
que todas las opciones están comentadas. Sólo tiene que
eliminar el carácter almohadilla (#
)
del comienzo de cada nombre de opción, y poner los valores
que desee.
En esta sección discutiremos las opciones específicas de parámetros de ejecución soportados actualmente por Subversion.
El fichero servers
contiene
opciones de configuración de Subversion relacionadas con
las capas de red. Hay dos nombres de sección especiales
en este fichero—groups
y global
. La sección
groups
es esencialmente una tabla
de referencias cruzadas. Las claves en esta sección son
nombres de otras secciones en el fichero; sus valores son
máscaras—palabras textuales
que posiblemente contienen caracteres comodines—que
son comparadas contra los nombres de la máquina a la que
se envían peticiones Subversion.
[groups] beanie-babies = *.red-bean.com collabnet = svn.collab.net [beanie-babies] … [collabnet] …
Cuando Subversion es usado en una red, intenta
encontrar una coincidencia entre el nombre del servidor
al que intenta llegar con un nombre de grupo de la
sección groups
. Si se encuentra tal
coincidencia, Subversion busca entonces una sección en el
fichero servers
cuyo nombre coincida
con el nombre del grupo. De esta sección obtendrá la
configuración de red que será usada.
La sección global
contiene la
configuración que será usada para todos los servidores
que no encajen con ninguna de las máscaras de la
sección groups
. Las opciones
disponibles en esta sección son exactamente las mismas
que aquellas válidas para otras secciones de servidor en
el fichero (excepto, por supuesto, la sección especial
groups
), y son las siguientes:
http-proxy-host
Especifica el nombre del ordenador proxy por el cual deben pasar sus peticiones Subversion basadas en HTTP. Por defecto es un valor vacío, lo que significa que Subversion no intentará enrutar peticiones HTTP por un ordenador proxy, y que en su lugar intentará contactar la máquina destino directamente.
http-proxy-port
Especifica el número de puerto del ordenador proxy que debe usar. Por defecto es un valor vacío.
http-proxy-username
Especifica el nombre de usuario que se le facilitará al proxy. Por defecto es un valor vacío.
http-proxy-password
Especifica la palabra clave que se le facilitará al proxy. Por defecto es un valor vacío.
http-timeout
Especifica la cantidad de tiempo, en segundos,
que se espera las respuestas del servidor. Si
experimenta problemas con una conexión de red lenta
que provoca que las operaciones de Subversion fallen
por tiempo de espera agotado, debería incrementar
el valor de esta opción. El valor por defecto es
0
, que indica a la librería HTTP
subyacente, Neon, que use su valor tiempo de espera
por defecto.
http-compression
Especifica si Subversion debería o no intentar
comprimir las peticiones de red realizadas a
servidores con soporte DAV. El valor por defecto es
yes
(aunque la compresión sólo
ocurrirá si esta característica fue compilada en la
capa de red). Cambie esto a no
para desactivar la compresión, por ejemplo para
depurar transmisiones por red.
neon-debug-mask
Esto es una máscara de bits que la librería HTTP
subyacente, Neon, usa para determinar el tipo
de información de depuración que debe mostrar.
El valor por defecto es 0
, el
cual elimina cualquier información de depuración.
Para más información sobre cómo Subversion usa Neon,
vea Capítulo 8, Información para desarrolladores.
ssl-authority-files
Esto es una lista delimitada con punto y coma de rutas a ficheros que contienen certificados de las autoridades de certificación (o CAs) que son aceptadas por el cliente de Subversion cuando se accede a un repositorio sobre HTTPS.
ssl-trust-default-ca
Modifique esta variable a yes
si quiere que Subversion confíe de forma automática
el conjunto de CAs por defecto que se distribuyen
con OpenSSL.
ssl-client-cert-file
Si una máquina (o grupo de máquinas) requieren un certificado de cliente SSL, normalmente se le preguntará por la ruta a su certificado. Ajustando esta variable a esta misma ruta, Subversion será capaz de encontrar la certificación de su cliente automáticamente sin tener que preguntarle. No hay un lugar estándar para almacenar certificados en disco; Subversion los obtendrá de cualquier ruta que especifique.
ssl-client-cert-password
Si el fichero de su certificado de cliente
SSL está cifrado con una frase, Subversion le
preguntará por ésta cada vez que el certificado vaya
a ser usado. Si considera esto un inconveniente (y no
le importa almacenar la palabra clave en el fichero
servers
), entonces modifique
esta variable para que contenta la clave. Ya no se
le preguntará más.
El fichero config
contiene el
resto de los parámetros de ejecución actualmente
disponibles con Subversion, aquellos no relacionados con
la conexión a red. Sólo hay un par de opciones en uso por
ahora, pero de nuevo están agrupadas en secciones pues se
esperan adiciones futuras.
La sección auth
contiene parámetros
relacionados con autenticación y autorización de Subversion
contra un repositorio. Éstos son:
store-auth-creds
Esto indica a Subversion si desea mantener
una caché o no de las credenciales de autenticación
proporcionadas por el usuario en respuesta a demandas
de autenticación por parte del servidor. El valor
por defecto es yes
. Cambie esto
a no
para desactivar la caché
de credenciales en disco. Puede reemplazar
esta opción en invocaciones individuales
del comando svn usando
la opción --no-auth-cache
como parámetro (para aquellos subcomandos que
la soportan). Para más información, vea “Client Credentials Caching”.
La sección helpers
controla qué
aplicaciones externas son usadas por Subversion para
realizar ciertas tareas. Las opciones válidas en esta
sección son:
editor-cmd
Especifica el programa que Subversion usará para
solicitar al usuario el mensaje del informe de
cambios cuando envía cambios al repositorio, como
por ejemplo al usar svn commit
sin las opciones --message
(-m
) o --file
(-F
). Este programa
también se usa con el comando svn
propedit—un fichero temporal
es rellenado con los valores actuales de la
propiedad que el usuario desea modificar, y los
cambios toman forma en el programa editor (vea
“Propiedades”). El valor por
defecto de esta opción es vacío. Si la opción no
está activada, Subversion comprobará las variables
de entorno SVN_EDITOR
,
VISUAL
, y
EDITOR
(en ese orden) para
encontrar un comando de edición.
diff-cmd
Especifica una ruta absoluta a un programa de diferenciación, usado cuando Subversion genera salida “diff” (como cuando usa el comando svn diff). Por defecto Subversion usa una librería de diferenciación interna—activando esta opción obligará realizar esta tarea usando un programa externo.
diff3-cmd
Especifica una ruta absoluta a un programa de diferenciación a tres bandas. Subversion usa este programa para fusionar cambios realizados por el usuario con aquellos recibidos del repositorio. Por defecto Subversion usa una librería de diferenciación interna—activando esta opción obligará realizar esta tarea usando un programa externo.
diff3-has-program-arg
Este parámetro debe ajustarse a
true
si el programa especificado
por la opción diff3-cmd
acepta el parámetro de línea de comando
--diff-program
.
La sección tunnels
le permite
definir nuevos esquemas de túneles a usar con
svnserve y conexiones cliente
svn://
. Para más detalles, vea “Autenticación y autorización SSH”.
La sección miscellany
es donde
acaba todo lo que no encaja en otra parte.
[34]
En esta sección puede encontrar:
global-ignores
Cuando ejecuta el comando svn
status, Subversion muestra un listado
de ficheros y directorios no versionados
junto con los versionados, anotándolos con
el carácter ?
(vea “svn status”). A veces puede
ser molesto ver elementos no versionados o no
interesantes—por ejemplo, ficheros objeto
resultado de la compilación de un programa— en
pantalla. La opción global-ignores
es una lista de máscaras delimitadas por
espacio que describen los nombres de ficheros y
directorios que Subversion no debe mostrar a no
ser que estén versionados. El valor por defecto
es *.o *.lo *.la #*# .*.rej *.rej .*~ *~
.#*
.
Puede redefinir esta opción en invocaciones
individuales del comando svn
status usando la opción de línea de comando
--no-ignore
. Para más información
sobre el control detallado de elementos ignorados,
vea “svn:ignore
”.
enable-auto-props
Esto indica a Subversion que añada propiedades
automáticamente en ficheros nuevos o importados. El
valor por defecto es no
, así que
cambie esto a yes
para activar
auto propiedades.
La sección auto-props
controla
la capacidad del cliente de Subversion de poner
automáticamente propiedades en ficheros que fueron
añadidos o importados. Contiene un número de
parejas clave-valor en el formato PATRÓN =
NOMBREPROPIEDAD=VALORPROPIEDAD
donde
PATRÓN
es una máscara de
fichero que encaja con un grupo de ficheros
y el resto de la línea es la propiedad y su
valor. Múltiples coincidencias en un fichero
resultarán en múltiples propiedades para ese
fichero; no obstante, no hay garantía alguna de
que las auto propiedades sean aplicadas en el
orden en el cual fueron listadas en el fichero de
configuración, así que no puede tener una regla
que “redefina” otra. Puede encontrar
varios ejemplos del uso de auto propiedades en el
fichero config
. Por último, no
olvide cambiar enable-auto-props
a yes
si quiere activar las auto
propiedades.
log-encoding
Esta variable ajusta el formato por defecto de
codificación de caracteres de los informes
de cambios. Es una versión permanente de la
opción --encoding
(vea “Parámetros de svn”.) El repositorio
Subversion almacena los mensajes de los informes de
cambios en UTF8, y asume que su mensaje es escrito
usando las locales nativas de
su sistema operativo. Debería especificar una
codificación diferente si sus mensajes son escritos
con otra codificación.
use-commit-times
Normalmente los ficheros de su copia local de trabajo tienen marcas de tiempo que reflejan el último momento en que fueron tocados por cualquier proceso, ya sea su propio editor o uno de los subcomandos svn. Esto es normalmente conveniente para gente que desarrolla software, porque los sistemas de compilación a menudo comprueban las marcas de tiempo para decidir qué ficheros necesitan ser recompilados.
En otras situaciones, no obstante, es conveniente
tener en su copia local de trabajo ficheros
con marcas de tiempo que reflejan el último
momento en el que cambiaron en el repositorio
El comando svn export
siempre pone estas “marcas temporales de
última modificación” en los árboles que
produce. Cambiando esta variable de configuración
a yes
, los comandos svn
checkout, svn update,
svn switch, y svn
revert también ajustarán la marca temporal
a la última modificación en el repositorio en los
ficheros que manejen.