cvs2svnを使用する場合、ブランチとタグが同じ名前に解決されるようにシンボルの名前を変更するにはどうすればよいですか?
質問
(特に)次のシンボルを持つCVSリポジトリの変換に取り組んでいます:
tcm-6.1.0-branch
-ブランチ
tcm-6.1.0
-タグ
標準変換cvs2svnを使用すると、適切に識別されます。ただし、変換中にクリーンアップを行いたいと思います。具体的には、svnの「ブランチ」ディレクトリにあるため、ブランチシンボルの冗長な「ブランチ」部分を削除します。プロジェクトのsymbol_transformsに次を追加しました。
RegexpSymbolTransform(r'(.*)-branch', r'\1')
今"エラー:..."のシンボル 'tcm-6.1.0'の複数の定義 tcm-6.1.0
はブランチとタグの両方であるため、すべてのファイルに対して。この問題を引き起こすいくつかのCVSシンボルペアがあります。
ソースシンボルが異なり、宛先ディレクトリが異なるため、この操作は可能です。私が不足しているものがありますか、これは単にcvs2svnの欠点ですか?
これらのシンボルの名前を変更して、それらが別々のままになり、同じ名前のブランチとタグになるようにするにはどうすればよいですか
-
回避策がない場合は、問題のシンボルを変換ルールから除外し、後で手動で移動しますが、変換時に行うようにします。
解決
RegexpSymbolTransform
は、リポジトリファイルの解析中に低すぎるレベルで動作します。したがって、 SymbolTransform
を使用して2つのシンボルに同じ名前を付けると、それらは1つの同じシンボルとして扱われます。
変換後にブランチとタグの名前を変更することは可能ですが、これには明示的なSVNコミットが必要であり、これは永久に履歴に残るため、履歴の調査が少し複雑になります。
代わりに、ブランチを元の名前に変換する必要がありますが、その後、cvs2svnにSVNパス/branches/tcm-6.1.0に保存するように指示する必要があります。こうすることで、シンボルは目的の名前のSVNブランチの正しい場所に配置されますが、cvs2svnによって同様の名前のタグとは異なるものとして扱われます。
これは、-symbol-hints = symbol-hints.txt
コマンドラインオプションまたは SymbolHintsFileRule( 'symbol-hints.txt')
シンボルを使用して実行できます。ここで、 symbol-hints.txt
は次のような行を含むファイルです。
。 tcm-6.1.0-branch branch /branches/tcm-6.1.0。
私が考えることができるこのアプローチの唯一の欠点は、 cvs2svn
によって自動生成されるいくつかのコミットメッセージ(たとえば、ブランチの作成用)が元のブランチ名に言及することです
他のヒント
cvs2svnは、cvsとsvnの間で多くの魔法をかけます。そのため、「一致」することはできません。ブランチとタグの名前。これは、cvs2svnがどのバージョンがどのディレクトリに属しているかを知らないためです。 私のアドバイスは、 svnmucc 。 したがって、単一のコミットがあり、すべてが整っています。