2012-04-06 9 views
6

Estoy tratando de entender a Git y desplegar sitios web con (o sin) él. He estado buscando en Google y buscando y leyendo, pero no puedo encontrar una respuesta a mi caso específico o inquietudes. Todavía estoy en las etapas de planificación para hacer esto, pero me gustaría hacerlo bien desde el principio y encontrar un flujo de trabajo que me funcione. Trataré de explicar la situación lo más claro posible:Despliegue del sitio web de PHP desde el repositorio de Git

Tengo un VPS remoto que ejecuta mi sitio web en vivo en www.example.com y la versión de desarrollo en dev.example.com (residen en/var/www)/example/htdocs/y/var/www/example/subdominios/dev /).

El desarrollo se ejecuta desde un repositorio vacío en /opt/git/example.git/. Hay una rama maestra y de desarrollo en el repositorio desnudo. Yo y el otro desarrollador tenemos un clon de este repositorio en nuestra máquina local. Nos retiramos de la rama de desarrollo y trabajamos desde allí. La idea es que dev.example.com tenga un código actualizado de la rama de desarrollo y una vez que se pruebe apropiadamente, nos fusionaremos en maestro, agreguemos una etiqueta y actualicemos example.com (básicamente, este git flow).

El primer enfoque que encontré en el canal IRC de Git usa ganchos para actualizar repositorios, pero esto me parece muy limitante y en ocasiones no deseado, me gustaría ejecutar un comando en el servidor después de pulsar, que actualiza el entorno de desarrollo . Otro comando (o script de shell) actualizaría el sitio en vivo de la rama principal después de fusionar el desarrollo). También encontré a Capistrano, pero eso parece estar un poco sobre mi cabeza en este momento.

Mientras leía, encontré que mucha gente sugirió crear dos clones más en el control remoto: uno para el sitio en vivo y otro para el sitio de desarrollo, tirando de las ramas cuando sea necesario. Sin embargo, esto también deja accesibles los archivos de control de versiones a través de la web, que es algo que no quiero. Idealmente, quiero una copia "limpia" sin ningún archivo o carpeta git.

También encontré un enfoque usando git archive, pero al ejecutar git archive desde mi repositorio simple solo me permite archivar la rama principal. Lo hago usando el comando git archive --format=tar HEAD | (cd /var/www/example/htdocs/ && tar xf -) en /opt/git/example.git/.

Siento que el enfoque git archive me lleva más cerca de una respuesta, pero estoy limitado por mi falta de conocimiento de Git. ¿Puedo alterar el comando para usar una rama en lugar de HEAD (cuando intenté usar Origin/Master en lugar de HEAD, recibí un error)? ¿Hay alguien que pueda señalarme en la dirección correcta?

Respuesta

4

Puede usar cualquier tree-ish (cualquier rama, etiqueta, sha1 hash, etc.) como argumento para git archive. No puede usar origin/master dado que está en el repositorio desnudo y no tiene un origen. Debe usar los nombres de las sucursales locales, p.

git archive --format=tar develop 
+0

Desearía haberlo votado 5 veces. Tan simple ... tan simple. – Bram

+0

Hehehe gracias :) – ralphtheninja

+0

Una última pregunta antes de finalmente aceptar esto: ¿es posible eliminar los archivos .gitignore? – Bram

Cuestiones relacionadas