On January 27, 2002, I released the first public version of Meta-CVS. Meta-CVS:
- is thin, light-weight version control system implemented over CVS, which stores files in a CVS repository. - uses efficient hard links to maintain a correspondence between the tree view of the file and the objects in the repository. - treats the directory structure as a document, and so renaming is just another edit which can be subject to parallel development and merging with conflict resolution. The tree is dynamically reshaped as you perform updates. - supports symbolic links, execute permissions, and user-defined properties on files. - has branches with automatic tracking of how much has been merged from one branch to another (via specially formatted tags). Changes can be easily merged from branches where the files have different names and tree structure. - supports corner cases such as one user deleting a file while another making a commit. Files can be deleted (unlinked from the file tree) but not really gone. Unlinked files can be recovered into a "lost+found" directory with a command. - supports a subtree checkout of a larger project. (All the objects are there, but only a subtree is shown). - has a snapshot-importing command which looks at file contents and automatically identifies renamed files and symbolic links, and changing execute permissions. - allows for Meta-CVS checkouts to be made in subdirectories of existing Meta-CVS sandboxes (there is no CVS/ directory in every subdirectory; only the top-level of the sandbox has a MCVS/ directory.) A special command line option allows you to "scope out" to a higher Meta-CVS sandbox to execute the command on that sandbox instead of the nested one. - has tracking for file types. For instance, newly added files can automatically be made binary because they have a certain suffix. - has an add command which can recursively add an entire tree to version control, identify any new file suffixes occuring in the tree, and let you edit their CVS keyword disposition.
