Desplegando cambios con Git
Hace tiempo que venía postergando investigar esto por falta de tiempo y porque pensé que iba a ser un tanto más complicado. La verdad, es muy simple (por lo menos un setup básico) y ahorra muchísimo tiempo.
Si aún estás usando FTP para desplegar aplicaciones/sitios a producción, pará lo que estés haciendo y tomate un rato para subir todo a un repositorio Git y automatizar el proceso. Vale cada segundo invertido. Disclaimer: Esto es una guía básica, hay mil opciones y maneras de cómo configurar esto.
Para esto necesitás:
- Git instalado en tu máquina y en tu servidor.
- Acceso SSH a tu servidor.
- Un repositorio Git con el código a desplegar.
Repositorio Git remoto
Lo primero que hay que hacer es setear un repositorio remoto auxiliar en el servidor. Debería estar fuera del webroot, es decir, sin acceso público.
git init --bare demoproject.git
Con esto creamos un repositorio Git “demoproject.git” vacío.
Git Hook
Luego, la parte fundamental es crear un “hook”. Para esto, creamos un archivo de nombre “post-receive” en el directorio “hooks” del repositorio. En el ejemplo anterior sería: directorio/hacia/repositorios/git/demoproject.git/hooks/post-receive
.
El archivo deberá contener las siguientes líneas:
#!/bin/sh GIT_WORK_TREE=/directorio/hacia/webroot/demoproject
git checkout -f
Luego, solo falta setear permisos al archivo:
chmod +x hooks/post-receive
Esa es toda la configuración que hay que hacer en el servidor.
Push con los cambios
Por último, en tu máquina local hay que agregar la referencia al repositorio Git remoto que tenemos en el servidor, al que vamos a hacer push con los cambios que queremos en producción. Yo le llamé “live”.
git remote add live [email protected]:directorio/hacia/repositorios/git/demoproject.git
git push live +master:refs/heads/master
Listo. Se hizo push del código local hacia el server y luego se hizo checkout hacia el webroot, publicando el sitio con los cambios.
Luego, cuando quieras subir lo último a producción, solo basta ejecutar:
git push live
Notas
Para más información recomiendo leer bien las notas en los artículos aquí abajo. También recomiendo investigar el sistema de branches de Git, para contar por lo menos con un branch de desarrollo y otro con el código que iría en producción.