¿Cómo debería organizar mis repositorys y sucursales de Git para crear múltiples versiones de un website?

Soy un usuario SVN con la esperanza de moverme a Git. He estado leyendo documentation y tutoriales todo el día, y todavía tengo preguntas sin responder. No sé si este flujo de trabajo tendrá sentido, pero esta es mi situación y lo que me gustaría get de mi flujo de trabajo:

  • Múltiples desarrolladores, todos desarrollando localmente en sus estaciones de trabajo
  • 3 versiones del website: Dev, Staging, Production

Aquí está mi sueño:

Un desarrollador trabaja localmente en su propia sucursal, dice "desarrollador1", testing en su máquina local y confirma sus cambios.

Otro desarrollador puede desplegar esos cambios en su propia sucursal. Merge developer1 -> developer2.

Cuando el trabajo esté listo para ser visto por el público, me gustaría poder "empujar" hacia Dev, Staging o Production.

git push origin staging 

o tal vez

 git merge developer1 staging 

No estoy seguro. Como dije, todavía soy nuevo en Git.

Aquí están mis preguntas principales:

  • ¿Mis sitios web (Dev, Staging, Production) tienen que ser repositorys? ¿Y tienen que estar "desnudos" para ser los destinatarios de los nuevos cambios?

  • ¿Quiero un repository o muchos, con varias twigs?

  • ¿Esto tiene sentido, o estoy en el path equivocado?

He leído muchos tutoriales, así que realmente espero que alguien pueda ayudarme con mi situación específica. ¡Muchas gracias!

Un artículo que recomiendo leer es Un model exitoso de ramificación de Git . Aborda las situaciones que describes más algunas más.

Recuerde acerca de la distribución. A diferencia de la subversión, las cajas de sus desarrolladores son sus propios repositorys independientes, no solo copys de trabajo. En su flujo de trabajo normal, confirmarían sus cambios en el repository propio , crearían y manipularían twigs personales, etc. El git push se puede usar para transferir confirmaciones desde sucursales locales a su repository "principal" de origen (que probablemente resida en el alojamiento web). Por lo tanto, cada desarrollador tendría un repository personal local con cualquier set de twigs que desee; el repository de origen tendría las tres twigs mencionadas. Los desarrolladores de vez en cuando git pull otros trabajos del repository de origen (a alguna sucursal local) y git push su propio trabajo al repository de las sucursales de origen apropiadas.

Como sugirió @Greg, seguir el model de ramificación Successful Git by nvie es una gran idea. A partir de ahí, sugeriría leer sobre cómo usar git para sitios web e intentar implementarlo teniendo en count el model de ramificación.

En breve:

  • Sigue el model de ramificación git a una T
  • Configure su sistema para permitir que git empuje sus twigs de liberación a su server de transición de la manera sugerida por el segundo artículo
  • Configure git para impulsar su twig principal a su server de producción siguiendo la misma configuration del server de transferencia