最近、ソース ツリー内でソース ファイルを移動しています。たとえば、一連のファイルを共通のアセンブリに配置します。私はこれを CVS からファイルを削除してから、新しい場所に再度追加してきました。問題は、ファイルのリビジョン番号が 1.1 にリセットされることです。番号をリセットせずに物を移動する簡単な方法はありますか?
おそらく、私はリポジトリへのアクセス権を持っていないので、それを必要とするものは私には役に立たないが、他の人には役立つかもしれないと述べたはずです。
最近、ソース ツリー内でソース ファイルを移動しています。たとえば、一連のファイルを共通のアセンブリに配置します。私はこれを CVS からファイルを削除してから、新しい場所に再度追加してきました。問題は、ファイルのリビジョン番号が 1.1 にリセットされることです。番号をリセットせずに物を移動する簡単な方法はありますか?
おそらく、私はリポジトリへのアクセス権を持っていないので、それを必要とするものは私には役に立たないが、他の人には役立つかもしれないと述べたはずです。
この効果を得るために一般的に受け入れられている方法は、次の手順を実行することです。これの専門用語はレポコピーです。
この手順により、ファイル履歴が新しい場所に維持され、リポジトリの後方連続性が損なわれることもありません。時間をさかのぼると、ファイルは元の場所に正しく表示されます。同じ手順を使用して、ファイルの名前を変更することもできます。
クライアントのみのコマンドでファイルを移動する方法はありません。サーバーのファイル システムにアクセスする必要があり、リポジトリ内の「,v」ファイルを新しい場所に移動できます。CVS はすべてのリビジョンとそのコメントをその 1 つのファイルに記録するため、これによりすべての履歴が保持されます。
ファイルが削除されると、ファイルは「屋根裏」サブフォルダー (クライアントからは見えない) に移動されることに注意してください。これは、削除されたファイルを復元する方法です。
一般に、このアプローチには差し迫った問題はありませんが、以前のディレクトリ構造に依存している可能性のある製品の以前のバージョンをチェックアウトすることにした場合の結果を考慮する必要があります。
これは、Subversion のような他のリビジョン管理システムが決定的な利点を持つところです。
オンラインの CVS マニュアルには、これを行う方法に関する詳細が記載されています。
ファイルを移動する通常の方法は、cvs rename コマンドを発行することです。
$ cvs rename old new
$ cvs commit -m "Renamed old to new"これは、ファイルを移動する最も簡単な方法です。エラーが発生しにくく、実行履歴が保持されます。CVSNT クライアントは、古いバージョンのリポジトリをチェックアウトすることで元の名前を取得できます。
この機能は、CVSNT サーバー 2.0.55 以降でのみサポートされています。
最も簡単な方法は、レポがある cvs サーバーにアクセスし、フォルダー/ファイルを mv で移動することです (* nix マシンを想定)。そうすれば、ファイルの履歴が保持されます。
これは CVS の既知の欠陥の 1 つではありませんか? ファイルを移動するメカニズムが組み込まれていませんか? しかし、私はそれを使用してから長い時間が経過しているので、おそらく解決策があるかもしれません.
Subversion ではファイルを移動できますが、それも追跡されるため、新しいファイルは最新のリビジョン番号を取得します。
移動時に -v オプションを使用する必要があるバージョン履歴を保持しているようです。以下を参照してください
CVS によるファイルの名前変更は面倒です。リポジトリの観点からは、ファイルを削除したり、新しいファイルを追加したりできます。したがって、通常のプロセスは
mv oldfile.c newfile.c cvs delete oldfile.c cvs add newfile.c
これは機能しますが、何年にもわたるハードな開発の間にコミット操作で書き込んだ変更情報がすべて失われます。これはおそらくあなたが望むものではありません。しかし、方法はあります。リポジトリに直接アクセスできる必要があります。まず、そこに移動し、プロジェクトがあるディレクトリを見つけて、次の手順を実行します。
cp oldfile.c,v newfile.c,v
作業ディレクトリに移動して、cvs update を実行します。newfile.c が新しいファイルとして表示されます。これで、oldfile.c を削除してコミットできます。