We are using agile project management and follow sprints to do development. We are using a single repository in bitbucket.org that uses mercurial. Repository is hosting 3-4 products. There are many projects with 4 solutions for each product. There are some product specific projects and there are some shared projects.
We cannot do changes in the folder structure sine we already have a team city server that is doing automated builds which works well. But I am open if its really critical to handle it.
Our current process can be described as follows:
- during development, we use hgFlow start and finish features (develop branch)
- for releases, we start releases, make them stable, finish the releases (new release branch from develop)
- for hotfix we start hotfix (new hotfix from release branch), and finish it (merges to develop and default)
Here are some of the problems with this process:
- when we start release, there are 3 other product's code which is not ready to release, is also present in the release and when release is finished, goes to default which is unwanted.
- when we change shared projects in development, it affects open releases and we have to patch it ther
- when we change shared projects in release, it affects previously released products
there are so many other technical issues that we discovered and we immediately stopped using hgFlow, and right now doing manually folder diff in order to start/finish release and hotfixes.
Some of the options that I thought of
- Create single repository to host each product's source code except shared product
- Create single repository for each of the shared project
- Separately maintain HgFlow and Tags etc.
That is too much work, say for example, when I want to start release, I have to go to product and each affected shared project to start a new release. same is true when doing regular development, for a single feature, if I want to change product and shared project, I have to do create feature in all of the projects.
How to better handle it?
Update - 9 feb 2016 Our products are based on .net, we are using bitbucket for hosting, mercurial and source tree with HgFlow for development operations.