Si bebes, no hagas commits

(0 comentarios)

Si no quieres provocar la ira de tus compañeros y tener que comprar donuts para toda la oficina como ofrenda de paz, es mejor intentar no hacer commits cuando uno tiene sus capacidades mentales mermadas por el alcohol. Si es algo que te suele ocurrir a menudo, además de buscar ayuda, puedes utilizar gitdown, un pequeño script que utiliza un Arduino para medir tu nivel de alcohol en sangre, y te impide hacer commits si supera el 0,05%.

[Pulsa para continuar]

Detached HEAD en Git

(3 comentarios)

Es posible que Git te haya mostrado alguna vez una advertencia del tipo “You are in ‘detached HEAD’ state” al intentar hacer un commit o un push. Lo que nos está diciendo Git es que el puntero HEAD está apuntando directamente a un commit, en lugar de apuntar a una rama que apunte al commit.

[Pulsa para continuar]

Trunk, branch y tag

(14 comentarios)

Trunk, branch y tag son tres de los conceptos principales a manejar a la hora de utilizar un sistema de control de versiones, como CVS, Subversion, Git o Mercurial. A continuación tenéis una pequeña definición de estos tres términos.

  • Trunk (tronco): la línea principal de desarrollo, donde se llevan a cabo los cambios menos complejos del día a día. Idealmente debería poder compilarse y pasar todas las pruebas en todo momento (ver Integración continua). La persona que rompa la compilación, debe ser públicamente humillada, y debe pagar una penitencia en donuts
  • Branch (rama): cuando se van a llevar a cabo cambios importantes que romperán la compilación, pruebas, experimentos o intentos de optimización, debe crearse una nueva rama de desarrollo, con la que no molestemos a los compañeros, esto es un branch: una copia del código o la rama de la que deriva. En esta copia haremos nuestros cambios, integraremos los arreglos que puedan haberse ido haciendo en el trunk, y, una vez terminado el desarrollo en la rama, integraremos (o no) los cambios en el trunk. También puede crearse una rama para una versión terminada, hacer mantenimiento de esta versión sobre esta rama, y continuar el desarrollo de la nueva versión en el trunk.
  • Tag (etiqueta): etiquetas que sirven para identificar un cierto momento en el desarrollo que queremos preservar. Se utilizan habitualmente para marcar cambios de versión (alfas, betas, RC, RTM) y puntos de interés. Sobre un tag no se puede / no se debe hacer cambios

Subclipse: plugin de Subversion para Eclipse

(18 comentarios)

Probablemente Subclipse sea el plugin para integrar Subversion con Eclipse más utilizado del mercado, por encima del plugin “oficial”, Subversive, aunque son muy parecidos. Sin embargo ambos están lejos de la popularidad de otras alternativas independientes como TortoiseSVN, por razones evidentes.

Subclipse: plugin de Subversion para Eclipse

[Pulsa para continuar]

Subversion en Dreamhost

(5 comentarios)

Dreamhost, el hosting en el que está alojado Mundo geek y que recomiendo encarecidamente (Alojamiento con 20GB de espacio y 1000GB de ancho de banda por 2 euros al mes) acaba de añadir soporte para Subversion, un sistema de control de versiones que nació como alternativa a CVS (no en vano le supera en todos los aspectos) y que ha alcanzado bastante popularidad.

Si sueles programar y aún no sabes lo que es el control de versiones debes echar un vistazo a los artículos ¿Qué es un CVS? Instalación de Subversion y Un cliente de Subversion gráfico: TortoiseSVN que te explicarán todo lo que necesitas saber.

Subversion, CVS avanzado

¿Qué es un CVS? Instalación de Subversion

(21 comentarios)

CVS es el sistema de control de versiones concurrentes mas utilizado en el mundo del software libre, sin embargo es bastante arcaico (nació en 1985) y tiene bastantes carencias, como son la falta de versionado de directorios, de renombrado o de copias; su uso poco eficiente de la red o el que no almacene archivos binarios completos, solo los cambios entre versiones.

Subversion es un CVS de código abierto, bajo una licencia del tipo Apache/BSD, que nació como alternativa a CVS y que intenta solucionar estos problemas y carencias. Tenemos multitud de alternativas a CVS aparte de Subversion, por ejemplo GNU Arch del que he oido muchas alabanzas y ninguna crítica, pero en esta entrada nos centraremos en Subversion por ser el más popular.

