Preguntas técnicas básicas de Git workflow (Dev> Staging> Live)

Soy bastante nuevo en Git (y VC para el caso) y estoy luchando un poco para entender el concepto detrás del flujo de trabajo Dev> Staging> Live usando branches.

Estoy intentando aplicar parte de este flujo de trabajo, que usa twigs de desarrollo y twigs de lanzamiento en lugar de una organización fija.

Antes de intentar usar Git, tenía el "mismo" flujo de trabajo usando SVN. Pero en lugar de crear twigs para cada etapa, utilizamos repositorys separados para ella. Ahora que bash aplicar twigs, las cosas se vuelven un poco borrosas.

Puedo entender la idea detrás del flujo de trabajo, pero no puedo getlo desde un punto de vista técnico.

Los pasos que estoy siguiendo para crearlo:

Crear carpetas

user:/var/www/$ mkdir dev.example.local user:/var/www/$ mkdir staging.example.local user:/var/www/$ mkdir example.local 

Repositorios Init

 user:/var/www/example.local$ git init user:/var/www/example.local$ git remote add origin git@bitbucket.org:user/example.com.git user:/var/www/example.local$ echo "README" > README user:/var/www/example.local$ git commit -am "First" user:/var/www/example.local$ git push origin master user:/var/www/example.local$ cd ../dev.example.com user:/var/www/dev.example.local$ git clone git@bitbucket.org:user/example.com.git . user:/var/www/dev.example.local$ git checkout -b dev user:/var/www/dev.example.local$ git push origin dev user:/var/www/dev.example.local$ cd staging.example.com user:/var/www/staging.example.local$ git clone git@bitbucket.org:user/example.com.git . 

Algunos trabajos en la twig de desarrollo

 user:/var/www/dev.example.local$ echo "New" > newfile user:/var/www/dev.example.local$ git add . user:/var/www/dev.example.local$ git commit -am "Some new file" user:/var/www/dev.example.local$ git push origin dev 

Cuando las cosas estén lists para una nueva versión

 user:/var/www/staging.example.local$ git fetch user:/var/www/staging.example.local$ git checkout -b release-0.1 dev user:/var/www/staging.example.local$ git push origin release-0.1 user:/var/www/staging.example.local$ cd ../example.com user:/var/www/example.local$ git fetch user:/var/www/example.local$ git merge --no-ff origin/release-0.1 user:/var/www/example.local$ git tag -a "0.1" user:/var/www/example.local$ git push origin master user:/var/www/example.local$ cd ../dev.example.com user:/var/www/example.local$ git merge --no-ff master user:/var/www/example.local$ git push origin dev 

Estoy bastante seguro de que no estoy siguiendo los pasos correctos. Entonces, ¿cuál es la "manera correcta" de:

  • crear el desarrollador, la puesta en escena , las carpetas en vivo e iniciar el repository git en cada una de ellas?
  • pagar / fusionar nuevos lanzamientos?
  • fusionarse del lanzamiento para vivir ?
  • crear todo el entorno?

Y:

  • ¿Dónde debería ejecutar esos commands git? en mi repository local? para cada una de las etapas?

Información relevante:

  • Estoy usando BitBucket
  • Esto es para el desarrollo del website (Drupal)
  • Mi twig maestra es la etapa en vivo
  • Hay aproximadamente 3 desarrolladores trabajando al mismo time, y cada uno en un país diferente

No es necesario crear repositorys diferentes. Lo que debes aprender y lo que probablemente te encante de git es lo fácil que es trabajar con sucursales. Entonces paso 1:

  • Olvídate de todo lo que sabes de tu background SVN

Ahora que estamos listos, esta es la idea. Digamos que actualmente solo tienes master en tu bitbucket:

  • Clona el repository:

     $ git clone git@bitbucket.org:user/example.com.git $ cd example.com 
  • Crea tus twigs:

     $ git branch dev $ git branch staging 
  • Deja que otros sepan sobre estas twigs:

     $ git push origin dev $ git push origin staging 
  • ¡Empezar a trabajar!

     $ git checkout dev $ touch new_file $ git add new_file $ git commit $ git merge master # and resolve conflicts $ git checkout master $ git merge dev $ git push origin 

Nota: El ejemplo anterior es una combinación de experimento-ramificación simple, y probablemente no refleje el flujo de trabajo exacto como su tutorial.

En resumen, no tiene repositorys diferentes, sino twigs en un único repository. Entre estas twigs, puede fusionar todo lo que quiera con el flujo de trabajo que desee. Puede tener twigs adicionales que no se empujen hacia el origen, por lo que están ocultas a los demás. También debería, por supuesto, git fetch / git merge las twigs en las que desea trabajar cada tanto para asegurarse de get los últimos cambios de otros queueboradores.

Para ver un ejemplo de un flujo de trabajo de git, eche un vistazo al mío:

http://dymitruk.com/blog/2012/02/05/branch-per-feature/

Esto debería ayudarte a comenzar un process maduro.