I am setting up our (relatively small) programming team to work with source control. Until now, there has been no control and things have been... haphazard.
The team is comprised of 6 developers, 2 of which are also the QA people. I've been doing lots of googling the subject and it's overwhelming! So far, the only decision I've made is that we'll be using mercurial.
Background: This is a web application, developed in PHP. Constant development of new features (which means equally constant fixing of bugs :-P ) We started out by outsourcing all the web development, which means that our production code is hosted by another company. So we can use Mercurial to develop and test in our internal network, but when it's ready to go live, we'll need to ftp the files over to yonder company. (silly? that's the way it is... they also do seo and other work for us, so management is not about to part with them).
Here are the requirements for the workflow:
- Multiple programmers may be developing new features together, or separately.
- At the same time, the programmer may be called away to fix a bug, then get back to whatever feature he was developing
- If a bug was fixed, we want a QA person to test, and then get it to production ASAP
- If it's a new feature, it can go to a test environment where QA will thoroughly test and then it can get shipped.
My idea for setting this up is...
- each programmer has his own repository
- there is a central dev repo
- there is a QA repo
So, a programmer wants to start work on a new feature. he creates a brach, does his work, he's happy, merges with his main branch. Now he pulls changes from dev, merges, pushes to dev.
QA person will pull from dev to the QA repo. Since many people can be pushing to dev, and we want to focus on testing one new feature at a time, MrQA can choose which changesets to apply (or whatever the terminology is). tests the feature - works! ftp to production. Then can start testing the next feature from dev.
For bugs - a programmer will make the fix in his local repository, send directly to QA, and then from QA it goes live.
But... what if we have two QA people testing in the QA repo at the same time (testing two new features)? the ftp transfer will send all files... so that means all features there need to be ready to go, and we'll need to wait for both of them to be done. Which is part of our current problem, waiting for things to be tested from other developers before my own fix can go live... which is why we wanted source control... so now I am confused!
Ok, now I need some advice. I read up on having separate branches for each revision. separate branches for each shipped version. I really don't know what to think... is the workflow described above usable? Is it overkill for our small team? Or, is it too simplified? Since I am the one selling everyone on the version control thing, I don't want to set something up that will flop after a week...
Thanks in advance for coming to the rescue!!