私の会社は無意識のうちに cvs から subversion に切り替えましたが、今では皆 cvs が戻ってくることを望んでいます。履歴と変更を cvs から svn に移行するツールがあることは知っていますが、その逆を行うツールはありません。これを行う方法に関する提案やアイデアはありますか?
13 に答える
私はもともとこれを他の人の回答へのコメントとして追加しましたが、それがある種の回答であることに気付きました。私は以前、ある SCM システムから別の SCM システムに変換する既存の方法がなかった場合に、この種の移行を行ったことがあります。
SVN リポジトリからコミットのリストを取得し、それらを一度に 1 つずつ反復処理して、新しく作成された CVS リポジトリにマージするスクリプトを作成するのは、ロケット科学ではありません。すべてのブランチとタグを正確に正確に取得するには、もう少し手間がかかるかもしれませんが、いくつかのブランチのリビジョン履歴を保存したいだけなら、かなり簡単です。
また、CVS に切り替えても実際には何も得られないという意見もありますが、そうしたい場合は、おそらく独自のスクリプトを作成することになります。「svn export」コマンドは間違いなくこの試みに役立ちます。
では、あなたの会社が非常に嫌いで、CVSの方が優れているSVNとは何ですか?SVNの設計者は、SVNエクスペリエンスをCVSとかなり似たものにするために努力しました。Tortoiseクライアントをフロントエンドとして使用する場合、エクスペリエンスは非常に似ています。SVNはアトミックコミットを提供しますが、これはPerforceの標準には達していませんが、CVSの何マイルも前にあります。
私はあなたの窮状に同情しなければなりません。開発チームとITチームをCVSからSVNにアップグレードしました。私はすべてのバージョン履歴をアップグレードするためのすべての適切なPythonスクリプトを入手し、4年近くSVNを楽しく使用しています。約3か月前、ITチームのリーダーはすべてのプロジェクトをSVNから「アップグレード」して、何を推測するかを決定しました。そうです、バージョン管理システムの重いリフター:SourceSafe!
私は間違いなくSVNに固執するか、Mercurialなどの新しい分散システムのいくつかを検討します。これらのシステムでは、中央サーバーはありません。彼らは、数十または数百のピア間でブランチおよびマージできることに依存しています。独自のトポロジを定義するため、たとえば、特定のピアをデイリービルドを実行するピアとして指定します。
需要があまりないので、別の方向に進むためのツールは存在しないと思います。
本当にやらなければならないのであれば、SVN リポジトリの履歴をたどって各リビジョンを取得し、それを CVS にコミットするスクリプトを作成するのはそれほど難しいことではありません。
ところで、あなたが SVN でどのような問題を抱えているか知りたいと心から思っています。
アップグレードではありません。こんなことしないで。
真剣に、なぜ SVN よりも CVS を好むのでしょうか? CVS は文字通り、明示的なコミュニケーションなしでチームが作業できるようにするおもちゃです。本当にひどいです。
何らかの理由で SVN 以外のものが必要な場合は、他のバージョン管理システムを調べてください。たくさんありますが、ほとんどすべてが CVS よりも優れています (実際、Visual Source Safe だけが劣っています)。
SVNは素晴らしいものではありません。SVN は CVS より優れています。チェックアウト Mercurial、GIT、Bazaar を変更する場合。
git の 1 つの側面は、これらの他のすべての回答で注意を喚起されたときに議論されていません。集中的にリポジトリにアクセスするための cvs サーバー インターフェイス。バックグラウンドで git を使用していることを誰にも知られる必要はなく、分散バックアップの問題に対処する必要もありません。
あなたの選択肢はおそらく実際には限られています。CVSの活発な開発はしばらく前に停止したので、CVS開発者からのツールはおそらくないことを覚えておいてください。そして、svnの主な目標の1つはより良いCVSになることだったので、それらの開発者はおそらく誰もが後退することを期待していなかったでしょう。
しかし、Subversionが気に入らない場合は、より最新の分散システム(git、mercurialなど)を見てみませんか?
伍長Touchyに同意します。
SVNはCVSよりも優れています。これは、SVNが設計されているためです。これはほぼ同じですが、いくつかの単純化と新機能があります。
Svnを使用すると、履歴を失うことなくファイルを移動/名前変更できます。より安全なコミット(コミットは不可分操作)とグローバルリビジョンを取得します。
とにかく、CVSに戻る前にそれをよりよく理解するようにしてください。さらに、リポジトリのチームとしてのニーズを本当に理解するようにしてください。
PS:伍長はマーキュリアルについて話していたと思います
ハンマーしかないときは、すべてが釘のように見えます。
最善の策は、svn を学ぶことです。
svn は cvs よりも優れているはずでしたが、一部の領域ではうまく機能しませんでした。他の分散ツールははるかに高速で (svn は非常に遅く、cvs でさえ高速な場合もあります)、svn よりもはるかに便利な機能を備えており、急速に開発されています (svn の新しい機能を確認するには数年かかります)。一方、svn は非常に簡単に習得でき、一元化されています (これは一部の人にとって重要です)。
svn チームは独自の議題に焦点を当てています。開発者からサポートを得るのは非常に困難です (他のオープン ソース プロジェクトと比較して)。いくつかのバグ レポートは、開発者の関心なしに長期間存在します。
svn プロジェクトの外観と開発方法にはがっかりしていますが、将来的には変更される可能性があります。
1つの点に注意してください。Bazzar、Mercurialなど(ここで何人かの人々からアドバイスを受けました)はすべて分散バージョン管理システムです。この種のツールを使用して同じソースコードで作業しているプログラマーの大きなグループを管理することはほとんど不可能であることがわかりました。私の会社ではSVNを使用しており、すばらしい仕事をしています。
CVS から来るユーザーについて私が考えることができる Subversion の唯一の 2 つの欠点は次のとおりです。
- http(s) を介したチェックアウトの速度
- モジュラリアーゼの欠如
最初の問題は svn(+ssh) を使用することで解決できます。これは、CVS も独自のプロトコルを使用するため、より互換性のある形式です。2 つ目は少しトリッキーですが、svn:externals でエミュレートできます (これには厄介な副作用があります)。
なぜこれをしたいのかわかりませんが、SVN -> GIT -> CVS から行くとうまくいくかもしれません
あなたは走るだろう..
git svn clone http://thesvnserver ourrepo
次に、次のガイドを使用して CVS にエクスポートします (これが機能するかどうかは完全にはわかりません)。
http://issaris.blogspot.com/2005/11/cvs-to-git-and-back.html
git cvsexportcommit 4a20cbafdf25a141b31a8333284a332d1a4d6072
もありますgit cvsserver