Bi0[x]iD's WaY oF LiFe

Un blog a 60 pulsaciones por minuto


Usando git en (pre)producci贸n

Desarrollando con git

Desarrollar es un trabajo pesado, eso lo sabemos todos. Sobre todo, si queremos cumplir con todas las聽buenas pr谩cticas que deber铆amos.

Una de esas buenas pr谩cticas es聽llevar un control de versiones de tu software. No porque necesites separar la versi贸n 1 de la 2, sino porque llevar un control de versiones exhaustivo te ayudar谩 despu茅s a encontrar errores, a poder revertir cambios, y a que otros (o t煤 mismo dentro de dos meses) puedan revisar tu c贸digo para ayudarte a mejorar.

Muchos de nosotros, cuando estamos desarrollando algo, lo hacemos en un estado que llamamos de聽preproducci贸n. Esto s贸lo quiere decir que nuestro desarrollo no est谩 abierto a todos, visible. Por tanto, es un sitio de pruebas, donde nos da igual que se escupan errores por pantalla, o que la p谩gina est茅 descuadrada.

Cuando estamos haciendo ese trabajo podemos hacer 100-200 cambios al d铆a, y llevar un control de versiones de cada uno de los cambios que hacemos se puede convertir en algo pesado. 驴C贸mo lo convertimos en algo asequible? Automatiz谩ndolo.

El scripting

Soy de los que usan git聽(y SVN) desde聽consola. Para m铆 es mucho m谩s r谩pido porque juego con el聽scripting.

Por un lado, tengo una serie de alias definidos:

  • alias fp=’git format-patch’
  • alias ga=’git add .’
  • alias gc=’git commit -a -m’
  • alias gp=’git push origin master’
  • alias log=’git log –pretty=oneline’
  • alias sinc=’sh /Users/raven/Git/sinc’
  • alias st=’git status’

De esta forma, cada vez que tengo un cambio nuevo, los comandos a ejecutar son los siguientes:

> ga
> gc "mensaje de descripci贸n del commit"
> gp

Mi estructura de directorios incluye, en mi carpeta de usuario, una carpeta /Git donde tengo todos los repositorios de trabajo. Para cada uno de ellos tengo un peque帽o script que lanza una sincronizaci贸n con el servidor, de forma que si he cambiado algo all铆,聽ese cambio se reflejar谩 en mi directorio local.

As铆, s贸lo tendr茅 que ejecutar聽un comando, y se actualizar谩 mi copia local. Todos los scripts de actualizaci贸n los tengo en la carpeta /Git, en vez de dentro de cada uno de los repositorios, para que no interfieran con las copias.

git/raven.es> sh ../raven.sh

Ese archivo raven.sh tiene el siguiente contenido, que cambia para cada uno de los repositorios:

expect -c 'spawn rsync -avrhz -e "ssh -p" --progress --delete --exclude-from "/Users/raven/Git/exclude.txt" MIUSER@MISERVER:MIDIRECTORIO/raven.es/ /Users/raven/Git/raven.es/ ; expect password ; send "MIPASSWORD;\n" ; interact'

Este archivo exclude.txt tiene, en cada l铆nea, nombres de archivos o directorios que se ignorar谩n en la sincronizaci贸n, y puede tener el contenido que necesit茅is. En mi caso, el archivo tiene el siguiente contenido:

sources
public_html/database.*
core.*
.svn
.git
stats
backup_site
backup
*/backup
versiones-backup
uploads
blogs.dir
upgrade
logs
cgi-bin
*.tar.gz
hiccup
wp-content/uploads/
wp-content/blogs.dir/
wp-content/upgrade/
error_log
*/error_log
cache
*/cache

Automatizando a煤n m谩s

En mi directorio Git tambi茅n tengo un archivo, sinc, que lanza la sincronizaci贸n de todos los repositorios, lanzando uno a uno los sincronizadores individuales.
Aqu铆 las posibilidades son m煤ltiples. Dependiendo de vuestra forma de trabajar, os puede interesar lanzar la sincronizaci贸n y el git add en la misma orden, o hacerlo todo en bloque. Pod茅is fabricaros vuestro propio script a medida.

Lo que ten茅is que recordar es una cosa importante. Si hay algo que hac茅is muchas veces de forma parecida, invertid tiempo en automatizarla. En muy poco tiempo notar茅is la diferencia.



3 respuestas a «Usando git en (pre)producci贸n»

    1. No lo conoc铆a. Gracias 馃檪

  1. […] Los sistemas de control de versiones son b谩sicos para todos los desarrolladores que trabajan en equipo y que quieren tener su c贸digo ordenado, para facilitar la vida cuando est谩s en preproducci贸n nada mejor que leer esta entrada: Usando git en (pre)producci贸n –聽Bi0[x]iD’s WaY oF LiFe […]

Deja un comentario