Capítulo 3. El repositorio

Tabla de contenidos

Creación de repositorios
Creando un repositorio con el cliente de línea de comandos
Creando el repositorio con TortoiseSVN
Acceso local al repositorio
Accediendo a un repositorio en una unidad de red
Organización del repositorio
Copia de seguridad del Repositorio
Scripts gancho en el lado del servidor
Enlaces de obtener
Accediendo al repositorio

Sin importar el protocolo que use para acceder a sus repositorios, siempre necesita crear al menos un repositorio. Esto puede hacerse o bien con el cliente de línea de comandos de Subversion o con TortoiseSVN.

Si todavía no ha creado un repositorio de Subversion, ahora es el momento de hacerlo.

Creación de repositorios

You can create a repository with the FSFS backend or with the older Berkeley Database (BDB) format. The FSFS format is generally faster and easier to administer, and it works on network shares and Windows 98 without problems. The BDB format was once considered more stable simply because it has been in use for longer, but since FSFS has now been in use in the field for several years, that argument is now rather weak. Read Choosing a Data Store in the Subversion book for more information.

Creando un repositorio con el cliente de línea de comandos

  1. Cree una carpeta vacía con el nombre SVN (por ejemplo, D:\SVN\), que se usará como la raíz de todos sus repositorios.

  2. Cree otra carpeta MiNuevoRepositorio dentro de D:\SVN\

  3. Abra un símbolo del sistema (o ventana MS-DOS), vaya a D:\SVN\ y escriba

    svnadmin create --fs-type bdb MiNuevoRepositorio
    

    o

    svnadmin create --fs-type fsfs MiNuevoRepositorio
    

Ahora ya tiene un nuevo repositorio que se encuentra en D:\SVN\MiNuevoRepositorio.

Creando el repositorio con TortoiseSVN

Figura 3.1. El menú de TortoiseSVN para carpetas no versionadas

El menú de TortoiseSVN para carpetas no versionadas

  1. Abra el explorador de Windows

  2. Cree una nueva carpeta y llámela por ejemplo SVNRepositorio

  3. Haga click con el botón derecho sobre la carpeta recién creada y seleccione TortoiseSVNCrear Repositorio aquí....

    Entonces se creará un repositorio dentro de la nueva carpeta. ¡¡¡No edite los archivos!!!. Si se encuentra con algún error asegúrese que la carpeta esté vacía y que no esté protegida contra escritura.

    También se le preguntará si quiere crear una estructura de directorio dentro del repositorio. Encuentre más sobre opciones de disposición en “Organización del repositorio”.

    TortoiseSVN colocará un ícono de carpeta personalizado cuando crea un repositorio para que usted pueda identificar los repositorios locales más fácilmente. Si crea un repositorio usando el cliente de línea de comando oficial este ícono de carpeta no se asigna.

Sugerencia

TortoiseSVN ya no ofrece la opción de crear repositorios BDB, aunque aún puede utilizar el cliente de línea de comandos para crearlos. Los repositorios FSFS son generalmente más sencillos de mantener, y también nos facilita el mantenimiento de TortoiseSVN debido a los problemas de compatibilidad entre las diferentes versiones de BDB.

TortoiseSVN no soporta el acceso file:// a repositorios BDB debido a estos problemas de compatibilidad, aunque por supuesto sí soportará este formato de repositorio siempre y cuando se acceda utilizando un servidor a través de los protocolos svn://, http:// o https://.

Por supuesto también le recomendamos que no utilice el acceso file:// en absoluto, salvo para propósitos de pruebas locales. Utilizar un servidor es más seguro y confiable para todo lo que no sean proyectos de un único desarrollador.

Acceso local al repositorio

Para acceder a su repositorio local, necesita la ruta a esa carpeta. Recuerde que Subversion espera todas las rutas de repositorios con el formato file:///C:/RepositorioSVN/. Tenga en cuenta el uso de las barras de dividir.

Para acceder a un repositorio que se encuentre en una unidad de red compartida puede o bien utilizar mapeado de unidades, o bien usar la ruta UNC. El formato de una ruta UNC es file://NombreDelServidor/ruta/al/repositorio/. Observe que sólo hay 2 barras invertidas aquí.

Antes de SVN 1.2, las rutas UNC tenían que estar dadas en la forma más oscura file:///\NombreDelServidor/ruta/al/repositorio. Esta forma aún se puede utilizar, pero no está recomendada.

Aviso

No cree o acceda a un repositorio Berkeley DB en una unidad de red compartida. No puede existir en un sistema de archivos remoto. Ni siquiera si tiene la unidad de red mapeada a una letra de unidad. Si intenta usar Berkeley DB en una unidad de red compartida, los resultados son imprevisibles - puede que aparezcan extraños errores desde un primer momento, o pueden pasar meses antes que descubra que la base de datos del repositorio está corrupta de una forma casi imperceptible.

Accediendo a un repositorio en una unidad de red

Aunque en teoría es posible poner un repositorio FSFS en una unidad de red y hacer que varios usuarios accedan a él utilizando el protocolo file://, esto realmente no está recomendado. De hecho, nosotros lo desaconsajemos encarecidamente, y no soportamos este uso.

