2011-04-24 12 views
37

que estaba previsto instalar en un servidor remoto¿Cómo configurar un gancho Git para que después de presionar a ssh: //[email protected]/~/bar.com.git, vaya a ~/bar.com y haga un git pull?

foo.com/~/bar.com  # live webpage content 
foo.com/~/bar.com.git # a bare repo 

así, de mi máquina local, que pueda hacer un

git push 

y va a empujar a foo.com/~/bar.com.git en la máquina remota (el pleno camino es ssh://[email protected]/~/bar.com.git

¿Cómo puede ser añadido un gancho , de manera que después de que el empuje, el servidor remoto cd ~/bar.com y hacer un git pull para que todo el contenido se actualice (lo mismo que la máquina local)? (Sin necesidad de ejecutar git update como por Mercurial?)

(esto está relacionado con Cannot git clone a folder on a server and then edit and git push? ahora puedo ssh a foo.com y cd ~/bar.com y esperar allí y hacer un git pull siempre después de un git push desde la máquina local, pero sería sea ​​bueno tenerlo hecho automáticamente)

Actualización: por favor, solo envíe una respuesta si conoce detalles específicos y cómo hacerlo. Si busca en Google y publica el primer o segundo resultado de google aquí, no lo va a ayudar.

Actualización 2: Fui a ~/bar.com.git/hooks y añadir un nuevo archivo post-receive con el contenido:

#!/bin/bash 

cd ~/bar.com 
git pull ../bar.com.git master 

y también chmod 755 post-receive, y si puedo editar un archivo en la máquina local, y luego git com -m "ok" y git push , no hace que el cambio vaya a la carpeta de la máquina remota ~/bar.com

Respuesta

55

Puede agregar un gancho post-receive al repo ~/bar.com.git para esto. Para ello añadir al directorio ~/bar.com.git/hooks/ un archivo ejecutable post-receive con el contenido:

#!/bin/sh 

unset $(git rev-parse --local-env-vars) 
cd ~/bar.com 
git pull 

Asegúrese de que el archivopost-receive tiene los bits de ejecución (por ejemplo 755.).

Ahora cada vez que se empuja algo al repositorio ~/bar.com.git, el repositorio ~/bar.com se actualiza automáticamente.

Ver también

a entender por qué desarmar algunas variables de entorno es necesario.

+1

Creo que sé algo como esto, pero ¿cómo? ¿Cuáles son los detalles? también puedes decir "ve a comprar el libro de Git" y la respuesta es –

+2

"post-recepción" es simplemente un script de shell. Puedes poner cualquier cosa ahí. – troelskn

+0

Consulte la actualización 2 –

1

uso el post-update siguiente secuencia de comandos (asegúrese de configurar bit ejecutable en él):

#!/bin/sh 
rm -rf ~/public_html/xxx 
git-archive --format=tar --prefix=xxx master | tar x -C ~/public_html 

Lo hace la cosa, pero hay una pequeña ventana cuando el sitio no está disponible. Hacer git pull directamente en el suyo ~/bar.com expondrá el directorio .git de git, así que asegúrese de bloquearlo en su servidor http, o mantener .git en algún lugar más alto en la jerarquía de directorios, es decir. algo así como:

~ 
\ 
    - repo 
    \ 
    - .git 
    - bar.com 
     \ 
     - your content 
+3

quita todo el directorio y vuelve a llenarlo? ¿Qué pasa si el directorio es de 300 MB y todo lo que hizo fue un cambio de 1 línea? rehacer todo 300MB? –

+0

Funciona para mí (mi sitio es bastante pequeño). En tu caso, el enfoque 'git pull' seguramente sería mejor. También tenga en cuenta: no tiene sentido tener un repositorio al que presiona y otro justo al lado del mismo que saque del primero. Parece más sensato simplemente presionar a un repositorio y hacer que actualice sus contenidos automáticamente (git solía funcionar de esa manera, pero lo han cambiado. IIRC hay alguna opción para volver al comportamiento que deseas). – wolf

+0

También puede consultar el archivo en una ubicación temporal y sincronizarlo con el directorio "working". –

Cuestiones relacionadas