# Migrating from CVS

> 原文：[https://docs.gitlab.com/ee/user/project/import/cvs.html](https://docs.gitlab.com/ee/user/project/import/cvs.html)

*   [CVS vs Git](#cvs-vs-git)
*   [Why migrate](#why-migrate)
*   [How to migrate](#how-to-migrate)

# Migrating from CVS[](#migrating-from-cvs "Permalink")

[CVS](https://savannah.nongnu.org/projects/cvs)是类似于[SVN](svn.html)的旧式集中版本控制系统.

## CVS vs Git[](#cvs-vs-git "Permalink")

以下列表说明了 CVS 和 Git 之间的主要区别：

*   **Git 已分发.** 另一方面，CVS 使用客户端-服务器体系结构进行集中管理. 这意味着 Git 具有更灵活的工作流程，因为您的工作区是整个存储库的副本. 例如，由于不必与远程服务器进行通信，因此这减少了切换分支或合并时的开销.
*   **原子操作.** 在 Git 中，所有操作都是[原子](https://en.wikipedia.org/wiki/Atomic_commit)操作，它们要么全部成功，要么失败而没有任何更改. 在 CVS 中，提交（和其他操作）不是原子的. 如果对存储库的操作在中间中断，则存储库可能处于不一致状态.
*   **存放方法.** CVS 中的更改是按文件（更改集）进行的，而在 Git 中，已提交的文件将全部存储（快照）. 这意味着在 Git 中还原或撤消整个更改非常容易.
*   **修订版 ID.** 在 CVS 中，更改是针对每个文件的，修订 ID 由版本号表示，例如`1.4`反映了给定文件已更改了多少次. 在 Git 中，整个项目的每个版本（每次提交）的唯一名称都由 SHA-1 给出.
*   **合并跟踪.** Git 使用一种先合并后提交的方法，而不是像 CVS 那样先合并后提交（或先更新再提交）. 如果在准备创建新提交（新修订版）时有人在同一个分支上创建了一个新提交并推送到中央存储库，则 CVS 将强制您首先更新工作目录并解决冲突，然后再允许您提交. Git 并非如此. 您首先提交，将状态保存在版本控制中，然后合并其他开发人员的更改. 您还可以要求其他开发人员进行合并并自己解决任何冲突.
*   **签名提交.** Git 支持使用 GPG 对提交进行签名，以提高安全性并验证提交确实来自其原始作者. GitLab 可以[与 GPG 集成，](../repository/gpg_signed_commits/index.html)并显示签名提交是否得到正确验证.

*上面的一些内容摘自这个很棒的[Stack Overflow 帖子](https://stackoverflow.com/a/824241/974710) . 有关差异的更完整列表，请查阅 Wikipedia 上有关[比较不同版本控制软件的文章](https://en.wikipedia.org/wiki/Comparison_of_version_control_software) .*

## Why migrate[](#why-migrate "Permalink")

CVS 较旧，自 2008 年以来没有新版本发布.Git 提供了更多可使用的工具（ `git bisect`之一），这使工作流程更加高效. 迁移到 Git / GitLab 有：

*   **学习曲线更短** ，Git 具有庞大的社区和大量的入门指南（请参阅我们的[Git 主题](../../../topics/git/index.html) ）.
*   **与现代工具集成** ，迁移到 Git 和 GitLab，您可以拥有一个开源的端到端软件开发平台，该平台具有内置的版本控制，问题跟踪，代码审查，CI / CD 等.
*   **支持许多网络协议** . Git 支持 SSH，HTTP / HTTPS 和 rsync 等，而 CVS 仅支持 SSH 及其自身的不安全的 pserver 协议，无需用户身份验证.

## How to migrate[](#how-to-migrate "Permalink")

以下是一些链接，可帮助您开始进行迁移：

*   [Migrate using the `cvs-fast-export` tool](http://www.catb.org/~esr/reposurgeon/dvcs-migration-guide.html) ([*source code*](https://gitlab.com/esr/cvs-fast-export))
*   [Stack Overflow post on importing the CVS repo](https://stackoverflow.com/a/11490134/974710)
*   [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)