2012-10-24 56 views
8

をマージするものは何も謎ではありません:SVNは不足している範囲を再統合マージが、ここで

C:\code\trunk> svn merge --reintegrate http://svn.e.com/repos/branches/lih --accept postpone --dry-run 
svn: E195016: Reintegrate can only be used if revisions 11430 through 12384 were previously merged from http://svn.e.com/repos/trunk to the reintegrate source, but this is not the case: 
    branches/lih 
    Missing ranges: /trunk:11902 

しかし、私は枝のディレクトリに移動して、その範囲をマージしようとした場合、その後、マージするものは何もありません!

C:\code\branches\branch> svn merge -r 11901:11902 http://svn.e.com/repos/trunk --accept postpone --dry-run 
C:\code\branches\branch> 

even even svn merge -r 11898:11903は、マージするものがありません。

今、トランクに私のブランチを再統合することができないようです!助けてください!

P.S. lihブランチは11906年まで作られていませんでした。それはトランクから分岐したhdブランチから分岐しました(そしてhdはすでにトランクに統合されています)。

答えて

3

これは私にとってはうまくいくようでしたが、私はそれを理解していると主張することはできません。あるいは、私の問題を解決する最良の方法であることを保証することはできません。

まず、ブランチにすべての最新のコミットがあることが重要です。それで、それを同期させてください(トランクからブランチにマージしてください)。

次に、トランクディレクトリsvn merge http://svn.e.com/repos/trunk/@REV http://svn.e.com/repos/branches/lih/ . --dry-run(但し、REVを最新のリビジョン#に置き換えます)で再統合を強制することができます。

+1

これは本当に助けになりましたが、REVはトランクの最新バージョンではなく、ブランチが作成されたバージョンに設定する必要がありました。これは、ブランチで開発中にトランクで発生した変更を元に戻すマージを避けるためです。 – ceztko

4

トランクが2つのキャンセルリビジョン(トランクunid rev 20857のrev 20865)を持っていたという問題が発生しました。だから私が最初にトランクからブランチにマージしたとき、このリビジョンのペアのためにマージするものは何もありませんでしたが、問題のファイルのmergeinfoにそれらを含めませんでした。その後、ブランチからトランクにマージしようとしたとき、この2つのリビジョンが欠落していることに反対しました。

解決策(問題のファイルに対してリビジョンがキャンセルされたことを手動で確認した後)は、2つのリビジョンのそれぞれを明示的にマージすることでした(svn merge ^/trunk -c 20857、svn merge ^/trunk -c 20865)、コミットし、ブランチをトランクにマージします。 2回目はスムーズに行った。これはSubversion 1.8.0(r1490375)で行われました。

--record-onlyを使用してマージを使用して同様の問題を早期に回避することができましたが、ブランチに適切にマージされた変更をマークしますが、実際のファイルをマージする方が安全です全くキャンセルしない)。

私の変更をキャンセルするために、Subversion 1.8がmergeinfoを処理する方法のバグのようです。

関連する問題