
In CVS (Concurrent Versions System), sharing common code between two different projects can be achieved using modules, symbolic links, or branching and merging. Below are some methods to accomplish this:
Methods to Share Common Code Between Two CVS Projects
1. Using CVS Modules File (Best Practice for Common Code)
The modules
file in CVS allows you to define virtual modules that can include multiple directories or files from different locations in the repository.
How to Use Modules File:
- Edit the
CVSROOT/modules
file.cd /path/to/CVSROOT vi modules
- Add an entry to combine multiple directories under a common virtual module.
shared_lib -a project1/common_lib project2/common_lib
shared_lib
is the virtual module name.project1/common_lib
andproject2/common_lib
are the directories containing the shared code.
- Check out the new virtual module:
cvs checkout shared_lib
Advantages:
- Easy to manage shared code between projects.
- Changes to the shared module reflect in both projects.
Disadvantages:
- Complex if there are too many shared directories.
- Requires manual updates to the
modules
file.
2. Using Symbolic Links (on the Server-Side)
You can create symbolic links (symlinks) on the CVS server to share directories or files between multiple projects.
How to Create Symbolic Links:
- Go to the CVS repository directory on the server.
Example:/cvsroot/project1
and/cvsroot/project2
. - Create a symbolic link from the common directory:
ln -s /cvsroot/project1/common_lib /cvsroot/project2/common_lib
- When users check out
project2
, they will see thecommon_lib
directory linked fromproject1
.
Advantages:
- Simple to implement on Unix-based systems.
- Changes to the shared directory are automatically reflected.
Disadvantages:
- Not portable on Windows-based CVS servers.
- Symbolic links are not visible in CVS client history or commands.
3. Branching and Merging for Shared Code
You can maintain shared code on a separate branch and merge it into both projects when necessary.
How to Use Branching and Merging:
- Create a branch for the shared code:
cvs tag -b shared_branch project1/common_lib
- Merge the branch into
project1
andproject2
periodically:cvs update -j shared_branch
- Commit the merged changes:
cvs commit -m "Merged shared_branch into project1"
Advantages:
- Provides better control over when shared code is updated.
- Suitable for large projects with independent development cycles.
Disadvantages:
- Requires manual merging and conflict resolution.
- More complex workflow for teams unfamiliar with branching.
4. External Scripts for Code Synchronization
Write custom scripts to copy or sync shared code between projects at regular intervals.
Example Script (Shell):
#!/bin/bash
rsync -av /path/to/project1/common_lib /path/to/project2/common_lib
Run this script after updates to keep the shared code in sync.
Advantages:
- Simple to automate.
- Ensures both projects always have the latest shared code.
Disadvantages:
- Not integrated with CVS.
- No version history in the second project.
Which Method Should You Choose?
- Modules File: Best for combining existing repositories into a single shared module.
- Symbolic Links: Ideal for Unix-based CVS servers with simple sharing requirements.
- Branching and Merging: Best for large projects with controlled updates to shared code.
- Scripts: Useful for automation and synchronization in specific environments.
I’m a DevOps/SRE/DevSecOps/Cloud Expert passionate about sharing knowledge and experiences. I am working at Cotocus. I blog tech insights at DevOps School, travel stories at Holiday Landmark, stock market tips at Stocks Mantra, health and fitness guidance at My Medic Plus, product reviews at I reviewed , and SEO strategies at Wizbrand.
Please find my social handles as below;
Rajesh Kumar Personal Website
Rajesh Kumar at YOUTUBE
Rajesh Kumar at INSTAGRAM
Rajesh Kumar at X
Rajesh Kumar at FACEBOOK
Rajesh Kumar at LINKEDIN
Rajesh Kumar at PINTEREST
Rajesh Kumar at QUORA
Rajesh Kumar at WIZBRAND