Estos son los pasos que sigo para configurar un GIT en el servidor para utilizarlo como repositorio y de paso poner en producción los cambios que subo la rama raíz del proyecto.
Lo primero es crear el repositorio en el servidor, este debe estar fuera de la carpeta web:
git init --bare repositorio.git
Una vez creado podemos acceder al directorio repositorio.git y comprobar que se ha montado correctamente con el comando:
git status
Después creamos un hook para que cada vez que haya un push sobre el repositorio, compruebe la rama desde la que se ha hecho y si es la rama master haga una copia en el directorio donde este alojada la web:
nano hooks/post-receive
Y en este fichero copiamos el siguiente código:
#!/bin/bash
while read oldrev newrev refname
do
branch=`echo $refname | cut -d/ -f3`
echo "**** push de la rama $branch ****"
if [ "master" == "$branch" ]; then
GIT_WORK_TREE=/RUTA/ABSOLUTA/DE/LA/WEB git checkout -f $branch
fi
done
Por último debemos dar permisos de ejecución al nuevo hook y con esto habremos terminado la configuración del servidor:
chmod +x hooks/post-receive
Ahora toca clonar el repositorio en local para poder trabajar con el. Nos posicionamos en la carpeta donde vayamos a desarrollar el proyecto y ejecutamos:
git clone ssh://USUARIO_SSH@SERVIDOR/RUTA_ABSOLUTA_AL_FICHERO_repositorio.git ./
Nos pedirá la contraseña de nuestro usuario de ssh y listo, ya podemos trabajar normalmente.
Comandos extra que pueden ser útiles:
En el caso de querer copiar en el servidor el contenido de una rama concreta a un directorio podemos ejecutar el comando:
git archive RAMA_A_COPIAR | tar x -C /RUTA_DE_DESTINO
Otro caso habitual es trabajar con ramas de test e integración. Para crear las ramas en remoto podemos ejecutar desde local:
git push --set-upstream origin NOMBRE_RAMA