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?
Respuestas:
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.Pon eso en el
hooks/
directorio comopost-receive
y ejecutable. Por supuesto, la ruta cambia a donde tiene los archivos de su servidor web (el uso deGIT_WORK_TREE
establece 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
post-receive
gancho, que en realidad es solo un script donde puedes poner lo que quieras.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-receivedenyCurrentBranchLa 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.
fuente