CVSからのマイグレーション

CVSは、SVN に似た古い集中型バージョン管理システムです。

CVS と Git の比較

以下のリストは、CVS と Git の主な違いを示しています:

  • Git はディストリビューションです。一方、CVS はクライアント・サーバ型のアーキテクチャで一元管理されています。これは、作業領域がリポジトリ全体のコピーである Git の方がより柔軟なワークフローを持つことにつながります。リモートサーバーと通信する必要がないので、たとえばブランチを切り替えたりマージしたりするときのオーバーヘッドが減ります。
  • アトミックオペレーション。Git では、すべてのオペレーションはアトミックです。全体として成功するか、何も変更を加えずに失敗するかのどちらかです。CVS では、コミット(やその他のオペレーション)はアトミックではありません。リポジトリに対するオペレーションが途中で中断されると、リポジトリは一貫性のない状態になります。
  • 保存方法。CVSでの変更はファイル単位(チェンジセット)ですが、Gitではコミットされたファイルは全体(スナップショット)で保存されます。これは、Gitでは変更全体を戻したり元に戻したりするのがとても簡単であることを意味します。
  • リビジョンID。CVS では変更がファイル単位であるため、リビジョン ID はバージョン番号で表されます。たとえば、1.4 は、あるファイルが何回変更されたかを表します。Git では、プロジェクト全体(各コミット)の各バージョンは、SHA-1 で与えられた一意な名前を持っています。
  • マージ追跡。Git では、CVS のようにマージしてからコミットする(あるいはアップデートしてからコミットする)のではなく、コミットしてからマージするアプローチを採用しています。新しいコミット (新しいリビジョン) を作成する準備をしている間に、誰かが同じブランチで新しいコミットを作成し、中央リポジトリにプッシュしたとすると、CVS ではコミットする前にまず作業ディレクトリを更新し、コンフリクトを解決しなければなりません。Git ではそうはいきません。まずコミットして自分の状態をバージョン管理に保存し、それから他の開発者の変更をマージします。他の開発者にマージとコンフリクトの解決を依頼することもできます。
  • 署名付きコミット。GitはGPGによるコミットへの署名をサポートしており、セキュリティとコミットが本当に作成者のものであることを確認することができます。GitLabはGPGとインテグレーションし、署名されたコミットが正しく検証されているかどうかを表示することができます。

上記の項目の一部は、Stack Overflow の素晴らしい投稿から引用しました。より詳細な違いについては、Wikipedia のバージョン管理ソフトウェアの比較を参照ください。

マイグレーションの理由

CVS は古く、2008年以降新しいリリースがありません。Git は、より生産的なワークフローを実現する、より多くのツールを提供します (git bisect がその一つです)。Git/GitLab へのマイグレーションは、あなたにとってメリットがあります:

  • Git には大きなコミュニティがあり、始めるための膨大な数のチュートリアルがあります(Git のトピックを参照)。
  • 最新のツールとのインテグレーション。GitとGitLabにマイグレーションすることで、バージョン管理、イシュー・トラッキング、コードレビュー、CI/CDなどが組み込まれたオープンソースのエンドツーエンドのソフトウェア開発プラットフォームを手に入れることができます。
  • 多くのネットワークプロトコルをサポート。GitはSSH、HTTP/HTTPS、rsyncなどをサポートしていますが、CVSはSSHとユーザー認証のない独自の安全でないpserver プロトコルのみをサポートしています。

マイグレーション方法

マイグレーションを始めるためのリンクをいくつかご紹介します: