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
私にとって、そのエラーメッセージは、ブランチが元々トランクからのものではなかったことを示していますが、これは正しくありません。
何か案は?
ブランチで作業していて、他の人の作業と最新の状態を保っている場合、トランクの作業コピーを作成し、次のようなメッセージが表示された場合にブランチを再統合しようとすると困惑する可能性があります:
$ 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.
これを行うと、トランクの作業コピーに戻り、問題なくブランチを再統合することができました。
これが役立つことを願っています
[[私のソリューションは過去に私のために働いたが、それは現代の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 ...
これを完了した後、マージは正常に実行されました。
ブランチをトランクに再統合しようとすると、TortoiseSVNから次のようなエラーが表示されます。
エラーテキストをクリックして押します 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つの異なるブランチをマージ」オプションを使用してトランクとブランチを作業コピーにマージして修正しました。それからトランクにコミットしました。
素晴らしい
SVNがあなたに言っているようにしてください。
同様のケースでの私の経験については、私の答え here も参照してください。これが問題の原因であるかどうかはわかりませんが、2つの変更が互いにキャンセルされると、Subversion 1.8にmergeinfoの問題があるように見えます。
ブランチの部分的なチェックアウトを使用した後にこのエラーが発生しました。ブランチをトランクに合わせて最新の状態に保ちましたが、ブランチのチェックアウトされていない部分のトランクリビジョンはもちろん更新されていませんでした。修正は、ブランチの完全なチェックアウトを実行してから、すべてのトランクの変更をマージすることでした。これらをブランチにコミットした後、トランクにブランチを正常にマージできました。
私はこの問題に遭遇しました。ブランチにSVNログを作成して、トランクをブランチにマージしたかどうかを確認しました。
すべての改訂に注意しました。
次に、リビジョンを手動で指定して、ブランチをトランクにマージしました。トランクをマージしたリビジョンを除外するすべての範囲を指定しました。ブランチをマージすることに成功しました。
Mergeinfoで元に戻す必要がありましたが、コードをマージしました。
すぐにブランチを削除しました。