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: ********
- 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
- Checkout temp branch en servidor
$ git checkout -b temp
- Push cambios
$ git push server
- 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
Creo que la función 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 servidor 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
Mire la parte de git urls de http://www.kernel.org/pub/software/scm/git/docs/v1.6.0.6/git-push.html
así que intentarías:
git push ssh://[email protected]/~admin/domain.com/ master
AÑADIDO: Creo que parte de lo que está pidiendo es cómo tener múltiples repositorios remotos.
git remote add webserver ssh://[email protected]/~admin/domain.com/
que te permite ejecutar:
git push origin master
git push webserver master
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.