Git push to live server

Tenemos un website que tiene todos sus files PHP / HTML / JS / CSS / etc. almacenados en un repository de Git.

Actualmente tenemos 3 types de computadoras (o casos de uso) para el repository.

  • Desarrollador local: aprovechar los últimos cambios, realizar cambios, comprometerse con el repository local, enviar al server maestro
  • Servidor maestro: repository central, todos los cambios se envían al server maestro
  • Servidor web: los cambios se networkingucen desde el server maestro al implementar el website

Entonces actualmente nosotros:

local: git push origin master local: password: ******** local: ssh admin@webserver.com webserver: password: ******** webserver: cd ~/domain.com/ webserver: git pull origin master 

Entonces mi pregunta es: ¿hay alguna forma de que desde mi computadora local pueda ingresar directamente al server web?

es decir.

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

Sí, puede presionar directamente a su server web, pero no lo recomendaría, ya que solo debería presionar a los repositorys clonados con el argumento –bare. Utilizaría el sistema git hook para que el repository principal actualice automáticamente el repository en el server web. Echa un vistazo al gancho post-actualización en:

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

Este script podría, a su vez, iniciar session en el server 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 presionar al server central y no tiene que preocuparse por el server web, siempre se actualizará una vez que se haya realizado un envío. Si puedes automatizar algo, entonces automatízalo 🙂

Incluso encontré un buen artículo para ti sobre el inicio de session a través de ssh en un script (si debes usar la contraseña, esto es trivial si se configuró una ssh-key):

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

¡Espero que esto ayude!

Tuve la misma consulta y no estoy satisfecho con la respuesta más votados actualmente aquí, terminé siguiendo git-website-howto, que describe bastante bien el process y es IMO un enfoque mucho más limpio y rápido.

TL; DR, git init --bare para crear un repository nuevo en su server web donde usted empujará sus cambios desde su máquina de desarrollo. Cuando el repo web recibe sus cambios, activa el gancho post-recepción que luego copy los files a su raíz web.

Me gusta este enfoque porque el gancho post-recepción hace el trabajo en su server para que su máquina local pueda avanzar mucho más rápido y liberarse. Esto también hace que sea muy fácil configurar el seguimiento remoto para una twig en particular. Por lo tanto, podría tener una sucursal llamada production para actualizar su server web, mientras que su maestro seguirá siendo para el desarrollo y vincular a su repository git en otro lugar.

Nota: necesitarás ejecutar git config receive.denycurrentbranch ignore en tu repo del server web para suprimir una advertencia en tu caja dev local al presionar.

Mire la porción de git urls de http://www.kernel.org/pub/software/scm/git/docs/v1.6.0.6/git-push.html

para que intentes:

 git push ssh://admin@webserver.com/~admin/domain.com/ master 

AGREGADO: Creo que parte de lo que está pidiendo es cómo tener múltiples repositorys remotos.

 git remote add webserver ssh://admin@webserver.com/~admin/domain.com/ 

que te permite ejecutar:

  git push origin master git push webserver master 

Creo que la function que está buscando se describe aquí: http://debuggable.com/posts/git-tip-auto-update-working-tree-via-post-receive-hook:49551efe-6414-4e86-aec6- 544f4834cda3

Desde local , puede agregar el server web como un control remoto, tal como lo haría con cualquier otro:

 git remote add webserver admin@webserver:/path/to/repo.git/ # push only master branch by default git config remote.webserver.push master 

Ahora cuando estés listo para empujar puedes hacer:

 git push webserver 

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

Agregar a la secuencia de commands de implementación para garantizar que no haya cambiado nada en el server:

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

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