En primer lugar, está dando a todos los usuarios acceso directo de escritura en el repositorio, por lo que cualquier usuario podría accidentalmente borrar el repositorio completo o hacerlo inutilizable de cualquier otra forma.

En segundo lugar, no todos los protocolos de compartición de archivos de red soportan el bloqueo que Subversion necesita, por lo que puede encontrar que su repositorio se corrompe. Puede que no ocurra al principio, pero un día dos usuarios intentarán acceder al repositorio al mismo tiempo.

En tercer lugar, también debe establecer los permisos de los archivos. Puede ser sencillo en una unidad de red nativa de Windows, pero en SAMBA esto es particularmente dificil.

El acceso file:// está pensado únicamente para el acceso local por un único usuario, en particular para testeos y depuraciones. Cuando desee compartir el repositorio, realmente necesita configurar un servidor de forma apropiada, y realmente no es tan dificil como pueda pensar. Lea “Accediendo al repositorio” para obtener indicaciones sobre cómo elegir y configurar un servidor.

Organización del repositorio

Antes de importar sus datos al repositorio, primero debería pensar cómo quiere organizar sus datos. Si utiliza uno de los patrones recomendados lo tendrá luego mucho más fácil.

Hay algunas formas estándar y recomendadas de organizar un repositorio. La mayoría de la gente crea un directorio trunk (tronco) para alojar la línea principal del desarrollo, un directorio branches (ramas) para que contenga las copias/ramas, y un directorio tags (etiquetas) para contener las copias/etiquetas. Si un repositorio sólo aloja un proyecto, a menudo la gente crea estos directorios en el primer nivel:

/trunk
/branches
/tags

Dado que esta disposición es usada tan comunmente, cuando crea un nuevo repositorio usando TortoiseSVN, se le ofrecerá también crear la estructura de directorio por usted.

Si un repositorio contiene múltiples proyectos, la gente a menudo indexa por ramas:

/trunk/paint
/trunk/calc
/branches/paint
/branches/calc
/tags/paint
/tags/calc

...o por proyecto:

/paint/trunk
/paint/branches
/paint/tags
/calc/trunk
/calc/branches
/calc/tags

Indexar por proyecto tiene sentido si los proyectos no están muy relacionados y cada uno se obtiene de forma individual. Para proyectos relacionados donde puede querer obtener todos los proyectos de golpe, o donde los proyectos están unidos y forman un paquete de distribución único, a menudo es mejor indexar por rama. De esta forma sólo tendrá un tronco para obtener, y las relaciones entre sub-proyectos se ven más fácilmente.

Si adopta una aproximación de primer nivel /trunk /tags /branches, no es necesario decir que tendrá que copiar el tronco completo para cada rama y etiqueta, y de alguna forma esta estructura ofrece la mayor flexibilidad.

Para proyectos que no tienen que ver, puede preferir utilizar repositorios separados. Cuando confirma los cambios, lo que cambia es el número de revisión del repositorio completo, no el número de revisión del proyecto. Si tiene 2 proyectos que no tengan que ver compartiendo un repositorio, eso puede llevar a que ocurran grandes lagunas en los números de revisión. Los proyectos Subversion y TortoiseSVN aparecen en el mismo servidor, pero son dos repositorios totalmente separados que permiten un desarrollo independiente, y no hay confusión sobre los números de compilación.

Por supuesto, tiene libertad para ignorar estos patrones comunes. Puede crear cualquier variación, la que mejor le venga a usted o a su equipo. Recuerde que cualquiera que sea la que elija, no es una elección inamovible. Puede reorganizar su repositorio en cualquier momento. Dado que las ramas y las etiquetas son directorios normales, TortoiseSVN puede mover o renombrarlas como desee.

Cambiar de una disposición a otra es sólo una cuestión de ejecutar una serie de movimientos en el lado del servidor; si no le gusta la forma en la que están organizadas las cosas en el repositorio, sólo tiene que ir moviendo los directorios.

Así que si no ha creado todavía una estructura básica de carpetas dentro de su repositorio, debería hacerlo ahora. Hay dos formas de conseguirlo. Si simplemente desea crear una estructura /trunk /tags /branches, puede utilizar el visor de repositorios para crear las tres carpetas (en tres confirmaciones distintas). Si desea crear una jerarquía más profunda, es más fácil crear primero una estructura de carpetas en el disco e importarla en una única confirmación, por ejemplo:

  1. Cree una nueva carpeta en su disco duro

  2. Cree la estructura de carpetas de primer nivel dentro de esa carpeta - ¡no ponga ningún archivo allí todavía!

  3. Importe esta estructura en el repositorio via click con el botón derecho en la carpeta y seleccionando TortoiseSVNImportar.... Esto importará su carpeta temporal a la raíz del repositorio para crear la estructura básica del repositorio.

Tenga en cuenta que el nombre de la carpeta que está importando no aparece en el repositorio, sólo sus contenidos. Por ejemplo, cree la siguiente estructura de carpetas:

C:\Temp\New\trunk
C:\Temp\New\branches
C:\Temp\New\tags

Importe C:\Temp\New en la raíz del repositorio, que entonces contendrá:

/trunk
/branches
/tags