Alternative Version Control for a fragmented (deviated) project
Our company widely uses CVS as a version control system, which by and large works just fine. That said though I have now become Architect on a legacy project where the repository is in a bit of a state.

The situation is this. The project has three derivatives if you like, and there is a reasonable degree of commonality, but then in some aspects it diverges. This results in chunks of code which are common, and other chunks that have the same name, but different implementation. This has in the past, and therefore carried through, been implemented by branching the code. What this has left us with though is a highly fragmented tree, where anyone derivative of the project cannot be reliably checked out against a branch tag.

Arguably the project could be split into three projects, and three new repositories. This though is not practical for a number of reasons;

1) We don't want to lose any history or cross-referencing ability across the derivatives.

2) The high turnover of code would make this difficult to justify the cost/risk of splitting the code, and risk not implementing fixes in all derivatives.


That said though, I feel we need to explore a new way of managing our code, that better copes with commonality and diversification. ie point 2 we need to take on the chin and deal with.

I don't believe CVS is the best tool to manage my requirement, can anyone recommend or suggest an alternative.

Just to clarify the problem I have....

Large number of source files, some are common to all three derivatives, some are branched to allow deviation (the derivatives).

I don't expect a long-winded answer, just some suggestions or references would be useful

Thanks in anticipation
Alternative Version Control for a fragmented (deviated) project
===

Our company widely uses CVS as a version control system, which by and large works just fine. That said though I have now become Architect on a legacy project where the repository is in a bit of a state.

The situation is this. The project has three derivatives if you like, and there is a reasonable degree of commonality, but then in some aspects it diverges. This results in chunks of code which are common, and other chunks that have the same name, but different implementation. This has in the past, and therefore carried through, been implemented by branching the code. What this has left us with though is a highly fragmented tree, where anyone derivative of the project cannot be reliably checked out against a branch tag.

Arguably the project could be split into three projects, and three new repositories. This though is not practical for a number of reasons;

1) We don't want to lose any history or cross-referencing ability across the derivatives.

2) The high turnover of code would make this difficult to justify the cost/risk of splitting the code, and risk not implementing fixes in all derivatives.


That said though, I feel we need to explore a new way of managing our code, that better copes with commonality and diversification. ie point 2 we need to take on the chin and deal with.

I don't believe CVS is the best tool to manage my requirement, can anyone recommend or suggest an alternative.

Just to clarify the problem I have....

Large number of source files, some are common to all three derivatives, some are branched to allow deviation (the derivatives).

I don't expect a long-winded answer, just some suggestions or references would be useful

Thanks in anticipation