質問

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

変換する前に、トランクからの最新の変更をすべてのdevブランチにマージします。ただし、まだトランクにマージされていない変更もあります。

プロジェクトをSVNに変換すると、マージ履歴プロパティがなくなります。それでは、これらのプロパティをどのように初期化して、その後ブランチにマージしたりブランチからマージしたりできるのでしょうか?

つまり、変換後、トランクと特定のブランチの間には多くの違いがあります。次回トランクからブランチにマージするときに、マージする必要のある変更としてそれらの違いを見たくありません。しかし、ブランチからトランクにマージするときは、マージします。これは可能ですか?

更新:mhaggerの提案を受け、ブランチにはトランクからすべての変更が既にマージされていることをSVNに伝えました:

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

これは機能するので、次回トランクからブランチにマージしようとすると、新しい変更は表示されません。

しかし、ブランチからトランクに戻るマージの再統合にはまだ問題があります。最終的に、多くの「R」で置き換えられたファイルが表示されます。つまり、トランクにはファイルXがあり、ブランチにはファイルXがありますが、同じファイルとは見なされません。これにより、適切な結果が得られるように見えますが、マージの種類が面倒になります。

これは次の一連のイベントが原因で発生すると思います:

  • ブランチが作成されました(CVSで)
  • ファイルXがトランクに追加されました(CVSで)
  • Xはブランチにもマージされました(CVSでも)
  • プロジェクトはSubversionに変換されました
  • Subversionはbranch / 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)

つまり、Subversionにファイルを無視するように指示する方法はありますか」 --reintegrate mergeを実行するときの祖先?または、これらのファイルを変換するより良い方法は?

役に立ちましたか?

解決 2

OK、上記の--reintegrateの問題の回避策があると思います。誰かが興味を持っている場合に備えて。

この文書によると、トランクの最新バージョンをブランチにマージしました。--reintegrateを実行することは、これをトランクに実行することと本質的に同じです。

svn merge [trunk URL] [branch URL]

ただし、この構文では--ignore-ancestryが許可されますが、-reintegrateでは許可されません。だから私はできる:

svn merge --ignore-ancestry [trunk URL] [branch URL]

これは、すべての「R」置換ファイルなしで、--reintegrateと同じ結果を示しています。他の唯一の違いはmergeinfoプロパティのようです。これらが正しいかどうかわからないので、-reintegrateの後と同じように、後でブランチを削除することをお勧めします。

他のヒント

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

これを行う最も簡単な方法は、" svn merge --record-only ... "を使用することです( Subversionブック

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top