Exportar repositorio con git archive

Acabamos de terminar blazaid y yo la mudanza del dominio, así que me ha picado el gusanillo de volver por estos lares para escribir una nueva entrada. Esta vez para un howto rapidito sobre git.

A veces necesitamos exportar un proyecto de git para subir a un servidor, pero no queremos clonar el repositorio con «git clone», ya que tendremos el árbol de directorios, incluido .git y cosas que no querremos subir. Una opción es copiar únicamente los directorios y ficheros que queramos a una nueva ubicación, y listo. Pero si lo hacemos más de tres veces empezaremos a murmurar cosas como «tu madre era un troll» a la pantalla. Y no es plan… Así que para automatizar un poco, obviando sistemas de Integración Continua, mucho más-mejores y más mega-profesionales, podemos usar el comando git archive.

Todo vino con una búsqueda en google similar a «svn export in git«. En SVN era tan sencillo como el comando anterior, así que siendo git mucho más evolucionado, con exoesqueleto de adamantio y todo, tenía que poderse hacer. No me equivocaba. Un par de visitas a stackoverflow y ya estaba creándome todos los scripts en bash para ello.

Desde el path donde tengamos el repositorio que queramos exportar ejecutamos:


# Formato tar.gz
git archive HEAD | gzip > /path/to/export/project.tar.gz

# O en zip
git archive --format zip --output /path/to/export/project.zip HEAD

Es importante haber hecho commit de todos los ficheros que queramos, puesto que en este caso nos subirá lo que esté en HEAD (se puede poner master / devel o la rama que uséis vosotros). Con esto tendremos un fichero comprimido que podremos copiar donde queramos.

Esto nos comprimirá todo el contenido del proyecto, obviando el directorio .git. Tampoco es mucho avance.

Para elegir qué más cosas quitar de la exportación, podemos hacer uso del fichero .gitattributes, que crearemos en el raíz del proyecto. El mío tiene un aspecto parecido al siguiente:

# Used to remove files from deployment using `git archive`

# Git Files
.gitignore export-ignore
.gitattributes export-ignore

Thumbs.db export-ignore
project.tar.gz export-ignore

# Directories
_docs export-ignore
_scripts export-ignore

# General text files
*README.txt export-ignore
*LICENSE.txt export-ignore
COPYRIGHT.txt export-ignore
CHANGELOG.txt export-ignore

Esto hará que se excluyan las carpetas /_docs y todos los archivos que no queramos, como el propio .gitattributes o los famosos .gitignore, dejándonos un proyecto limpio y listo para poder subirse a producción sin mucho problema.

¡Feliz semana!

Robocode – Buscando el robot de combate definitivo

El vídeo que os traigo hoy va de Robocode, un juego de programación cuyo objetivo es construir robots que acaben con otros robots. Simple y sencillo. Es como una versión cojo-evolucionada del Core War, pero en lugar de vírus, luchan tanques, en lugar de ensamblador endemoniado, Java o .NET y en lugar de ocupar la memoria del oponente, es destruir su tanque.

Es decir, que se parece como un huevo a una castaña, pero no deja de ser un juego de programación :).

Los autores (o al menos uno de ellos) han puesto un enlace al paper (http://www.jonnielsen.net/RoboReportOfficial.pdf). Usan dos controladores, uno basado en una red neuronal entrenada con backtracking (el de la torreta) y otro basado en una red neuronal evolucionada (el de movimiento). La pena es que, según los resultados, sólo puede vencer a oponentes fáciles. Los mejores siguen ganando. Aún así, tiempo al tiempo. Yo confío en las máquinas :D.

Buenas noches!

Evolución de equipos de fútbol

La gran mayoría de las personas que me conocen saben que me encantan los días de fútbol porque puedes salir a la calle e ir al cine y estar prácticamente sólo. Sin embargo, cuando se trata de softbots, la cosa cambia :D.

El vídeo que os presento aquí es una simulación de una evolución de equipos de fútbol a golpe de hacer evolucionar redes neuronales.

El vídeo explica muy someramente cuáles son los parámetros de aprendizaje, pero para los que conozcan un poco del tema lo dejan bastante claro. Lo divertido viene a partir del segundo 28», donde se van presentando partidos con distintas generaciones.

Para los que tengan ganas de conocer un poco más sobre su funcionamiento, el paper se encuentra en esta dirección: http://downloads.hindawi.com/journals/jr/2010/841286.pdf. Espero no meterme en un lío. De todas formas, si tengo yo el enlace en mis bookmarks no debe ser muy complicado encontrarlo :).

Que lo disfrutéis!