We have a very large legacy of CVS repo (66GiB) for a decade and increasing. Now we have some subcontracting companies that need to work with some modules and branches.
We need to create several branches for them and send them to the branches. We also need to integrate our changes into our core industries from time to time.
It looks like you want to switch only to subcontractors and not to everyone else. I highly recommend you not to do this. Either convert all, or do not convert anyone. Starting a mixed system is a huge pain, especially when it comes to changing people on DVCS.
Our concern:
- we cannot give them a complete repo absolutely, basically the problem is security.
Do you have several modules in your CVS repository, but you canโt provide them with all the modules, or do you want to restrict access to a history that they can access?
DVCS works much better when modules are stored as separate repositories, rather than multiple modules in the same repository *. There are many reasons for this, but basically it is so that changes in different modules do not cause unnecessary merges.
(* Like CVCS, but usually this kind of pain creates a new module that people only do once. I suspect you would not have 66 GB if it was shared.)
So, if you are converting, you want to split the modules. This will allow you to share some modules, not others. I know that Mercurial can create a repo from the path set in the multi-module repo during conversion. I expect Git to have similar capabilities.
- we need to send them some history, not just the "HEAD" version of the code.
It almost dictates DVCS. This is a defining attribute.
- we are still doing some development, so we need to send them a set of changes from time to time.
... and therefore you must use the same VC tool as they are. Otherwise, you will spend all your time converting sets of changes between systems.
Is Git and Mercurial a good choice to migrate from CVS? Can GIT / Mercurial satisfy our needs?
Yes and Yes, but this is not a switch to a button. It requires planning, commitment and education.
EDIT: I think we really need centralized version control with a multi-site function, with the ability to create a repository off-site based on part of a central repo. And it can be easy to merge between sites.
Centralized but distributed version control system. Got ya!
Endpoint, do not confuse centralized / distributed development practices with centralized / distributed tools. It is wise to work in a centralized development model with distributed VCS.