テストのために1つのブランチにマージする必要がある2つのブランチ(トランクの子)がありますが、トランクに入れることができません。両方のブランチはtrunk @ HEADで最新です。だから私はこれから行きたい:
__________________trunk
\___duck \
\___beaver
これに:
__________________________trunk
\
\______________platypus
私は最新バージョンのトランクからブランチカモノハシを作成し、アヒルとビーバーをこの新しいトランクのコピーにマージしようとしています。
svn copy ^/trunk ^/branches/platypus;
svn switch ^/branches/platypus;
svn merge --reintegrate ^/branches/duck;
svn merge --reintegrate ^/branches/beaver;
しかし、マージ操作は失敗します
svn: '/blah/!svn/bc/12047/repo/branches/duck' path not found
アヒル(またはビーバー)をトランクに再統合しようとすると、正常に機能します。ここで何が欠けていますか?
同じエラーが発生し、SVNに決定させるのではなく、マージしたいすべてのリビジョン番号を手動で指定することで解決できました。これにより、マージを続行でき、予想どおり、マージの競合が発生しました。
TortoiseSVNを使用して手動でリビジョンを選択していましたが、SVNコマンドラインを使用すると次のようになると思います。
svn log --stop-on-copy https://svn.blah/svn/proj1/branches/xyz
次に、すべてのリビジョン番号を書き留めて、一度にすべてをマージします。例:
svn merge -c123,124,156,159 https://svn.blah/svn/proj1/branches/xyz
別のブランチからマージされたブランチを再統合する(それ自体が再統合される)という同様の問題がありました。このような:
-----------------------------r7------------------
\ / /ERROR !svn/bc/4/repo/branches/duck' path not found
r1----dinosaur--r5------- /
\---duck------------r9
アヒルを再統合することはできないようです。パスが見つかりませんというエラーがr4について不平を言いましたが、特定のリビジョン(r5-r9)をアヒルからトランクにマージすることはできました。
私はこれを次のように解決しました:
問題のあるブランチをトランクにマージしました
トランクから新しい「統合」ブランチを作成しました
ステップ1の前の状態にトランクを戻し、復帰をコミットしました
ステップ3のレコードのみをブランチにマージしました
新しい統合ブランチをトランクにマージしてテストしましたが、もちろんコミットしませんでした
最終結果は、機能ブランチとトランクからの変更を変更せずに含む新しいブランチです(ただし、残念ながら、ログにいくつかの新しいエントリがあります)。
これは、SVNがマージするリビジョンを認識していないために発生します。おそらく、マージ情報が欠落しているか破損しているためです。
ログを比較して、両方のブランチ間で共通の祖先(リビジョンXが最も高い共通のコミット)を見つけます。
svn log duck > dlog.txt
svn log beaver > blog.txt
そのリビジョンXから現在のヘッドへのすべての変更をマージします。
svn switch duck # if you are not already on it
svn merge -r X:HEAD beaver
# Merge conflicts
svn commit
注:受け入れられた回答は、--stop-on-copy
を使用して共通の祖先を見つけることを提案しています。これにより、正しいリビジョンが見つかる場合があります(たとえば、ブランチduck
とbeaver
がtrunk
から分岐した場合、共通の祖先が存在する場合は、共通の祖先が得られません。作成後のブランチのいずれかでのsvn copy
操作。これが発生したことがないことがわかっている場合は、--stop-on-copy
を使用できます。