tag practices delete crear best all git deployment push git-push git-remote

delete - git tag best practices



Git push to live server (6)

Tenemos un sitio web que tiene todos sus archivos PHP / HTML / JS / CSS / etc almacenados en un repositorio Git.

Actualmente tenemos 3 tipos de computadoras (o casos de uso) para el repositorio.

  • Desarrollador local: extraiga los últimos cambios, realice cambios, confíe en el repositorio local, presione en el servidor maestro
  • Servidor maestro: repositorio central, todos los cambios se envían al servidor maestro
  • Servidor web: los cambios se bajan del servidor maestro al implementar el sitio web

Así que actualmente nosotros:

local: git push origin master local: password: ******** local: ssh [email protected] webserver: password: ******** webserver: cd ~/domain.com/ webserver: git pull origin master

Entonces, mi pregunta es: ¿hay alguna manera de que desde mi computadora local pueda ingresar directamente al servidor web?

es decir.

local: git push origin master local: password: ******** local: git push webserver master local: password: ********


  1. Agregar el $ git remote add server ssh://server_hostname:/path/to/git/repo remoto Agregar $ git remote add server ssh://server_hostname:/path/to/git/repo
  2. Checkout temp branch en servidor $ git checkout -b temp
  3. Push cambios $ git push server
  4. Verifique la rama anterior y elimine la temporal $ git checkout - # shorthand for previous branch, git checkout @{-1} $ git branch -d temp

Tengo más información de fondo aquí: https://medium.com/@2upmedia/git-push-to-live-server-5100406a26


Antes de implementar los cambios locales, verifique si algo ha cambiado en el servidor de destino.

Agregue al script de implementación para asegurarse de que nada haya cambiado en el servidor:

$ git ls-files -dmo --exclude-standard

Estará vacío si hay archivos sin cambios, más fácil que analizar el estado de git




Sí, puede enviar directamente a su servidor web, pero no lo recomendaría ya que solo debe enviar a los repositorios clonados con el argumento --bare. Utilizaría el sistema git hook para que el repositorio principal actualice automáticamente el repositorio en el servidor web. Echa un vistazo al enlace posterior a la actualización en:

http://git-scm.com/docs/githooks

Este script a su vez podría iniciar sesión en el servidor web a través de ssh y hacer

cd ~/domain.com/ git checkout master git pull origin master

De esta manera, solo necesita enfocarse en empujar al servidor central y no tiene que preocuparse por el servidor web, siempre se actualizará una vez que se haya realizado un empuje. Si puedes automatizar algo, entonces automatízalo :)

Incluso encontré un buen artículo para usted sobre el inicio de sesión a través de ssh en un script (si tiene que usar una contraseña, esto es trivial si se ha configurado una clave ssh):

http://bash.cyberciti.biz/security/expect-ssh-login-script/

¡Espero que esto ayude!


Tenía la misma consulta y no estaba satisfecho con la respuesta actualmente más votada aquí, terminé siguiendo git-website-howto que describe el proceso bastante bien y es un enfoque mucho más limpio y rápido de la OMI.

TL; DR, git init --bare crear un nuevo repositorio en su servidor web donde empujará sus cambios desde su máquina de desarrollo. Cuando el repositorio web recibe sus cambios, dispara el enlace posterior a la recepción que luego copia los archivos a su raíz web.

Me gusta este enfoque porque el enlace posterior a la recepción funciona en su servidor para que su máquina local pueda empujar mucho más rápido y liberarse. Esto también hace que sea muy fácil configurar el seguimiento remoto para una rama en particular. Por lo tanto, podría tener una sucursal llamada production para actualizar su servidor web, mientras que su maestro continúa desarrollando y enlazando a su repositorio git en otro lugar.

Nota: necesitará ejecutar git config receive.denycurrentbranch ignore en su servidor web para suprimir una advertencia en su caja de desarrollo local cuando presione.