web-dev-qa-db-ja.com

再統合は、ソースを再統合するためにリビジョンX〜Yが以前に<URL>からマージされた場合にのみ使用できますが、そうではありません

Tortoise 1.6でSVNブランチを使用しています。定期的にトランクをブランチにマージして、最新の状態に保ちました。

今日、私はブランチを再統合すると思いました。 Tortoiseから「ブランチの再統合」を選択すると、次のエラーメッセージが表示されました。

Reintegrateは、リビジョン4709〜5019が以前にhttp://Subversion/svn/saxdev/trunk再統合ソースに。ただし、そうではありません

次に、次のような説明とともに約50のファイルをリストしました。

Error: branches/qst/kobalt/sax/businessobjects/util/HistoryParent.Java

Error: Missing ranges: /trunk/kobalt/sax/businessobjects/util/HistoryParent.Java:4709-5018

リビジョン5019はヘッドリビジョンです。リビジョン4737は、ブランチを作成したときのリビジョンでした。

リビジョン4737のログからこれを取得しました

アクション:追加されたパス:/ branches/qstパスからコピー:/ trunk

私にとって、そのエラーメッセージは、ブランチが元々トランクからのものではなかったことを示していますが、これは正しくありません。

何か案は?

121
colinjwebb

ブランチで作業していて、他の人の作業と最新の状態を保っている場合、トランクの作業コピーを作成し、次のようなメッセージが表示された場合にブランチを再統合しようとすると困惑する可能性があります:

$ svn merge --reintegrate https://server.blah/source/orb/branches/bronze_services
svn: Reintegrate can only be used if revisions 650 through 694 were previously merged from
     https://server.blah/source/orb/trunk to the reintegrate source, but this is not the
     case:
  branches/bronze_services/occl
    Missing ranges: /trunk/occl:650-693

Googleでいくつかの回避策を見てきましたが、「ハッキング」として緊張しました。それに対処するために、私はSubversionがメッセージで示唆していることだけを行うことにしました。ブランチに戻り、指定されたリビジョンを明示的にマージしました。

$ svn merge -r 650:693 https://server.blah/source/orb/trunk
$ svn commit -m 'merged revisions 650:693 from trunk'
    Sending        occl
Committed revision 695.

これを行うと、トランクの作業コピーに戻り、問題なくブランチを再統合することができました。

これが役立つことを願っています

128
Paul Whipp

[[私のソリューションは過去に私のために働いたが、それは現代のSVNクライアントで不適切な結果につながる可能性があります。後世のためにここに残しますが、代わりに受け入れられた答えを考慮してください。]]

私にとっての解決策は、svn:mergeinfo階層内の個々のファイルに何らかの形で添付されるプロパティ。

svn merge --reintegrate svn+ssh://svn/usr/local/svn/repos/all/trunk 
svn: Reintegrate can only be used if revisions 18765 through 18921 were
    previously merged from svn+ssh://svn/usr/local/svn/repos/all/trunk to the
    reintegrate source, but this is not the case:
trunk/proj/src/main/Java/com/foo/furniture.Java
Missing ranges: /trunk/proj/src/main/Java/com/foo/furniture.Java:18765-18920

Mergeinfo情報を含むファイルを見つけるには、次のようにします。

cd ~/svn/branches/2.7
svn propget -R svn:mergeinfo .

その後、mergeinfoプロパティを削除できます。

svn propdel svn:mergeinfo proj/src/main/Java/com/foo/furniture.Java ...
svn commit -m 'removed mergeinfo' proj/src/main/Java/com/foo/furniture.Java ...

これを完了した後、マージは正常に実行されました。

85
Gray

ブランチをトランクに再統合しようとすると、TortoiseSVNから次のようなエラーが表示されます。

Merge reintegrate test only failed!: "Reintegrate can only be used if some revisions were previously merged from trunk, but this is not the case"

エラーテキストをクリックして押します CTRL + A、 CTRL + C すべてのテキストをコピーします。

このPowerShellスクリプトのhere-stringにテキストを貼り付けます。

