Bueno, volvamos a lo técnico en el blog.
En ciertas ocasiones es conveniente mantener los archivos generados en una carpeta diferente a la de nuestro repositorio GIT, el caso más común para este patrón es dentro de un servidor web donde www-data es propietario de la carpeta mientras que en el repositorio GIT los permisos son aplicados para un grupo o usuarios diferentes.
Sitioweb: /var/www/sitioweb Repositorio: /opt/repositorios/sitioweb.git
Servidor
Comenzamos creando el repositorio tipo bare para que contenga sólo el árbol de actualizaciones y no cree un subdirectorio .git, después haremos ciertos ajustes para poder realizar actualizaciones sin tener que hacer merge hacia el canal principal.
mkdir -p /var/www/sitioweb mkdir -p /opt/repositorios/sitioweb.git cd !$ git init --bare git config core.worktree /var/www/sitioweb/. git config core.bare false git config receive.denycurrentbranch ignore
Ahora añadiremos una instrucción al script post-receive
Archivo: hooks/post-receive #!/bin/sh git checkout -f
Obviamente tenemos que darle permisos de ejecución
chmod +x hooks/post-receive
Local
En el equipo local sólo es necesario añadir el repositorio recién creado como destino y podemos añadir los archivos inmediatamente
git remote add webserv ssh://usuario@servidor/opt/repositorios/sitioweb.git git push webserv master
Listo