Usar git para un servidor

por Halí - última modificación: Noviembre 19, 2018
GitServidor

Usar git para controlar las versiones locales ya es de por si una gran ayuda, ahora bien, la herramienta se vuelve más útil cuando se tiene que utilizar para subir código y proyectos, por ejemplo, a un servidor web.

Antes que nada deben revisar que su servidor, o el lugar a donde van a subir su repositorio tenga git, posteriormente deben iniciar un repositorio vacío con el comando:

git --bare init [Nombre del repositorio]

Por convención, los repositorios vacíos llevan un .git al final por lo que un ejemplo se vería así:

git --bare init glowing-computing-machine.git

Después de haber hecho el repositorio vacío podrán acceder a el y verán los siguientes archivos y directorios

ls bare repo

Ahora, para que nuestro repositorio se actualice automáticamente, debemos agregar un hook… exacto, en la carpeta de hooks encontraremos algunos por default, pero el que utilizaremos se llama diferente a los que se encuentran ahí: post-receive. Creamos el archivo y le agregaremos la siguiente línea:

git --work-tree=[ruta de destino] --git-dir=[ruta de origen] checkout -f
#
# La ruta de origen será la ruta en donde está
# el repositorio vacío, un ejemplo sería este:
git --work-tree=/home/hali/Documentos/Git/_site \
--git-dir=/home/hali/Documentos/Git/glowing-computing-machine.git \
checkout -f


Por último agregamos los permisos para ejecutar el archivo que creamos

chmod +x post-receive


Solo queda probar, en mi caso, el directorio al que apunté está completamente vacío

ls site

luego haré un git clone

ls glowing local

y ¡listo! Podemos entrar a subir contenido… pero resulta molesto tener que escribir nuestra contraseña cada que necesitemos hacer un pull o un push, así que con ayuda del comando ssh-copy-id podemos agregar nuestra llave pública a la lista de llaves aceptadas en el servidor

ssh-copy-id [ip del servidor]


Resultado del comando ssh-copy-id

Así podemos subir codigo a nuestro repo y este se copiará automáticamente en el directorio que elegimos.

Resultado del commit inicial
Resultado del commit en el sitio remoto