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