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!

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *