So, last year we decided to migrate from SVN to Git. After some discussions, we decided to use GitHub. I advised and kind of pushed a lot of things, based on my experience and failures (I started using Git since 2007/2008). One of the important things to use Git properly, in an environment that involves more than two teams and each team has more than three members, is branching strategy.
How could we, the user and integrator, to be always in sync. How could we avoid the bad experience like when we’re using SVN? How could we avoid those huge merge between branches? How could we avoid dead and unusable code (or even untested and utracked and unknown code) to go to production?
I used to follow this model, I found it very straight-forward to adopt.