cvs2svnは、単一の分岐と頭が含まれていますか?
-
19-09-2019 - |
質問
私は自分のリポジトリを変換するcvs2svnを使用しています。私は1つのリポジトリでの成功でそれをやった、と今私の新しい問題は、第二のリポジトリです。
私の新しい変換では、私はHEADと1つのブランチを変換したいです。唯一持っているcvs2svn枝のための機能を「除外」ではなく、「含めます」。私は多くの多くの支店を持ち、それらの一つ一つを除く多くの仕事を取る....
唯一のトランク(HEAD)と1つの分岐のみを変換する方法はありますか?
おかげで、 オデッド
解決
あなたは1つのブランチのみの無タグを保持したい場合は、の、これは簡単です。シンボルに一致する最初のルールは、他のすべてを除外する使用するので、あなたが含まれるようにしたいブランチを指定されます:
cvs2svn --force-branch=mybranch --exclude='.*' ...
あなたは枝だけでなく、できるだけ多くのタグだけでなく、を含める場合は、、それは少しトリッキーです。だけでなく、あなたは、必ずしもすべてのタグの名前を知らないが、あなたはまた、除外の枝に依存しているタグを含めることはできません。この場合、それは--write-シンボル情報と--symbol-ヒントオプションを操作するのが最も簡単です。
cvs2svn --write-symbol-info=symbol-info.out --passes=1:3 ...
これは、すべてのCVSのシンボルに関する情報を含む「シンボルinfo.out」というファイルを作成します。お使いのエディタでは、このファイルを開く除外したい枝に対応する行をすべて検索し、単語「除外」にこれらの行の3番目の列を変更します。あなたが含めたいブランチの行の第3列は、単語「ブランチ」が含まれ、その4番目の列は、あなたはそれが終わるたいパスであることを確認します。
これでパス3で始まり、そしてシンボルがファイルをヒントとして編集記号-infoファイルを使用して、cvs2svn再び実行します:
cvs2svn --symbol-hints=symbol-info.out --passes=3 ...
あなたのようなエラーの多くを得るだろう
ERROR: ExcludedSymbol('FOO_BRANCH') cannot be excluded because the following symbols depend on it:
BAR_TAG
BAZ_TAG
これでエディタに戻って、もう一度PASS3を実行してみてください、あまりにも除外される(例ではBAR_TAGとBAZ_TAG)記載されているタグを変更します。この手順を数回繰り返すことが必要になることがありますが、PASS3は非常に迅速に実行されるため、それが面倒ではありません。
あなたは、エラーなしで完全な変換の残りの部分を実行するためにPASS3得ているときます:
cvs2svn --symbol-hints=symbol-info.out --passes=4: ...
他のヒント
1つの問題は、cvs2svnだけでなく、分岐又はないが、(同時に)記号は分岐またはそもそもタグであるか否かを含めるかどうかを決定する必要があります。あなたはその1つの支店、そしてまた、いくつかのタグを含めたいのであれば、それだけで「そのブランチのみが含まれる」と言っよりも困難だ - 。すべてのタグを殺すそう
IOW、cvs2svnは本当にをサポートしていません。あなたは、そのソースコードを編集することで回避することができます。 cvs2svn_lib.symbol_strategy.BranchIfCommitsにおいて、
にはブランチを返す場合(シンボル)を変更 if symbol.name == 'my_branch':
return Branch(symbol)
else:
return ExcludedSymbol(symbol)
IIUC、BranchIfCommitsがデフォルトで使用する必要があります。
個人的に、私は別の戦略を使用することになります:
1. convert the repository once, with all branches.
2. do a "svn ls" on branches, and redirect that into a file.
3. edit the file to construct an exclude regex out of it, of the form `b1|b2|...|bn`
私は呼んでいないだろうと多くの作業...