¿Cómo hacer una actualización de archivos "git push" en su servidor web?

13

Tengo algunos sitios que están alojados en el mismo servicio de alojamiento web en alojamiento compartido. Mi proveedor de alojamiento web admite Git y tengo acceso SSH a él, y también tengo la configuración de Git en mi computadora portátil.

Quiero hacerlo para que cuando haga un "maestro de origen de git push", actualice automáticamente los archivos en mi servidor web, y también guarde una copia de seguridad de los archivos del commit anterior para que pueda retroceder fácilmente si lo deseo. es posible?

Ryan
fuente
Curioso: ¿quién es su proveedor de alojamiento?
usuario
¿Y por qué querrías una "copia de seguridad de los archivos del commit anterior"? Puede empujar el commit anterior, si desea retroceder (suponiendo que siempre sepa lo que presionó al final, pero debe saberlo de todos modos).
sleske

Respuestas:

12

Esto se resume en Uso de Git para administrar un sitio web.

La clave del proceso es el enganche del lado del servidor 'post-recepción' (más sobre git hooks en Customizing Git - Git Hooks y la página de manual de githooks ). Este enlace se ejecuta después de que el servidor ha recibido todos los datos.

Una vez que el servidor recibe los datos, ejecuta git checkout -f La opción -f forzará un pago al encabezado incluso si hay diferencias locales.

#!/bin/sh
GIT_WORK_TREE=/var/www/www.example.org git checkout -f

Pon eso en el hooks/directorio como post-receivey ejecutable. Por supuesto, la ruta cambia a donde tiene los archivos de su servidor web (el uso de GIT_WORK_TREEestablece la variable de entorno para que no necesite hacer malabares con los archivos de puntos y la configuración de git en el servidor).

Para retroceder, se debe etiquetar cada lanzamiento (esto también se puede hacer como parte del enlace posterior al compromiso). Al etiquetar la versión, se puede identificar fácilmente el lugar al que se debe revertir, aunque eso probablemente implique iniciar sesión en el servidor y verificar esa etiqueta.


fuente
Cabe señalar que esto significa que está utilizando git como herramienta de implementación, que es algo para lo que realmente no está destinado. Puede funcionar, pero existen numerosas limitaciones (es necesario descargar el repositorio completo, no hay forma de invocar scripts o administrar permisos de archivos, no hay forma de descomprimir cosas ...). Probablemente sea mejor usar una herramienta de implementación adecuada.
sleske
@sleske Puedes hacer todo eso en el post-receivegancho, que en realidad es solo un script donde puedes poner lo que quieras.
Mario
@ Mario: Sí, puede, lo que significa que está implementando efectivamente su propia solución de implementación como un enlace posterior a la recepción. Todavía hay beneficios al usar una solución existente, pero a veces puede ser mejor usar el suyo ...
sleske
Incluso puede pagar en una carpeta intermedia y tener enlaces desde la carpeta web a la carpeta intermedia para evitar tener archivos .git en su carpeta web.
Doblado el
0

La forma más sencilla de actualizar el árbol de trabajo del repositorio al que está presionando es establecer git config receive.denyCurrentBranch updateInstead en el lado del receptor. Ver https://git-scm.com/docs/git-config/#git-config-receivedenyCurrentBranch

La respuesta de Ryan con ganchos de confirmación de publicación es mejor, ya que permite verificar en una ubicación diferente (es probable que no desee tener el .git en su carpeta web). Pero a este nivel, podría ser una buena idea usar alguna herramienta de implementación existente, como dijo sleske en los comentarios.

Echsecutor
fuente