I developed a layer for CVS that provides directory structure versioning, symbolic links and execute permissions. Plus more: branches with merge tracking workflow for repeated merges, and a grab command that imports snapshots, identifying renamed/moved files, with symlink tracking.
That was 17 years ago.
People still using CVS in 2019 and not taking advantage of Meta-CVS are in a pretty special category.
I added the missing 1.1.98 tarball. Also, just tagged 1.2 which picks up some subsequent changes. (Last time anything was touched was 2014).
I wouldn't recommend CVS or SVN for any new deployments.
Even with Meta-CVS, CVS still sucks at the infrastructural level: the branching model and so on.
Meta-CVS has better support than Git for tracking changes in the directory structure, but that's not enough to offset the downside of being based on CVS.
That was 17 years ago.
People still using CVS in 2019 and not taking advantage of Meta-CVS are in a pretty special category.