32

Subversion1.5リポジトリのトランクに開発ブランチを再統合しようとしています。この操作の前に、トランクから開発ブランチへのすべての変更をマージしました。ブランチからの変更を再統合しようとすると、次のエラーメッセージが表示されます。

Command: Reintegrate merge https://dev/svn/branches/devel into C:\trunk  
Error: Reintegrate can only be used if revisions 280 through 325 were previously   
Error: merged from https://dev/svn/trunk to the reintegrate   
Error: source, but this is not the case:  
Error:   branches/devel/images/test  
Error:     Missing ranges: /trunk/images/test:280-324  
...

その後、メッセージは私のプロジェクトのいくつかのフォルダについて不平を言い続けます。しかし、トランクから開発ブランチへの変更を再度マージしようとすると、TortoiseSVNは、マージするものがないことを通知します(以前にすべての変更をマージしたため)。

Command: Merging revisions 1-HEAD of https://dev/svn/trunk into C:\devel, respecting ancestry  
Completed: C:\devel  

私はここからの指示に従おうとしています:http ://svnbook.red-bean.com/en/1.5/svn.branchmerge.basicmerging.html 、しかしそのような問題を解決することについては何もありません。

何か案は?おそらく、トランクを削除してから、ブランチのコピーを作成する必要がありますか?しかし、それが安全かどうかはよくわかりません。

も参照してください

--reintegrateを使用したsvnmergeは範囲の欠落について文句を言いますが、mergeinfoは正しいようです

4

6 に答える 6

33

この問題に数週間苦労しましたが、最終的に解決しました。

私たちの場合、毎日すべてのトランク リビジョンとマージされたブランチで作業しました。再統合 (トランクへのマージ) を試みたときに、このエラーが発生しました。不足している範囲をブランチにマージしようとすると、マージするものが何もないというメッセージが表示されました。いくつかの無関係なブランチで、異なるファイルとフォルダーで発生しました。

解決策は、不足している範囲をブランチのファイルまたはフォルダーの svn:mergeinfo プロパティに追加することでした。

受け取ったメッセージの「Missing range: path:revision_range」行ごとに:

  • マージされたブランチで言及されているファイル/フォルダーの svn:mergeinfo プロパティを編集します
  • プロパティ値の末尾に次の文字列を追加します (例: /trunk/images/test:280-324)。
  • SVN プロパティを保存する

すべての変更をコミットして再統合する

于 2014-08-24T11:03:32.783 に答える
29

最初にリビジョン r280 から r324 をトランクからブランチにマージする必要があります。

すでに r325 をブランチにマージしているようですが、 --reintegrate は、マージされた最新のリビジョンまでのすべてのリビジョンを取得する必要があります。隙間があってはなりません。ここで少し診断します。

           +----------------------> /branches/devel
          /                    /   \<--merge not working!
 --------/-------+--+---+-----+---------> trunk
         |       \  |  /      |
        280       \ V /      325
                    V
                  missing sync merges from trunk to branch

これがブランチ構造だと思うので、トランクからブランチへのすべての変更を同期する必要があります。r325 のみをマージしたので、r280-r324 をマージするだけです。これを行った後、 --reintegrate を使用しても問題ありません。

于 2010-03-19T02:22:13.723 に答える
17

私はこの問題を抱えていましたが、最終的には、ブランチのフォルダーに対する誤った SVN プロパティが原因でした。

解決策は簡単でした-たとえば、欠落していると報告された特定のリビジョン番号を使用して、トランクからブランチにマージしました

ここに画像の説明を入力

そして、マージのみを記録するように指定します。

ここに画像の説明を入力

このアクションにより、ブランチがトランクと正しく一致し、その後のブランチのトランクへの再統合は、範囲が見つからないというエラー メッセージなしで正常に機能しました。

この手法により、任意のファイル/フォルダーに対して svn:mergeinfo プロパティを手動で編集する必要がなくなりました。

于 2016-12-20T09:24:56.943 に答える
4

-r オプションを使用して svn merge コマンドを開始すると、これらの問題が発生しなくなり、それなしでマージするまで --reintegrate を実行しようとしませんでした。私はsvn 1.6.1を使用しています。


1. ブランチからトランク、またはトランクからブランチにマージする場合、次のように -r オプションを使用します。

 cd branchWorkArea/topDir
 svn merge -r<branchPoint>:HEAD [otheroptions] svn://svn/project/trunk/topDir
  1. 競合を解決してコードをテストしたら、マージをブランチにコミットし、同じ基本オプション (特に -rBranchPoint:HEAD) を使用してブランチをトランクにマージします。

  2. トランクのテストとコミットが完了したら、 --reintegrate オプションを使用してブランチを閉じます。-rbranchPoint:HEAD オプションも必ず使用してください。

他のオプションについては、常に使用します

--depth infinity (デフォルトは 1.6.2 では無限大ですが、それ以前ではありません)
-x -b -x -w --ignore-eol-style

運が良かっただけかもしれませんが、物事は確実にうまくいっているようです。

ブランチの分岐点を見つけるには、svn log --stop-on-copy を実行してから、最後のリビジョンまでを調べます。これは、ブランチを作成した svn コピーになります。

Linux でこれを行うには、次のようにします。

svn ログ --stop-on-copy svn://svn/project/trunk/topDir |
grep '^r' | テール -1 | sed -e 's/^r//1'-e 's/ .*//g'

これにより、分岐点のリビジョン番号が出力されます。

幸運を

于 2010-09-28T13:40:36.193 に答える
-1

この問題が発生したばかりで、まず、ブランチをトランクと同期して、ブランチがトランクから最新の更新を取得できるようにすることでした。この後、ブランチをトランクに再統合しようとしましたが、うまくいきました。

于 2013-04-16T14:25:40.403 に答える