Categorías
código abierto Mundo 2.0

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.

Categorías
Mundo 2.0

Git f√°cil en OSX Mavericks

Soy usuario de Git. Lo uso a diario en repositorio local, y sincronizo casi cualquier cosa que hago con GitHub y BitBucket (aunque casi todo con repositorios privados).

bitbucket

Normalmente uso¬†git por l√≠nea de comandos acompa√Īado por Transmit y Sublime Text (otro d√≠a os cuento un poco m√°s acerca del m√©todo de trabajo), y desde que instal√© Mavericks me he encontrado con un problema¬†un poco inc√≥modo: git ahora necesita permisos de administraci√≥n.

Al principio pens√© que ser√≠a sencillo. Cambiar los alias que utilizo en consola a√Īadi√©ndoles un¬†sudo delante, y listo. Ya se ejecuta como administrador.

alias st='sudo git status'
alias ga='sudo git add .'
alias gc='sudo git commit -a -m'
alias gd='sudo git diff'
alias gl='sudo git log'
alias gogit='cd ~/Git'
alias gp='sudo git push origin master'

Pero no fue tan sencillo. Una vez a√Īadido los sudos, el sistema me ped√≠a la clave. Pero no s√≥lo una vez, que era lo que esperaba, sino cada 15 minutos. Algo bastante inc√≥modo, sobre todo si est√°s todo el d√≠a sincronizando.
Buscando soluciones he topado con este artículo de MacWorld que explica, de forma muy sencilla, cómo hacer que no te pida la clave cada vez que tengas que ejecutar algo como root o con permisos de administración.

En mi caso, siguiendo los pasos del art√≠culo, la cadena que he tenido que a√Īadir ha sido la siguiente:

raven   ALL=(ALL) NOPASSWD: ALL

Si habéis tenido el mismo problema, espero que esto os haga la vida un poco más fácil.

Categorías
código abierto

Usando Git

Estoy empezando a probar Git.

Cosas que necesitaré más adelante y tengo que guardar:

  cd existing_git_repo
  git remote add origin git@github.com:user/project.git
  git push origin master

¬ŅQuieres saber m√°s de Git? Echa un vistazo en su p√°gina.