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.