19

テストのために 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

-- アヒル (またはビーバー) をトランクに再統合しようとすると、正常に動作します。ここで何が欠けていますか?

4

5 に答える 5

19

同じエラーが発生し、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
于 2014-09-03T08:24:12.450 に答える
1

別のブランチからマージされたブランチを再統合する際にも同様の問題がありました(それ自体が再統合されました)。このような:

-----------------------------r7------------------
  \                         /             /ERROR !svn/bc/4/repo/branches/duck' path not found
   r1----dinosaur--r5-------             /
                    \---duck------------r9

ダックを再統合することはできないようです。パスが見つからないというエラーがr4について不平を言いました-しかし、特定のリビジョン(r5-r9)をアヒルからトランクにマージできました。

于 2014-06-30T03:47:59.220 に答える
1

これは、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

于 2018-08-20T14:39:32.123 に答える
0

これを次のように解決しました。

  1. 問題のあるブランチをトランクにマージしました

  2. トランクから新しい「統合」ブランチを作成しました

  3. トランクを手順 1 の前の状態に戻し、復元をコミットしました

  4. ステップ 3 のレコードのみをブランチにマージ

  5. 新しい統合ブランチをトランクにマージしてテストしましたが、もちろんコミットしませんでした

最終結果は、機能ブランチとトランクからの変更を含む新しいブランチです (残念ながら、ログにいくつかの新しいエントリがあります)。

于 2014-10-10T13:52:07.307 に答える
-1

マージを行うときに--ignore-ancestryオプションを使用してみてください。マージ履歴が不完全である可能性があり (おそらく亀またはその事実のクライアントが原因で)、「通常の」マージを行うときにブランチで行われた何かが作業コピーに適用されようとしています。

于 2012-10-03T05:24:23.230 に答える