Suppose you have two projects, named "one" and "two", in a single CVS repository named "common". Your directory structure looks something like this:

    /home
                              |- one
                              `- two

In other words, the CVS repository is rooted at /home/cvs/common. All the source files are in /home/cvs/common/one and /home/cvs/common/two and the administrative files are in /home/cvs/common/CVSROOT. Our objective is to split this one repository into two, as follows:

    /home
                   |       `- one
                   |
                   `- two
                           `- two

In the new setup, the first CVS repository is at /home/cvs/one and the second CVS repository is at /home/cvs/two. Each has its own subdirectory for content and for administrative files.

The first step is to create the new directories and copy in the appropriate files.

    mkdir /home/cvs/one
    mv /home/cvs/common/one /home/cvs/one
    mkdir /home/cvs/one/CVSROOT
    cp /home/cvs/common/CVSROOT/* /home/cvs/one/CVSROOT
    mkdir /home/cvs/two
    mv /home/cvs/common/two /home/cvs/two
    mv /home/cvs/common/CVSROOT /home/cvs/two
    rmdir /home/cvs/common

Notice that the content files for each project were moved into their appropriate CVS repository but that the administrative files were copied into both of the new repositories. The next step is to modify the CVSROOT/history files in each of the new repositories so that they only contain information about the files in their respective repositories.

    cd /home/cvs/one/CVSROOT
    mv history history.orig
    grep 'one/' history.orig >history
    cd /home/cvs/two/CVSROOT
    mv history history.orig
    grep 'two/' history.orig >history

We're done. Now each project is in its own CVS repository. Now you can create a separate CVSTrac database for each project.