Software Configuration Management
After an editor and a compiler, version control is the most crucial tool for software development
| Version Control (e.g., Git) | Shared Directory |
|---|---|
| Tracks history of every change | Only a snapshot at one moment |
| Shows authorship of each change | No authorship information |
| Allows reverting to earlier versions | No rollback, must unpack copies |
| Supports branching and merging | Single linear copy only |
| Enables collaboration with multiple users | Must manually share updated files |
| Detects and resolves conflicts | Silently overwrites changes |
| Stores differences efficiently (deltas) | Full copy of every file for every "version" |
| Integrates with automation | No built-in automation support |
| Provides commit messages for context | No explanation of changes |
| Ensures integrity with hashes | Integrity depends on archive tool |
| Each change can be signed/verified | Only the entire archive can be signed/verified |
| Treats development as iterative | Treats development as static |
while statement is| Command | Description |
|---|---|
sccs create <file> |
Initialize SCCS control for <file> (creates SCCS/s.<file>) |
sccs edit <file> |
Check out <file> for editing (exclusive lock) |
sccs delta <file> |
Check in the file (creating a new delta/revision in SCCS/s.<file>) |
sccs get <file> |
Retrieve a read-only copy of <file> (no lock) |
sccs diffs <file> |
Show differences between revisions |
prs SCCS/s.<file> |
Print the SCCS file history (log of changes, etc.) |
| Command | Description |
|---|---|
rcs -i <file> |
Initialize RCS control for <file> (creates RCS/<file>,v) |
co -l <file> |
Check out <file> for editing (exclusive lock) |
ci <file> |
Check in <file> (creating a new revision in RCS/<file>,v) |
co <file> |
Retrieve a read-only copy of <file> (no lock) |
rcsdiff [options] <file> |
Show differences between revisions of <file> |
rlog <file> |
Print information about the RCS file history (log of changes, etc) |
| Command | Description |
|---|---|
cvs init |
Initialize a CVS repository in the current directory |
cvs checkout <module> |
Check out <module> into a working directory |
cvs update |
Update local files with changes from the CVS repository |
cvs commit |
Commit local changes to the repository |
cvs diff |
Show differences between working copy and repository |
cvs log |
Print log messages for files |
| Command | Description |
|---|---|
svnadmin create <repo_path> |
Create an empty Subversion repository at <repo_path> |
svn checkout <repo_url> |
Check out a working copy from <repo_url> |
svn update |
Update working copy to the latest revision from the repository |
svn commit -m "message" |
Commit changes from the working copy to the repository |
svn diff |
Show differences between the working copy and the repository |
svn log |
Print log messages for files or directories |
| Command | Description |
|---|---|
git init |
Initialize a new Git repository in the current directory |
git clone <repo_url> |
Clone a repository from <repo_url> into a new directory |
git pull |
Retrieve and merge changes from the remote repository into the local one |
git add <file> |
Stage <file> for the next commit |
git commit -m "message" |
Commit staged changes with the message "message" |
git push |
Send local commits to the remote repository |
git diff |
Show differences between the working copy and the repository |
git log |
Print the log of commits, including messages |
| SCCS | RCS | CVS | SVN | Git |
|---|---|---|---|---|
sccs create <file> |
rcs -i <file> |
cvs init |
svnadmin create <repo_path> |
git init |
sccs edit <file> |
co -l <file> |
cvs checkout <module> |
svn checkout <repo_url> |
git clone <repo_url> |
sccs delta <file> |
ci <file> |
cvs commit |
svn commit -m "<msg>" |
git commit -m "<msg>" |
sccs get <file> |
co <file> |
cvs update |
svn update |
git pull |
sccs diffs <file> |
rcsdiff <file> |
cvs diff |
svn diff |
git diff |
prs SCCS/s.<file> |
rlog <file> |
cvs log |
svn log |
git log |











git