We will all go from svn to hg, and since the development workflow is more or less washed out, the most difficult part remains here - the production and integration system.
I hope this question will be a little further than your general "how do I go from xxx to Mercurial". Please forgive the long and probably poorly written question :)
We are a web store that runs many projects (mainly PHP and Zend), so we have one huge repo with svn, with similar 100+ folders, each of which represents a project with its own tags, branches and trunk, of course . On our integration and testing server (where QA and clients look at the results of work and test materials) everything is pretty automated - Apache is configured to collect new projects that automatically create vhost for each project / body; mysql migration scripts are also right in the trunk, and developers can use them through a simple web interface. In short, our workflow is this:
- Design code, complete work, complete
- Run the update on the server via the web interface (this basically does svn on the server in a specific project, and also runs the db-migration script if necessary).
- QA changes on the server
This approach is certainly suboptimal for large projects, when we have 2+ developers working on the same code. Branching in svn only caused more headaches, well, therefore, switching to Mercurial. And here the question lies: how to organize an effective production / integration / testing server for this kind of work (where you have many projects, they say that one developer can work on 3 different projects in 1 day).
We decided to track the default branches by default, and then make all the changes to individual branches. In this case, how can we automate the queue update for each branch? If before, for one project, we almost always worked on the trunk, we needed one database, one ghost, etc. Now we are potentially talking about N-databases for each project, N-vhost configurations, etc. Then, what about CI materials (such as running phpDocumentor and / or unit tests)? Should this be done only by default? On the branches?
I wonder how other teams solve this problem, perhaps some good practices that we donβt use or donβt notice?
Additional notes:
It might be worth mentioning that we chose Kiln as a repo hosting service (mainly because we use FogBugz anyway)