Git Branching Model
¿Cómo almacena Git sus datos?
Directorio con 3 archivos:
$ git add README test.txt gretting.txt $ git commit -m 'initial commit of my project'
git commit hace un checksum de todos los directorios del proyecto y los almacena como objetos tree en el repositorio Git.
Con esto, Git crea un objeto commit que tiene los metadatos y un apuntador al objeto tree raiz del proyecto, de tal forma que este pueda recrear este snapshot cuando sea necesario.
Datos de repositorio de un commit simple
Datos de objeto Git para múltiples commits
Es un ligero apuntador movible hacia uno de estos commits.
El branch por defecto se llama master. Tras los commits, se le indica al branch master que apunte al último commit hecho. Con cada commit, este apuntador (branch master) se mueve automáticamente.
Branch pointing a través de la historia de commits
$ git branch testing
Esto crea un nuevo apuntador hacia el mismo commit donde estás (seguimos en master)
Multiples branches apuntando a un commit
Es un apuntador al branch local donde se está trabajando
HEAD apunta a master
Para moverse a un branch existente, se utiliza el comando:
HEAD apunta a testing
$ git checkout testing
HEAD se mueve para apuntar ahora al branch testing
HEAD se mueve en cada commit
$ vim test.rb
$ git commit -a -m 'made a change'
HEAD regresa a otro branch en un checkout
$ git checkout master
La historia de los branches ha cambiado
$ vim test.rb
$ git commit -a -m 'made other changes'
Es una propuesta de branching que ha mostrado ser funcional en proyectos de desarrollo.
Bitbucket
https://confluence.atlassian.com/bitbucketserver/using-branches-in-bitbucket-server-776639968.html
Existen dos ramas con tiempo de vida infinito:
Se considera origin/master como el branch principal donde está el código fuente que refleja lo que está en producción.
Se considera origin/develop como la rama que refleja un estado con los ultimos cambios de código liberable para el siguiente release. Es el Podría llamarse "branch de integración"
Sale desde:
develop
Debe hacer merge con:
develop
Convención de nombrado (Bitbucket):
feature/lo-que-sea
nunca master, develop, release-*, or hotfix-*
Sale desde:
develop
Debe hacer merge hacia:
develop y master
Convención de nombrado (Bitbucket):
release/lo-que-sea
Es una preparación para producción. Pueden corregirse aquí defectos clasificados como bugfixes(no explicado aquí) según Bitbucket
Sale desde:
master
Debe hacer merge hacia:
develop y master
Convención de nombrado (Bitbucket):
hotfix/lo-que-sea
Se utiliza para correcciones urgentes en producción sin interrumpir cambios en la rama de desarrollo.
Si bien no hay mucho de wow en el tema de Git Flow, la importancia radica en la utilidad y el orden que le da a los proyectos.
Es más un modelo mental fácil de comprender, y facilita el desarrollo y el intercambio de este entre los miembros del equipo.
Considera el avance en el desarrollo de nuevas carácterísticas y la preparación de liberaciones al ambiente de producción.