はじめに
GitとCVSはどちらもバージョン管理システムで、Gitは主に近年のアプリ開発で利用されていて、CVSは一昔前のアプリ開発で利用されてきました。
それぞれに一長一短はありますが、今回はGitについて理解がある方向けに「CVS」とは何か?を解説します。
Gitとは?という方は以下記事を先に参照ください。
CVSとは?
Concurrent Versions Systemの略で集中型のバージョン管理システムです。
(バージョン管理システムは他にもSubversionやPerforceがありますがそれらはCVSの後継にあたります)
試しにパッケージの中をのぞいて見ると以下のように説明されています。
# apt-cache show cvs Package: cvs ... Description-en: Concurrent Versions System CVS is a version control system, which allows you to keep access to old versions of files (usually source code), keep a log of who, when, and why changes occurred, etc., like RCS or SCCS. It handles multiple developers, multiple directories, triggers to enable/log/control various operations, and can work over a wide area network. The texinfo manual provides further information on more tasks that it can perform. There are some tasks that are not covered by CVS. They can be done in conjunction with CVS but will tend to require some script-writing and software other than CVS. These tasks are bug-tracking, build management (that is, make and make-like tools), and automated testing. However, CVS makes these tasks easier.
要約すると以下3点です。
- CVSはバージョン管理システム
- RCSやSCCSに似ている
- ネットワーク上で動作
ここで登場するRCSとは個人利用を想定したバージョン管理システムで、CVSはそれを改良して複数ユーザが利用できるようになっています。
CVSの具体的な使い方がGit同様で、リモートにあるリポジトリから最新ファイルを取得することを「Checkout」、更新したファイルを反映することを「Commit」と言います。
GitとCVSの違い
違いとして、CVSではGitでいうPushがCommitに相当し、GitでいうComiitが存在しません。
ここは「GitとCVSの違い」の最も大きな点です。CVSにはリモートへの修正反映をいきなり行います。
これは各自がリポジトリ全体をローカルに保持(分散型)するGitとは異なり、CVSはリモートにあるCVSサーバで集中管理している機構に寄ります。それに伴い、GitでいうCommitがCVSではPushになります。
要はローカルでバージョン管理を行うことができず、Commitはリモートリポジトリに完成後にやっとあげていく形になります。
集中型を採用しているため分散型であるGitと比較して以下のデメリットもあります。
- ネットワークにアクセスできない状況では履歴調査や照会ができない
- 開発者同士が変更する内容の調整が必要
- リモートサーバが消滅するとデータが復元できない
もちろんCVSにはCVSにもメリットがあり、リポジトリ全体を一か所で管理するので全体のディスク容量を抑えることができます。
が、ディスクが大容量かつ安価になってきたことを考慮すると、メリットとして挙げるには少し物足りない印象を受けます。
終わりに
CVSとGitですが、どちらもバージョン管理を行うソフトではありますが、集中型であるCVSに対して分散型であるGitには大きなメリットがあり、実際Gitが主流になりつつあります。
以上、ご参考になれば幸いです。