Category Archives: Subversion

Windows 7 bug affecting Subversion

There is a bug on Windows 7 (and Windows Server 2008 R2) that relates to corrupted files error messages and affects several SVN’s operations (like commit and update). The detailed error message you can get is something similar to:

svn: Can't move '[repo]\.svn\tmp\entries' to '[repo]\.svn\entries': The file or directory is corrupted and unreadable.

And you can even get a Windows error message telling you about a corrupted file.

As I found in here and here, there is nothing to be afraid of, it is just another bug/error on Windows that is going to be fixed on SP1 (but there is already a hotfix ready to install). I haven’t finished test it myself (just missing the restart after the hotfix installation).

The hotfix’s download requires you to give your email address to Microsoft before they send you the link where you can download it (some way annoying). I have uploaded on my own server to avoid the process if I need it again, so you can get it from here if you want (remember that you should NOT download executables from non-trusted sources as they can contain viruses and harm your computer).

Forbid access to svn directories on Apache Web Server

Using Subversion to deploy and maintain updated web applications like WordPress, Joomla or even your development on a web server is very handy. One of the downsides I have found to this solution is that your web root will have hidden .svn directories all over the place (one per each directory on your application). This directories will not be hidden for the web server, so it is important to forbid browsers the access to them.

If you are using Apache, you can use the tips on this page.

If you use Apache 2.2 (I have not test it on other versions, but it should work also on 2.0 version) and have access to the configuration files, you can create the file /etc/apache2/conf.d/svn with the following content:

<Directory ~ "\.svn">
    Order allow,deny
    Deny from All
</Directory>

This will deny access to all the .svn directories on your web server. After you have create this file, do not forget to restart the web server so the changes can take effect.

Edit (26/May/2011): This can also be achieved using:

<DirectoryMatch .*\.svn/.*>
    Deny From All
</DirectoryMatch>

Quitar todos los directorios .svn de una copia de trabajo de Subversion

Hace un rato me vi en la necesidad de borrar todos los directorios .svn (aquellos que coloca Subversion en cada directorio de nuestra copia de trabajo para llevar el control de cambios). El problema era que esta copia de trabajo tiene una estructura de directorios bastante extensa, por lo que hacerlo manualmente no era una opción eficiente. Afortunadamente, desde la linea de comando de Linux podemos hacer lo siguiente:

find . -name ".svn" -exec rm -rf {} \;

Instalar subversion 1.5 en Ubuntu Hardy

En los repositorios de Ubuntu Hardy (la última versión LTS liberada hasta este momento) sólo se puede encontrar subversion 1.4 debido a que en este tipo de versiones de Ubuntu, las versiones de los paquetes no se actualizan tan a menudo (salvo por correcciones y bugs) como uno quisiera.

Entonces, para poder instalar subversion 1.5, se debe hacer una pequeña maniobra. Primero, agregar lo siguiente al archivo /etc/apt/sources.list:

deb http://ppa.launchpad.net/clazzes.org/ubuntu hardy main

Luego, actualizamos la base de datos de paquetes:

$ aptitude update

Después procedemos a instalar este sistema de control de versiones:

$ aptitude install subversion

Cuando ya esté instalada esta versión, quitamos o comentamos (con un #) la línea agregada en /etc/apt/sources.list:

#deb http://ppa.launchpad.net/clazzes.org/ubuntu hardy main

Finalmente, volvemos a hacer un update de los paquetes:

$ aptitude update

Redmine y Subversion

Redmine es una aplicación web de administración de proyectos (principalmente de desarrollo) hecho en Ruby on Rails, un competidor fuerte para el veterano Trac. Lo más interesante con respecto a este último es que permite manejar más de un proyecto en una misma instancia (Trac se debe instalar y ejecutar como la cantidad de proyectos que queramos manejar).

Luego de instalarlo (usando mod_rails) y crear mi primer proyecto, configuré el repositorio (Subversion) para que apunte a una dirección como esta: https://servidor/repositorio. El problema vino cuando quise acceder a dicho repositorio desde Redmine, me devolvía un error (no recuerdo exactamente que decía). Luego de un rato de googlear, encontré que la causa probable era que debía aceptar el certificado de dicho servidor (por utilizar el protocolo https).

Resultó que la solución fue muy sencilla si se tiene acceso por SSH. Necesitaba ejecutar algún comando de Subversion (como svn list) desde el usuario que ejecute mi aplicación (por ejemplo, apache ó http) al repositorio para poder aceptar permanentemente el certificado. Todo esto, en una sola línea:

su - [USUARIO] -c 'svn list https://servidor/repositorio'