1

私たちのチームは、cvs2svn 経由で svn に変換した cvs リポジトリを持っていました。私たちのリポジトリにはメイン ブランチ ( を呼び出しましょうmain) があり、実質的にトランクとして機能します (技術的にはトランクからはるか昔に分岐していましたが)。

cvs2svn 変換後、 に分岐しmainましたbranch

に小さな変更を加えてbranchから、 にマージしようとしbranchましたmain:

[~/main] svn merge https:.../branch

branchこれにより、分割が発生してから への差分が計算され、その差分が に適用されmainます。しかし、それは数年前にさかのぼり、無数の紛争につながります.

これを修正する方法についてのアイデアはありますか? Google を検索しましたが、何も見つかりません。

svn merge を呼び出して、正確なリビジョン番号を渡すことができることを知っています。より良い代替手段を探しています。

4

1 に答える 1

0

メインに同期するコミットの範囲がわかるように、マージポイントが何であるかをsvnmergeに伝える必要があります。範囲を指定しなかったため、デフォルトではHEADリビジョンまでのコミットの範囲になります。これにより、リビジョンが多すぎます。

これにより、同期元の以前のコミットリビジョンが取得されます。

svn log --xml --stop-on-copy https://.../branch | grep 'revision=' | head -n 1 | sed 's/.*revision="\([0-9][0-9]*\)".*/\1/g'

基本的に、これはブランチの最初のコピーリビジョンを取得します(これを「REV」と呼びます)。次に、それを「メイン」コピーのHEADリビジョン(メインディレクトリ内)にマージします。

cd main
svn merge https://.../branch:REV https://.../branch:HEAD .

これにより、「ブランチ」コピーの「REV」から「HEAD」までのすべての変更が「メイン」コピーに適用されます。これは、ブランチからメインへの繰り返しのマージでも正常に機能するはずです。

乾杯!

于 2010-02-02T00:51:42.977 に答える