Just as you experienced when you peeked closer at cvs, it's more of a nightmare than a dream, each vcs having different and rarely all that compatible semantics, so it's a rather leaky abstraction, mapping one to another. But for really basic things like committing a small change or updating some files from some upstream, that is usually enough.