2011-10-03 14 views
17

Me gustaría copiar automáticamente los archivos confirmados en una carpeta determinada para que se puedan ver en un navegador, pero me gustaría hacerlo sin tener que crear un repositorio desnudo que refleja el repositorio principal (como se muestra en here) y me gustaría que esto suceda en la confirmación.Gancho git post-commit simple para copiar archivos comprometidos en una carpeta determinada

¿Hay alguna manera simple de crear un gancho que lea qué archivos se han confirmado y los copie/actualice en un servidor web en vivo?

Por ejemplo: Tengo una carpeta llamada /example.com y un repositorio de git. Quiero que cuando confirme index.html en el repositorio, el archivo index.html correspondiente de /example.com se actualice con el contenido del archivo comprometido

Respuesta

23

Una buena forma de hacerlo es crear un post-commit que ejecuta git checkout -f con el árbol de trabajo establecido en el directorio expuesto por su servidor web y el directorio git establecido en el directorio .git en su repositorio de desarrollo. Por ejemplo, se podría crear un archivo .git/hooks/post-commit que hizo:

#!/bin/sh 
unset GIT_INDEX_FILE 
export GIT_WORK_TREE=/example.com/ 
export GIT_DIR=/home/whoever/development/web-project/.git/ 
git checkout -f 

tener cuidado con esto, sin embargo - la -f significa que git puede eliminar o sobrescribir los archivos para hacer /example.com/ partido del árbol en su más reciente comprometerse.

(Recuerde hacer el ejecutable .git/hooks/post-commit archivo también.)

+0

Esto hace el trabajo perfectamente. Gracias – viorel

+0

En Windows, ¿el script espera rutas completas y cuál es la sintaxis? ¡Gracias! – andli

+0

@andli Estoy usando msysgit, y funciona usando las mismas rutas que usarías en una ventana de git bash. – Shlomo

Cuestiones relacionadas