@"
Command: Reintegrate merge http://svn.cloudcorp.com/branches/myproject into C:\Users\iain\Documents\Repositories\CloudCorp\trunk  
Error: Reintegrate can only be used if revisions 18089 through 18612 were previously  
Error:  merged from http://svn.corp.skyscanner.local/svn/SkyScannerDatabase/trunk to  
Error:  the reintegrate source, but this is not the case:  
Error:    
Error:  branches/myproject/userdata/usermanagementservice  
Error:   
Error:     Missing ranges:  
Error:  /trunk/userdata/usermanagementservice:18365,18404  
Error:    
Error:  branches/myproject/userdata/auto_create_db.sql  
Error:   
Error:     Missing ranges:  
Error:  /trunk/userdata/auto_create_db.sql:18406  
Error:   
Error:    
Error:  branches/myproject/userdata/create_audit_tables_triggers_uds.sql  
Error:   
Error:     Missing ranges:  
Error:  /trunk/userdata/create_audit_tables_triggers_uds.sql:18406  
"@ -split "`n" |
? { $_ -match ('Error: +branches') } |
% { $_.Substring($_.IndexOf('userdata')) } |
% { "svn propdel svn:mergeinfo $_" }

スクリプトは、問題のmergeinfoを持つファイルの相対パスを抽出し、各ファイルを修正するコマンドのリストを出力します。

リポジトリ構造に合わせて'userdata'値を変更する必要がある場合があります。

問題のmergeinfosを削除するために必要なコマンドを出力するスクリプトを実行します。

この例では、スクリプトは次の出力を生成します。

svn propdel svn:mergeinfo userdata/usermanagementservice  
svn propdel svn:mergeinfo userdata/auto_create_db.sql  
svn propdel svn:mergeinfo userdata/create_audit_tables_triggers_uds.sql  

コマンドプロンプトで、ブランチベース(myproject)に移動し、コマンドを実行して問題のmergeinfosを削除できます。

次のような出力が表示されます。

property 'svn:mergeinfo' deleted from 'userdata\usermanagementservice'.
property 'svn:mergeinfo' deleted from 'userdata\auto_create_db.sql'.
property 'svn:mergeinfo' deleted from 'userdata\create_audit_tables_triggers_uds.sql'.

Gray's answer のように、ブランチに変更をコミットして、再度統合を試みます。今回は動作するはずです!

実際には、「2つの異なるブランチをマージ」オプションを使用してトランクとブランチを作業コピーにマージして修正しました。それからトランクにコミットしました。

素晴らしい

11
colinjwebb

亀SVNで私のために働いた何か:ブランチからすべてのリビジョンをマージする代わりに、特定の範囲を選択し、ブランチからすべてのリビジョンを手動で選択します。

5

SVNがあなたに言っているようにしてください。

  1. SVNが通知しているReversionのブランチをマージします
  2. ブランチからトランクに再統合する
3
Farshid Eilami

同様のケースでの私の経験については、私の答え here も参照してください。これが問題の原因であるかどうかはわかりませんが、2つの変更が互いにキャンセルされると、Subversion 1.8にmergeinfoの問題があるように見えます。

1
dewtell

ブランチの部分的なチェックアウトを使用した後にこのエラーが発生しました。ブランチをトランクに合わせて最新の状態に保ちましたが、ブランチのチェックアウトされていない部分のトランクリビジョンはもちろん更新されていませんでした。修正は、ブランチの完全なチェックアウトを実行してから、すべてのトランクの変更をマージすることでした。これらをブランチにコミットした後、トランクにブランチを正常にマージできました。

0
John W

私はこの問題に遭遇しました。ブランチにSVNログを作成して、トランクをブランチにマージしたかどうかを確認しました。

すべての改訂に注意しました。

次に、リビジョンを手動で指定して、ブランチをトランクにマージしました。トランクをマージしたリビジョンを除外するすべての範囲を指定しました。ブランチをマージすることに成功しました。

Mergeinfoで元に戻す必要がありましたが、コードをマージしました。

すぐにブランチを削除しました。

0
David