Software relacionado

GUIs

Tabla 1. Clientes con GUI para Subversion

NombreLenguajePortableLicencia
jsvnJava, usando el cliente de consolaAcademic Free License
RapidSVNC++Sí, componentes gráficos nativosestilo Apache
SupervisionJava, cliente de consolaGPL
svnupJava: Swing, ligaduras JNIestilo Apache
SvnXJava: Swing, ligaduras JNIestilo Apache
TortoiseSVNCocoa framework y Objective-CNo, Mac OS X 10.3??

Bibliotecas

Subversion esta compuesto por bibliotecas de funciones C que cumplen interfaces claramente definidos. Por ejemplo, existen varias bibliotecas que cumplen el interfaz de acceso al repositorio:

  • libsvn_ra_dav: administra accesos usando la extensión WebDAV/DeltaV de HTTP 1.1. Es el usado para comunicarse con Apache.

  • libsvn_ra_local: administra accesos mediante sistema local de ficheros (protocolo file:///)

  • libsvn_ra_svn: administra accesos usando el protocolo propio SVN. Se usa con el servidor svnserve.

En total hay once bibliotecas que pueden agruparse en tres capas:
  • Repositorio.

  • Acceso al repositorio.

  • Cliente.

En la programación de Subversion también se ha usado la biblioteca Apache Portable Runtime (APR). La APR se creó originalmente para proporcionar una API genérica independiente del sistema operativo. Para la gestión de memoria en Subversion, APR proporciona "pools de memoria", reservas de memoria de las que el programa va tomando, en vez de solicitar al sistema operativo cada pequeño fragmento que necesita.

Para usar Subversion desde lenguajes que no sean C, se proporcionan ligaduras SWIG. SWIG es un compilador que permite enlazar código C/C++/Objective-C con lenguajes de script como Perl, Python, Ruby, y Tcl. Funciona en Unix, Win32 con Cygwin/Mingw, y Macintosh. Para más detalles consulta la página SWIG de compatibilidad en plataformas. Otra opción para usar Subversion es ejecutar y comunicarse directamente con un cliente C desde un lenguaje no C, pero la precisión y riqueza de datos siempre será mayor usando las librerías nativas.

Si programas en Java puedes usar la Java High Level API (javahl) para comunicar Java y Subversion. javahl usa JNI para proporcionar cualquiera de las operaciones disponibles en el cliente de consola. Existen versiones Unix y Windows. Hay varios proyectos que usa javahl en http://svnup.tigris.org/.

Plugins

Tabla 2. Plugins para Subversion

NombreProgramaComentariosLicencia
AnkhSVN Visual Studio .NET0.4.1, pantallazosApache 1.1
SCPluginFinder OSXBetaMIT
SubclipseEclipse 2.1.x, 3.0 No funciona en WASD5.Windows, Linux, OSX. Emplea ligaduras JNI.Apache 1.1
SVNupIDEAJava: Swing, ligaduras JNI. También funciona como GUI.estilo Apache
SVNAntAntUsa JNI (svnjavahl.dll en windows) o línea de comando.Apache 1.1

Subclipse 3 + Eclipse 3

En Windows es posible usar Subclipse contra un repositorio remoto sin instalar Subversion.

En Linux o OSX necesitaremos instalar primero Subversion. Subclipse emplea ligaduras JNI (bindings javahl). Los bindings se enlazan dinámicamente con las fuentes de Subversion, esto significa que cada versión de Subclipse se crea con respecto a una versión de Subversion, y puede dar problemas si no se emplean las versiones correspondientes.

Con conexión a red, el mejor modo de instalarlo es añadiendo el sitio de actualización de Subclipse. Esto nos permitirá actualizar cómodamente a futuras versiones. Para instalarlo haz lo siguiente:

  • Ve a Help > Software Updates > Find and install.

  • Selecciona Search for new features to install, y pulsa Next.

  • Pulsa New Remote Site... y escribe:

    • Name: Subclipse

    • URL: http://subclipse.tigris.org/update

  • Expande el nuevo nodo Subclipse, selecciona Subclipse Plugin, y pulsa Next.

  • Continua pulsando Next, aceptando la licencia, aceptando el certificado, y pulsa Finish.

  • Nos pide que reiniciemos eclipse, contestamos Yes.

En una LAN con más usuarios, conviene descargar el sitio de actualización de Subclipse y colocarlo en un servidor local o directorio compartido. En la página de descarga se explica como. Es el mismo procedimiento de antes solo que apuntaremos al servidor/directorio local.

Scripts

Tabla 3. Scripts para Subversion

NombreLenguajePortableLicenciaSumario
CVS2SVNPython CGISí, usa SWIGApache 1.1Crea un repositorio Subversion a partir de uno CVS.
SubWikiPython CGISí, usa SWIGAcademic Free LicenseWiki basado en subversion. Aun no hay entregables.
ViewCVSPythonViewCVS License, (similar a la licencia MIT)Navegador del repositorio.
WebSVNPHPGPLNavegador del repositorio.

CVS2SVN

Permite crear un repositorio Subversion a partir de otro CVS. Funciona casi siempre, o sea, que existe algún caso en que no funciona 100% correcto. Para usarlo necesitamos instalar Python y ViewCVS (ViewCVS contiene un módulo para interpretar ficheros RCS). Su funcionamiento es simple:

svnadmin create /nuevo/repositorio
cvs2svn.py -s /nuevo/repositorio /cvs/repos

Hay más detalles en codehaus.org.

ViewCVS

El soporte para Subversion en ViewCVS solo existe en el CVS. Lo he probado en Windows y el repositorio es navegable, pero ciertas operaciones producen errores que no he investigado. Si a alguien le interesa ir más allá debería empezar por consultar el error en la lista de correo de ViewCVS.

Windows

Suponemos instalados Apache y Subversion.

  1. Instalo Python, por ejemplo usando el ActivePython (17Mb) de ActiveState y siguiendo la guía de instalación. También podeis instalar el de python.org (Python-2.3.3.exe, 9Mb), pero al instalar ViewCVS más adelante pide unas librerías que podéis obtener bajando las extensiones win32 de Mark Hammond (pywin32-200.win32-py2.3.exe, 3.16Mb). Yo he probado con el de Python.org. Si quieres las extensiones 2.4 necesitarás haber instalado Python 2.4 y tener la dll msvcrt71.dll en tu sistema, que puedes conseguir instalando el framework .Net (23Mb), o aqui, o en Google.

  2. Instalo mod_python para Apache, versión 3.x. Yo usé mod_python-3.1.3.win32-py2.3.exe (119Ks). Hago la instalación por defecto, me pregunta donde esta Apache, y aparece un mensaje indicando como configurarlo, cosa que hago. Solo se trata de añadir esta línea en httpd.conf junto al resto de sentencias LoadModule:

    LoadModule python_module modules/mod_python.so
    Si además queremos probar que funciona podemos usar las instrucciones de http://www.modpython.org/live/current/doc-html/inst-testing.html. Personalmente paso.

  3. Ahora necesitamos el HEAD del ViewCVS porque por ahora no hay release con soporte subversion. Suponiendo CVS instalado, los comandos son

    # password en blanco
    cvs -d :pserver:anonymous@cvs.sourceforge.net:/cvsroot/viewcvs login
    cvs -d :pserver:anonymous@cvs.sourceforge.net:/cvsroot/viewcvs co viewcvs
    Voy al directorio donde lo he bajado y ejecuto
    python viewcvs-install
    e instalo en un directorio cualquiera, por ejemplo d:\programas\viewcvs.

  4. Modifico el http.conf de apache para incluir lo siguiente:

    ScriptAlias /viewcvs "d:/programas/viewcvs/www/mod_python/viewcvs.py"
    <location /viewcvs>
        AddHandler python-program .py
        PythonPath "[r'd:\\programas\\viewcvs\\lib']+sys.path"
        PythonHandler apache
        PythonDebug On
    </location>
    Observa que d:\programas\viewcvs debe ser el directorio donde instalaste viewcvs en el paso anterior.

  5. Ya solo queda modificar d:\programas\viewcvs\viewcvs.conf:

    [general]
    # no voy a usar cvs
    # cvs_roots = cvs: /home/cvsroot
    
    # ruta a mi repositorio
    svn_roots = main: d:/repositorio
    
    # nombre del root por defecto, aqui solo tengo uno :-)
    default_root = main

  6. Bajo el módulo svn para python (svn-win32-1.0.6_py.zip) y lo descomprimo. Copio los directorios libsvn/ y svn/ al directorio d:\programas\Python23\Lib, suponiendo python instalado en d:\programas\Python23.

  7. Si tienes CygWin instala diffutils, enscript, gzip, libiconv, libintl, rcs, sed, zlib en versiones CygWin, GNUWin32, o minGW. Puedes prescindir de este paso por ahora, el repositorio resultante será navegable, si intentamos hacer un diff y no tenemos rcs dirá algo como esto:

    error: (2, 'CreateProcess', 'The system cannot find the file specified.')

  8. La instalación ha terminado. Reinicio Apache, voy a http://127.0.0.1/viewcvs y he aquí el repositorio:

    Figura 2.

    Mirando con lupa esta imagen observamos varias cosas de interes:

    • Cuando navegas aparece un número de revisión, y si pulsas en el enlace aparecen todos los ficheros pertenecientes a ese commit. Recuerda que los números de versión son globales para todo el repositorio, es decir, coinciden con el número de commits realizados.

    • Todos los ficheros tienen la misma marca de tiempo y comentario. Es porque Subversion usa transacciones y constan como añadidos en el mismo instante.

    • La dirección del administrador no esta configurada. Quizás nos convenga hacerlo luego. Si queremos un servidor local de correo podemos usar James de Apache.

Para poner colorines establece use_enscript = 1 en viewcvs.conf. No lo he probado.

Para mostrar gráficamente las revisiones hay que instalar cvsgraph, que podemos bajar de http://www.akhphd.au.dk/~bertho/cvsgraph/. Es útil sobre todo con ramas. No lo he probado.

WebSVN

WebSVN es un script PHP que usa comandos Unix. Para aumentar el rendimiento cachea el contenido. Desconozco que política de cache sigue, ni que rendimiento tendría en un sitio en Internet.

Los comentarios siguientes son de una instalación en Windows, pero se podrían adaptar sin problema a Linux. Si ya hemos instalado Subversion y Apache hacemos esto:

  • Descargamos PHP (7,26Mb), descomprimimos y añadimos su ruta al PATH.

  • Ignoramos los comentarios del tipo "he leído por ahí que PHP no es estable en Apache2".

  • Instalamos PHP en Apache2 según esta guía de php.net. O seguimos estas instrucciones (Windows):

    • Copiamos php/php5ts.dll a windows/system32.

    • Añadimos estas líneas al httpd.conf de Apache:

      ScriptAlias /php/ "d:/programas/php"
      AddType application/x-httpd-php .php
      Action application/x-httpd-php "/php/php.exe"
      
      LoadModule php5_module "d:/programas/php/php5apache2.dll"
      AddType application/x-httpd-php .php

  • Opcionalmente instalamos los comandos diff, enscript, gzip, sed, por ejemplo con CygWin. Aunque no instalemos estos comandos igualmente podremos navegar por el repositorio, pero si por ejemplo no instalamos diff, no podremos hacer diff, etc.

Ahora instalamos webSVN:

  • Descargamos webSVN y lo descomprimimos en apache/htdocs o donde quiera que apunte la la directiva DocumentRoot del httpd.conf de Apache.

  • Renombramos websvn/include/distconfig.inc a config.inc y lo editamos como se indica en el propio fichero. Yo descomenté estas líneas:

    $config->setServerIsWindows();
    $config->setSVNCommandPath("d:\\tools\\svn\\bin");
    $config->setEnscriptPath("c:\\cygwin\\usr\\bin\\enscript");
    $config->addRepository("repositorio", "d:\\repositorio");

Ya podemos visitar http://localhost/websvn/index.php para ver nuestro repositorio.

Figura 3. websvn

websvn

Otros

Tabla 4. Scripts para Subversion

NombreLenguajePortableLicenciaSumario
CruiseControlJavaSí, requiere JavaBSDProporciona Integración Continua.
CruiseControl.NET.NetRequiere .NetThoughtWorks. Similar a la BSD.Proporciona Integración Continua. Es la versión .Net de CruiseControl.