¿Cómo manejar un flujo de trabajo de git mezclado con SFTP y cambios remotos al mismo time?

Tengo una máquina de desarrollo y un server de testing remoto.

La máquina de desarrollo enviará los files A + B + C y ya envió los files A y C al server de testing a través de SFTP (en mi editor). A y C se han modificado desde la última confirmación, pero pueden o no haberse modificado desde la carga.

El server de testing tiene modificaciones no registradas (files A + Y) y sin seguimiento (files C + Z) que no quiero representar o confirmar.

Por lo general, hago de forma manual git checkout A y rm Y en el server de testing (deshacer todas las modificaciones de SFTP desde el último commit), y luego retiro el commit. Luego tenemos los mismos files A + B en la máquina de desarrollo.

¿Cómo podríamos hacer esto con commands en los que no es necesario especificar los files exactos para realizar el checkout / rm en el server de testing, en un escenario de la vida real en el que podría haber más files para finalizar la compra / rm antes de tirar?

Este flujo de trabajo tiene la ventaja de mantener limpio un historial de git mientras se mantiene el server de testing actualizado con los files que estoy editando.

— comienzo de la solución —

 git fetch cd `git rev-parse --show-toplevel` git diff --name-only origin/mybranch..origin/mybranch~1|cat // for each x in last output: rm x; git co x git stash git pull --rebase git stash pop 

Disculpe si sugiero una ruta diferente, pero su enfoque parece estar complicando su process más allá de la simplicidad pura que puede lograr con una estructura centralizada de git repo y un buen server privado virtual.

Mi recomendación en cuanto al flujo de implementación, es muy básico:

  • Tener un repository central.
  • Obtenga acceso ssh a su host.
  • Todos durante el desarrollo extraen desde el repository central (github o bitbucket), con una determinada twig (en live , master , lo que sea) que es para el código que se desplegará, todo lo demás es dev o sucursales de características.
  • La implementación se convierte solo en extracción. Cualquier cambio debe realizarse fuera del server o duplicado fuera del server, y luego debe extraerse. Si tiene que realizar confirmaciones de revisiones en su server en vivo o implementar el server, es entendible en algún momento, pero vuelva a enviarlas al repository central tan pronto como sea posible, ya que cuanto más se desincronice, más dolorosa será la eventual fusión o rebase. ser.
  • Lo ideal sería llamar a una secuencia de commands de implementación para extraer los últimos cambios de la twig de organización / principal / en vivo. De lo contrario, ingrese SSH en su casilla para get un pago sencillo de git fast-forward, y luego copie esos files en una location de implementación o tenga un simple script de implementación.
  • Nunca mantenga cambios en la implementación, siempre en el repository.

De nuevo, esto requiere un cambio de punto de vista, porque cambiar de implementar con SFTP a ssh no es fácil, ¡pero ya estás usando git! por lo que probablemente se beneficie de la flexibilidad y potencia añadida. Si realmente no puede get acceso ssh a su host, eso sería un síntoma de utilizar un host no desarrollador / poco potente, ¡piense en la posibilidad de una actualización!

git reset --hard deshará todas las modificaciones desde la última confirmación.

git clean limpiará todos los files no rastreados (no estoy seguro si los publica si también los necesita).

Aún así, debe decir que su flujo de trabajo es un poco raro. Usualmente probaría sus cambios en su entorno local o en un entorno de desarrollo virtualizado. Tal vez deberías seguir las recomendaciones de Kzqai y cambiar tu flujo de trabajo.