cvs.md 4.21 KB
Newer Older
Mike Jang's avatar
Mike Jang committed
1 2 3 4
---
type: reference, howto
stage: Manage
group: Import
5
info: To determine the technical writer assigned to the Stage/Group associated with this page, see https://about.gitlab.com/handbook/engineering/ux/technical-writing/#assignments
Mike Jang's avatar
Mike Jang committed
6 7
---

Achilleas Pipinellis's avatar
Achilleas Pipinellis committed
8 9 10 11 12 13 14 15 16
# Migrating from CVS

[CVS](https://savannah.nongnu.org/projects/cvs) is an old centralized version
control system similar to [SVN](svn.md).

## CVS vs Git

The following list illustrates the main differences between CVS and Git:

17
- **Git is distributed.** On the other hand, CVS is centralized using a client-server
Achilleas Pipinellis's avatar
Achilleas Pipinellis committed
18 19 20 21 22 23 24 25 26
  architecture. This translates to Git having a more flexible workflow since
  your working area is a copy of the entire repository. This decreases the
  overhead when switching branches or merging for example, since you don't have
  to communicate with a remote server.
- **Atomic operations.** In Git all operations are
  [atomic](https://en.wikipedia.org/wiki/Atomic_commit), either they succeed as
  whole, or they fail without any changes. In CVS, commits (and other operations)
  are not atomic. If an operation on the repository is interrupted in the middle,
  the repository can be left in an inconsistent state.
27
- **Storage method.** Changes in CVS are per file (changeset), while in Git
28
  a committed file(s) is stored in its entirety (snapshot). That means it's
29
  very easy in Git to revert or undo a whole change.
Achilleas Pipinellis's avatar
Achilleas Pipinellis committed
30
- **Revision IDs.** The fact that in CVS changes are per files, the revision ID
31
  is depicted by version numbers, for example `1.4` reflects how many times a
Achilleas Pipinellis's avatar
Achilleas Pipinellis committed
32 33 34 35
  given file has been changed. In Git, each version of a project as a whole
  (each commit) has its unique name given by SHA-1.
- **Merge tracking.** Git uses a commit-before-merge approach rather than
  merge-before-commit (or update-then-commit) like CVS. If while you were
36
  preparing to create a new commit (new revision) somebody created a
Achilleas Pipinellis's avatar
Achilleas Pipinellis committed
37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
  new commit on the same branch and pushed to the central repository, CVS would
  force you to first update your working directory and resolve conflicts before
  allowing you to commit. This is not the case with Git. You first commit, save
  your state in version control, then you merge the other developer's changes.
  You can also ask the other developer to do the merge and resolve any conflicts
  themselves.
- **Signed commits.** Git supports signing your commits with GPG for additional
  security and verification that the commit indeed came from its original author.
  GitLab can [integrate with GPG](../repository/gpg_signed_commits/index.md)
  and show whether a signed commit is correctly verified.

_Some of the items above were taken from this great
[Stack Overflow post](https://stackoverflow.com/a/824241/974710). For a more
complete list of differences, consult the
Wikipedia article on [comparing the different version control software](https://en.wikipedia.org/wiki/Comparison_of_version_control_software)._

## Why migrate

CVS is old with no new release since 2008. Git provides more tools to work
with (`git bisect` for one) which makes for a more productive workflow.
57
Migrating to Git/GitLab will benefit you:
Achilleas Pipinellis's avatar
Achilleas Pipinellis committed
58 59

- **Shorter learning curve**, Git has a big community and a vast number of
60
  tutorials to get you started (see our [Git topic](../../../topics/git/index.md)).
Achilleas Pipinellis's avatar
Achilleas Pipinellis committed
61 62 63 64
- **Integration with modern tools**, migrating to Git and GitLab you can have
  an open source end-to-end software development platform with built-in version
  control, issue tracking, code review, CI/CD, and more.
- **Support for many network protocols**. Git supports SSH, HTTP/HTTPS and rsync
65
  among others, whereas CVS supports only SSH and its own insecure `pserver`
Achilleas Pipinellis's avatar
Achilleas Pipinellis committed
66 67 68 69 70 71
  protocol with no user authentication.

## How to migrate

Here's a few links to get you started with the migration:

Benson Muite's avatar
Benson Muite committed
72
- [Migrate using the `cvs-fast-export` tool](https://gitlab.com/esr/cvs-fast-export)
73
- [Stack Overflow post on importing the CVS repository](https://stackoverflow.com/a/11490134/974710)
74 75
- [Convert a CVS repository to Git](https://www.techrepublic.com/blog/linux-and-open-source/convert-cvs-repositories-to-git/)
- [Man page of the `git-cvsimport` tool](https://mirrors.edge.kernel.org/pub/software/scm/git/docs/git-cvsimport.html)
Benson Muite's avatar
Benson Muite committed
76
- [Migrate using `reposurgeon`](http://www.catb.org/~esr/reposurgeon/repository-editing.html#conversion)