2009-03-10 7 views
1

CVSプロジェクトをSubversionに変換したいのですが、CVS2SVNを使用しています。それにはメイントランク(HEAD)があり、トランクからいくつかの一時的な開発ブランチが作成されています。cvs2svnとマージインフォメーション

変換する前に、トランクの最新の変更をすべてのdevブランチにマージします。しかし、彼らはまた、まだトランクに合併されていない変更を持っています。

プロジェクトをSVNに変換すると、マージ履歴のプロパティが1つもありません。だから私はどのようにそれらのプロパティを初期化することができますので、私はその後、ブランチとの間でマージできますか?

つまり、変換後、トランクと任意のブランチとの間にいくつかの違いがあります。次にトランクからブランチにマージするときに、その違いをマージする必要のある変更と見なしたくありません。しかし、私が枝から幹に合流するとき、私はそうします。これは可能ですか?

UPDATE:私はmhaggerの提案を取って、枝がすべての変更は、すでにトランクからマージされていたことをSVNに次のように語った。

svn co [branch URL] . 
svn merge --record-only [trunk URL] 
svn commit -m '' 

をこの作品、私はトランクからマージしようと、次回ブランチに入ると、それは新しい変化を示さない。

しかし、私はまだブランチからトランクへの--reintegrateマージに問題があります。それは、 "R" eplacedファイルがたくさんあることを示しています。つまり、トランクにはファイルXがあり、ブランチにはファイルXがありますが、それらは同じファイルと見なされません。これは合併の種類を乱雑にしますが、それは正しい結果に終わるようです。

  • 支店(CVSで)作成されたファイルXが
  • Xがマージされました(CVSでの)トランクに追加された
  • 私はこれが原因で次の一連のイベントの発生したと思います

  • プロジェクトはSubversionに変換されました
  • Subversionはブランチ/ Xがtrunk/Xからコピーされたことを知らなかった。だから だと思います。

SVNの歴史は、このようなものになりますので、

r100: create branch (copied from trunk) 
r200: add trunk/X 
r300: add branch/X (because of a CVS merge, but it's not a SVN copy) 

を、私は--reintegrateマージを行う際に、ファイル 祖先を無視するようにSubversionを伝えるための方法はありますか?またはこれらのファイルを変換するためのより良い方法は?

答えて

0

OK、私は上記の--reintegrate問題の回避策があると思います。this documentによると

、私は、ブランチにトランクの最新バージョンをマージ--reintegrateを行うことは、本質的にトランクにこれを行うことと同じですした場合:

svn merge [trunk URL] [branch URL] 

しかし、この構文ができます--ignore-ancestry --reintegrateはそうではありません。だから私はできる:

これは、すべての "R" eplacedファイルがない--reintegrateと同じ結果を示しています。他の唯一の違いは、mergeinfoプロパティのようです。私はこれらが正しいかどうか分からないので、後で--reintegrateの後ろのようにブランチを削除するのが最善でしょう。

1

cvs2svnは、分岐がどこから出現したかに関する暗黙の情報を除いて、マージメタデータを生成しません。 (CVSはそのような情報を記録しないのでできません)。変換後、CVSで行われたマージについてSubversionに明示的に伝える必要があります。

これを行う最も簡単な方法は、the Subversion bookに記載されているように、「svn merge --record-only ...」を使用することです。

関連する問題