どの CVS タグがどのファイルとパスをカバーしているかを確認するにはどうすればよいですか?
-
09-06-2019 - |
質問
従来の CVS リポジトリがあり、これには多数のディレクトリ、サブディレクトリ、パスが含まれています。また、すべてのパスとファイル (通常はサブセット) を必ずしもカバーしているわけではない、多数のブランチとタグもあります。どのブランチ/タグがどのファイルとパスをカバーしているかを確認するにはどうすればよいですか?
CVS ログには、ファイルごとのタグのリストがすでに提供されています。このタスクでは、これをタグごとのファイルに転置する必要があります。現在の WinCVS (CVSNT) 実装ではそのような機能は見つかりませんでした。十分な空のサイクルがあれば、それを実行する Perl スクリプトを書くことができます。アルゴリズムは複雑ではありませんが、実行する必要があります。
そういった情報が必要でこの問題を解決した人もいると思います。したがって、このためのすぐに利用できる(オープンソース/無料)ツールが必要だと思います。
解決
特定のファイルにどのタグが適用されるかを判断するには、次のコマンドを使用します。
cvs log <filename>
これにより、ファイルのすべてのバージョンと、そのバージョンに適用されたタグが出力されます。
単一のタグにどのファイルが含まれているかを判断するには、そのタグを使用してチェックアウトし、どのファイルが返されるかを確認することしか考えられません。そのためのコマンドは次のいずれかです。
cvs update -r <tagname>
cvs co <modulename> -r <tagname>
cvs export <modulename> -r <tagname>
他のヒント
ファイルのタグをリストするには、次のようにすることもできます。
cvs status -v <file>
上記で引用した方法は私にはうまくいきませんでした
cvs -q rdiff -s -D 2000-01-01 -r yourTagName
しかし、たくさんいじった後、私はそれに気づきました
cvs -q rdiff -s -D 2000-01-01 -r yourTagName モジュール名
作品
実際にチェックアウトを行う必要はありません。-n オプションを使用すると、これをシミュレートするだけで済みます。
cvs -n co -rTagName ModuleName
これにより、モジュール ModuleName 内の TagName でタグ付けされたすべてのファイルの名前が得られます。
次のコマンドは、そのタグ「yourTagName」内にあるファイルのリストを表示します。ファイルはすべて新規としてマークされており、リビジョン情報は「yourTagName」にあります。
このコマンドは、2000-01-01 とタグの差分を実行します。それより前の別の日付を自由に使用してください。
cvs -q rdiff -s -D 2000-01-01 -r yourTagName
あなたを助けることができるツールを私は知りませんが、もしあなたが独自のツールを書いているのなら、私はあなたを頭を悩ませることなく救うことができます。CVS 内のディレクトリはタグ取得できません。その中にあるファイルのみがタグを持っています (そして、これが、特定のタグのディレクトリをチェックアウトするときにチェックアウトされる内容を決定します)。