2009-05-19 5 views
10

Situación:página web de actualización con un único comando (git push) en lugar de FTP de arrastrar y soltar

  • tengo una copia local de un sitio web
  • Tengo un servidor que tenga acceso SSH a

¿Qué quiero hacer?

  • Commit localmente hasta que estoy feliz con mi código
  • Hacer ramas localmente
  • Tener una rama principal que es la que debe ser inserta en el servidor
  • actualización de la página web usando un solo comando (git push origin master)

Si configuro un repositorio de git localmente usando git init, y luego lo presiono en una carpeta en el servidor, no funciona. Cuando envío un FTP al servidor para verificar los archivos, en realidad están allí. Cuando hago SSH en el servidor y hago un estado de git, no está limpio, aunque debería ser así desde que presioné el servidor.


pasos que estoy haciendo:

  1. crear una nueva carpeta en el ordenador (mkdir folder_x)
  2. entrar en esa carpeta (cd folder_x)
  3. establecer un nuevo repositorio git allí (git init)
  4. (el repositorio git se configuró correctamente)
  5. Empuje el repositorio al servidor usando git push origin master (donde el origen es s y como usuario: [email protected]) ​​
+0

duplicado http://stackoverflow.com/questions/3728054/git-push-to-live-server – cmcginty

+0

duplicado posible de [Implementar un proyecto usando Git push] (http://stackoverflow.com/questions/279169/ deploy-a-project-using-git-push). [git config receive.denyCurrentBranch updateInstead] (http://stackoverflow.com/a/28381235/895245) en el control remoto es una buena posibilidad. –

Respuesta

12

que necesita para escribir un gancho posterior a recibir git checkout -f que se ejecuta después de que el repositorio Git remoto recibe un empujón. Ver Using Git to manage a web site para más detalles.

+1

esto parece suponer que en realidad no trabajo en mi servidor web. Entonces, cualquier trabajo hecho allí se pierde – gman

+0

Con Git 2.3 ya no necesitas este gancho, puedes hacer 'git config receive.denyCurrentBranch updateInstead'. Ver https://github.com/blog/1957-git-2-3-has-been-released. – Aurelien

+1

¡Creo que el comentario de @Aurelien debería ser la respuesta aceptada! ¡Muy buena solución! –

1

Cuando ingresa a un repositorio de git, no actualiza los archivos de trabajo de ese repositorio. En general, cuando empujas, deberías empujar hacia un repositorio desnudo, que parece ser la forma en que intentaron hacer que funcione.

Para uno de mis proyectos (locales), escribí un script para verificar automáticamente el último subdirectorio "ui" cuando paso mi trabajo a un repositorio de implementación. Está incrustado en una respuesta anterior aquí: Developing Django projects using Git

También podría simplemente tener el gancho post-actualización en el servidor hacer un "reinicio git --hard master" si alguien empuja una actualización a la maestra, y usar una no física repositorio en lugar de tener un área separada para los archivos desprotegidos.

0

uso el gancho posterior a la actualización que se detallan en esta FAQ: http://git.or.cz/gitwiki/GitFaq#non-bare

Se actualizará su árbol de trabajo si ha configurado el repositorio remoto como "desnudo".

0

Git Versión 1.9.1
Ubuntu Server 14.04 LTS
Servidor LAMP

Configuré mi servidor LAMP para actualizar mi directorio de trabajo de mi repositorio Git cada vez que uno de mis desarrolladores web realiza un cambio al servidor. Noté que el registro notaría los nuevos commits, pero no actualizaría el directorio de trabajo. En lugar de hacer esto manualmente (git checkout -f) para cada actualización, esto se puede configurar automáticamente para hacerlo después de que se haya recibido una inserción.

  1. En su directorio ".git", entrar en los "ganchos " carpeta.
  2. Crear un archivo llamado "posterior a recibir" dentro de los "ganchos" carpeta con el siguiente contenido:

    #/bin/sh
    directorio de trabajo
    # actualización después de recibir un empujón de clientes remotos.
    # Esto debe dirigirse al directorio de trabajo de git.

    GIT_WORK_TREE =/var/www/git checkout dev_site -f

  3. Habilitar permisos para ejecutar el archivo escribiendo "chmod + x post-reciben" en la carpeta "ganchos".

Ahora actualizará el directorio de trabajo cuando se envíen los commits al repositorio de Git. Mi sitio ahora muestra los cambios cuando los visito en un navegador.

En este ejemplo, mi directorio de trabajo es "/var/www/dev_site". Cambie esto de acuerdo a dónde está su Repo.

Tenga en cuenta que este Repo no es un Repo al descubierto. Un Repo desnudo no tiene un directorio de trabajo desde el que pueda leer un servidor web.