xmanoel@


¿Porqué no Subversion?

Hace muuuchos meses tuve la necesidad de crear un pequeño repositorio de código local, y decidí usar Mercurial para montarlo. En un comentario alguien me indicó que podía crear un repositorio local con subversion. ¿Cómo no se me había ocurrido usar Subversion? (Sobre todo teniendo en cuenta que es el gestor de versiones que utilizamos en el trabajo ¿porque instalar otro gestor de versiones?)

¿Sería tal vez por la línea de comando? Subversion tiene línea de comando (de hecho oficialmente la aplicación es de línea de comando, casi todos los entornos gráficos que hay son interfaces de esta línea de comando), pero es una tortura usarla, porque un tag en Subversion es esto: http://code.djangoproject.com/svn/django/tags/releases/1.0.4 (y esta es bastante corta). Te pasas todo el día copiando y pegando urls de etiquetas, branches y demás.

Todo esto salpimentado por la insistencia que tienen en manetener las opciones con nombres largos (y cada vez menos abreviaturas): --ignore-externals --force --depth. En combinación, muy desagradable de usar en la línea de comando

Volvamos con uno de los mayores hayazgos de los chicos de Subversion: ¿Será porque todo son URLs? No se a quien se le ocurrió que las etiquetas del CVS eran 'una mala idea' y que había que mejorarlo. Pero http://code.djangoproject.com/svn/django/tags/releases/1.0.4 ni es fácil de memorizar, ni es fácil de intercambiar con el equipo, ni nada. (Alguien me dirá que da igual, que la etiqueta es sólo la parte final: pero a Subversion no le vale que le digas /tags/releases/1.0.4).

Tercer pequeño pero o problema: Los directorios .svn. Están por todos lados, molestan, y no tienen ninguna ventaja. Es curioso que a la hora de desarrollar un nuevo sistema, decidiesen ignorar buenas ideas que había en CVS (las etiquetas como cadenas de texto y poco más) y en cambio mantuviesen ideas un poco coñazo (los de guardar la información de versiones en cada directorio del repositorio). {Para aquellos que se pregunten si hay una manera mejor de hacerlo, la respuesta es sí, y ni en Mercurial, ni en GIT se guarda información del repositorio en cada directorio, toda la información está centralizada en un lado, y la copia local sólo tiene los ficheros con los que trabajas}.

Y el pero final que le pongo es el tema de los updates no sean recursivos. (Cuando haces un update no añade nuevos directorios que la gente haya añadido). Porque cuando haces el update no te aparecen los subdirectorios nuevos que haya añadido otra persona. Se limita a actualizar los ficheros que tenías en tu copia local. Se puede hacer (o forzar) con –depth infinity (o aún mejor --set-depth infinity para que recuerde que lo quieres así en los proximos updates). {En Tortoise SVN (que es el que usamos todos) se hace con el combo que aparece en el menú de "Actualizar a versión...", porque en el update por defecto no se hace}.

Ya son unos cuantos peros ¿no? Por eso me apeteció darle una oportunidad a Mercurial (o a GIT).

27 September 2010