Vesta Concepts for CVS Users
This page compares the underlying versioning concepts of Vesta and CVS.
For a comparison of commands see VestaForCvsUsers
Vesta Versions on a Package basis
CVS |
Vesta |
CVS allows checkin and checkout of directories, but each file gets its own version. |
Vesta does versioning on packages. You can put a single file in a package or several files, or subdirectories, or your entire tool. Everything in that package gets the same version number. |
Vesta's Virtual World
CVS |
Vesta |
CVS works in the regular unix filesystem, which means it behaves like 99% of all unix programs. The CVS repository consists of unix files which contain special encodings to specify versions (ie, RCS ,v files). CVS work areas are regular unix files and dirs. |
Vesta does its job by creating a virtual world for you work in. It's not the regular unix file system. All of these: 1) Checked-in version control files and dirs, 2) your checked-out work area, 3) all building (compilation, linking, etc), all happen in a virual unix world. Read more: MtvVestaVirtual. |
How versions are stored
CVS |
Vesta |
CVS stores all versions of a file in a single encoded version file. Only changed lines are stored. The file has to be processed to extract out any particular version, including the latest. |
Vesta stores each new version of a file as a separate file. In this way, it is much like backup files or emacs version files (or VMS :). Even if only one line of a file changed, 2 copies of that file are stored. As a special case, if zero lines changed (ie old and new version are identical), then behind-the-scenes vesta stores it only once, even tho it appears listed for 2 different version numbers. |
Vesta's Version Numbers Explained
CVS |
Vesta |
|
CVS has version numbers encoded in its version files. These numbers can be extracted and viewed by several cvs commands. CVS work areas have no versioning, unless you create a branch and check your work files in there. |
Vesta keeps versions in numerical subdirectories of a package. The entire subdir name consists of digits -- the version number. As such, vesta stores complete copies of changed files, not an encoding of the changes. Vesta also has automatic versioning on your work area. Each time you build, a snapshot is automatically taken. Read more: MtvVestaVerNum |
(BitKeeper allows you to make local clones of the entire repository, and then check-in to that clone, and then later, do a global "turn in" (w/ merging) to the master copy.) |
Exclusive v. Non-exclusive Check-outs
Exclusive check-outs means no other user can check-out that file, dir or package until you check it in.
Non-Exclusive check-outs means many users can check-out the same file, dir or package, and updating will merge changes together.
CVS |
Vesta |
CVS has non-exclusive check-outs only |
Vesta has both, but is streamlined for exclusive check-outs. |
Automatic Work-Area Snapshot
CVS |
Vesta |
CVS work areas are just unix dirs. You may manually check into a branch to store versions of your work area, but that is not common. |
Everytime you build in vesta, an automatic snapshot is taken of your work area. Snapshots are first-class citizens of the repository, and can be referred to just like checked-in versions. In particular, the full repeatibility guarantees extend to snapshots. Because of this situation, when sharing your code with other people, you always give them the latest snapshot in the repository, rather than pointing them to your work area. |
Immortal storage
CVS |
Vesta |
CVS keeps everything in the repository. |
Everything that gets into the vesta respository stays there forever. This is ununsual for unix users, who are used to deleting mistakes. Vesta users get over this discomfort eventually because the value of guaranteed reproducibility that immortal storage provides. Typos are unfortunate, and discussed in ReorganizingRepos. |
Everything Explicity Versioned
CVS |
Vesta |
CVS versions just what you give it. |
In vesta, everything is explicitly versioned: sources, tools, sets of env variables, parameters. To explain, let me make an analogy. A typical command a user might type is emacs mfile.txt . In vesta, that would have to be emacs.v3.2.4 mfile.txt.v1.4.6. It's more work, and a mindset you have to get used to, but once you do it becomes natural, and the benefits are guaranteed repeatibility. |
3 Types of Directories
CVS |
Vesta |
CVS has directories w/in its repositories, but not any new concepts. |
Vesta has 3 types of directories. Concisder a path /vesta/project.example.com/prog/mod/pkg/3/srcs/file.cxx. They are all immortal -- once you create them, you can never remove them (but see vrm). I'm not counting /vesta/project.example.com/ which is the vesta root and namespace of the project. prog/mod are vesta hierarchy dirs. They are un-versioned. pkg/ is a package. this is the only versionable object in vesta. Versions are stored as numerical dirs underneath pkg/. The numerical dir 3 is a specific version of pkg/. srcs/ is a regular directory versioned w/in the package named pkg. |
New file first in Repository
CVS |
Vesta |
In CVS to add a new file, you first create the file, then cvs add it to the repository. |
In Vesta first you vcreate a new package in the repository, then vcheckout it, then populate it with files |