Tabla 1. Clientes con GUI para Subversion
Nombre | Lenguaje | Portable | Licencia |
---|---|---|---|
jsvn | Java, usando el cliente de consola | Sí | Academic Free License |
RapidSVN | C++ | Sí, componentes gráficos nativos | estilo Apache |
Supervision | Java, cliente de consola | Sí | GPL |
svnup | Java: Swing, ligaduras JNI | Sí | estilo Apache |
SvnX | Java: Swing, ligaduras JNI | Sí | estilo Apache |
TortoiseSVN | Cocoa framework y Objective-C | No, Mac OS X 10.3 | ?? |
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.
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/.
Tabla 2. Plugins para Subversion
Nombre | Programa | Comentarios | Licencia |
---|---|---|---|
AnkhSVN | Visual Studio .NET | 0.4.1, pantallazos | Apache 1.1 |
SCPlugin | Finder OSX | Beta | MIT |
Subclipse | Eclipse 2.1.x, 3.0 No funciona en WASD5. | Windows, Linux, OSX. Emplea ligaduras JNI. | Apache 1.1 |
SVNup | IDEA | Java: Swing, ligaduras JNI. También funciona como GUI. | estilo Apache |
SVNAnt | Ant | Usa JNI (svnjavahl.dll en windows) o línea de comando. | Apache 1.1 |
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.
Tabla 3. Scripts para Subversion
Nombre | Lenguaje | Portable | Licencia | Sumario |
---|---|---|---|---|
CVS2SVN | Python CGI | Sí, usa SWIG | Apache 1.1 | Crea un repositorio Subversion a partir de uno CVS. |
SubWiki | Python CGI | Sí, usa SWIG | Academic Free License | Wiki basado en subversion. Aun no hay entregables. |
ViewCVS | Python | Sí | ViewCVS License, (similar a la licencia MIT) | Navegador del repositorio. |
WebSVN | PHP | Sí | GPL | Navegador del repositorio. |
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.
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.
Suponemos instalados Apache y Subversion.
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.
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.soSi además queremos probar que funciona podemos usar las instrucciones de http://www.modpython.org/live/current/doc-html/inst-testing.html. Personalmente paso.
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 viewcvsVoy al directorio donde lo he bajado y ejecuto
python viewcvs-installe instalo en un directorio cualquiera, por ejemplo d:\programas\viewcvs.
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.
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
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.
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.')
La instalación ha terminado. Reinicio Apache, voy a http://127.0.0.1/viewcvs y he aquí el repositorio:
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 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.
Tabla 4. Scripts para Subversion
Nombre | Lenguaje | Portable | Licencia | Sumario |
---|---|---|---|---|
CruiseControl | Java | Sí, requiere Java | BSD | Proporciona Integración Continua. |
CruiseControl.NET | .Net | Requiere .Net | ThoughtWorks. Similar a la BSD. | Proporciona Integración Continua. Es la versión .Net de CruiseControl. |