Lo primero es lo primero. ¿A qué se refiere el control de versiones? Estamos hablando de controlar los cambios que realizan los programadores sobre el código fuente (o cualquier otro tipo de usuario sobre un documento cualquier que tenga varias versiones) de forma que no se produzcan inconsistencias por trabajar mas de una persona con el mismo documento y se pueda volver hacia atrás en las versiones de forma cómoda o se pueda comprobar los cambios o los errores corregidos en cada versión.

Vamos a ver ahora su instalación en sistemas Windows. Lo primero que tenemos que hacer es descargar Subversion desde su página web, donde podemos encontrar una versión comprimida o una versión que incorpora un instalador para facilitar mas aún las cosas.

Una vez instalado deberíamos poder ejecutar Subversion de forma local escribiendo svn en la consola. Esto bastaría si no fuéramos a utilizar Subversion en red. En el caso de que si vayamos a hacerlo necesitamos instalar además un servidor web como Apache.

Para comenzar a trabajar con Subversion tenemos que crear un repositorio primero. Un repositorio es donde se va a guardar todas las versiones de nuestro proyecto. Supongamos que queremos crear el repositorio en C:/Documentos/Proyectos, primero nos moveríamos a ese directorio en la línea de comandos y luego usaríamos la herramienta svnadmin para crear el repositorio:

svnadmin create repositorio

Esto crearía un directorio C:/Documentos/Proyectos/Repositorio para actuar como mi repositorio.

Para activar la posibilidad de usar Subversion en red vía Apache necesitamos copiar el módulo mod_dav_svn.so de la carpeta httpd en el directorio donde se instaló subversión a la carpeta de módulos (modules) de Apache tras lo cual editamos nuestro httpd.conf para informar a Apache de la existencia del nuevo módulo. Buscamos la línea

#LoadModule dav_module modules/mod_dav.so

la descomentamos (quitamos el #) y añadimos también

LoadModule dav_svn_module modules/mod_dav_svn.so

Copiamos también las dll de la carpeta bin de Apache y de Subversion al directorio modules para que puedan ser accedidas por los módulos y añadimos al final del httpd.conf lo siguiente

<Location /repos>
DAV svn
SVNPath c:/documentos/proyectos/repositorio
AuthType Basic
AuthName “Repositorio Subversion”
AuthUserFile c:/programas/Apache2/usuarios.txt
# Cualquiera puede leer, para otras operaciones
# hay que estar autentificado.
<LimitExcept GET PROPFIND OPTIONS REPORT>
Require valid-user
</LimitExcept>
</Location>

con esto creamos un repositorio ficticio repos y le indicamos la ruta a él (notad que las barras no son invertidas en las rutas, además si hay espacios en las rutas tenemos que incluir la ruta entre comillas). Además pedimos que los usuarios se autentifiquen para poder realizar cualquier operación que no sea la lectura, comparando el nombre de usuario y contraseña introducidas con la información sobre los usuarios del fichero c:/programas/Apache2/usuarios.txt (nota: dado que no estamos utilizando una conexión segura se podrían capturar las contraseñas usando un sniffer).

El archivo usuarios.txt no existe por defecto, es simplemente un archivo que crearemos nosotros utilizando la herramienta de Apache htpasswd que se encuentra en el directorio bin de la carpeta de Apache y que nos sirve para crear una clave de tipo MD5.

htpasswd -mc c:/programas/Apache2/usuarios.txt Zootropo
htpasswd -m c:/programas/Apache2/usuarios.txt Otro

Le indicamos donde queremos guardar el fichero de contraseñas (en el caso de que la ruta tenga espacios la escribimos entre comillas) y qué nombre de usuario queremos, tras lo cual nos pedirá la contraseña a utilizar para ese usuario. Fijaos en que para el primer usuario que creemos (Zootropo) hay que añadir también el flag c para que cree el fichero.

Si reiniciamos el servidor ahora deberíamos poder acceder al repositorio vía web. Abrimos el navegador de internet y en la barra de localización escribimos http://127.0.0.1/repos/. Si nos sale un mensaje de página no encontrada algo ha fallado.

Ahora que el servidor CVS ya está listo necesitamos un cliente CVS para trabajar con él. Subversion incluye herramientas de línea de comandos para este fin, pero es mas cómodo utilizar una interfaz gráfica como la de TortoiseSVN