web-dev-qa-db-ja.com

SVN-再統合マージエラー:「先祖に関連する必要があります」

TortoiseSVNの使用-テストマージを使用すると、「 http:// mysvnserver/svn/main/branches/ProjectA は先祖に関連する必要があります http:// mysvnserver/svn/main/trunk/ProjectB "

これを解決するにはどうすればよいですか?

62
Seibar

私は同様の問題を経験したばかりで、私がヒットした問題と解決策を追加したかった。ブランチは、ツリー全体ではなく、トランクのサブフォルダーから作成されました。したがって、再統合を試みたとき、階層が一致していませんでした。統合をトランクWDの適切なサブフォルダーに再構築するだけで、プロセスを進めることができました。

これがこのQ/Aを達成した人の助けになることを期待して追加します。 :)

70
davebytes

推測させてください:プロジェクトは関連していませんか?それらの1つが分岐したかどうか、履歴を調べます。

即時解決策:手ごとにマージするか、「svn merge --ignore-ancestry」を使用してコマンドラインを試してください

17
Leonidas

davebytes 言及したように、この問題はtrunk\Xbranches\Yに分岐した後、Xを新しいフォルダーZ、つまりtrunk\X\Zに移動したときに発生する可能性があります。

branches\Yの変更をtrunk\Xにマージしようとすると、多くの競合が発生します。 branches\Ytrunk\X\Zにマージしようとすると、「先祖関連」エラーが発生します。

ただし、 SVNマニュアルには根本的な問題が記載されていますsvn mergeは実際にはsvn diff-and-applyと呼ばれるべきです。代わりにこのシナリオで説明しようとしているのは、branches\Yのr100からr200に発生した変更を要約し、trunk\X\Z\にこれらの変更を適用しようとしているということです。

TortoiseSVNでは、これは2つの異なるツリーをマージするシナリオですtrunk\X\Zのローカル作業コピーに、branches\Yのr100を "from"に設定し、r200をbranches\Yは「to」として設定されます。

8
jevon

次の理由により、この問題に遭遇しました。

TortoiseSVNのレポジトリブラウザーでフォルダーを作成し、ブランチとして使用しました。その後、手動で作成したフォルダーを作業フォルダーにマージしようとしました。

解決策は、最初にブランチを手動で作成しないで、代わりにTortoiseSVN-> Branch/tag ...オプションを使用してブランチを作成することです。

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

5
Memet Olsen

最初にルートフォルダーにマージしようとしてエラーが発生しました。次に、マージする特定のフォルダーを参照し、マージ元の適切なフォルダーを選択しました。

例、

私のブランチには、プロジェクト構造があります:

 -Root    
    - Code
    - DB

タグを作成し、タグのDBフォルダーに変更しました。ここで、タグの変更をブランチに持ち込みたいと思います。そのため、ブランチに切り替えてマージしようとすると、「先祖に関連する必要があります」というエラーが表示されました。

解決策は、

I browsed to "DB" folder in branch, right click and select Tortoise SVN->Merge-> Merge a range of revisions -> 

次に、マージ元のURLから、次を選択しました。

the "DB" folder from my tag.
Then, "test branch". Everything worked fine :D

それで、「マージ」ボタンをクリックしました。

2
Junaed

このエラーは、ブランチ(またはトランク)のいずれかとまったく同じ名前のファイルがある場合に発生する可能性があります。

# svn switch ^/trunk
Updated to revision 123.
# ls
file1
file2
v1
# svn merge --reintegrate ^/branches/v1
svn: E195016: ^/branches/v1@123 must be ancestrally related to ^/trunk/v1@123

これを解決するには、現在のディレクトリをコマンドに追加します(ドットに注意してください):

# svn merge --reintegrate ^/branches/v1 .

これは実際の例であり、非常に不快な時間を数時間費やしました。 :(

1
alx

同じエラーが発生しましたが、その理由は権限に関するものでした。

問題は、ある開発者が読み取り/書き込みアクセス権を持つ別のブランチへの変更を統合しようとするが、最後の開発者は読み取りアクセス権を持つ別のブランチから作成されたブランチであるためです。

以下は、パーミッションを持つ構造です(r =読み取り、w =書き込み):

トランク(r)開発(r)QA(rw)ブランチfeatureBranch1(rw)

この場合、developはtrunkから、QAはdeveloperから、featureBranch1はdeveloperから作成されています。彼がdevelopmentから作成されたブランチであるfeatureBranch1をQAに再統合しようとしており、彼が開発のための書き込みアクセス権を持っていないという事実は、私たちの場合、QAでfeatureBranch1を再統合しようとしたときにこのメッセージを受け取る問題です。

開発のために書面でアクセスできるようにした直後、メッセージは消えます。

0
Samuel

同じ問題がありました。マージしたCDを正しく修正して修正しました。トランク(実際の祖先)へのパスディレクトリではなく、プロジェクトにパスディレクトリをマージしていました。

0
Dragos

私は別のプロジェクトとマージしていました。この問題を引き起こしました。私は正しいブランチとマージし、それはうまくいきました。私の悪い、失読症

0
Zeus