web-dev-qa-db-fra.com

SVN - Erreur de fusion de réintégration: "doit être lié aux ancêtres"

Utiliser TortoiseSVN - lorsque j'utilise Test Merge, j'obtiens le message d'erreur " http: // mysvnserver/svn/main/branches/ProjectA doit être lié de manière ancestrale à http: // mysvnserver/svn/main/trunk/ProjectB "

Que puis-je faire pour résoudre ce problème?

60
Seibar

Je viens de traverser un problème similaire, je voulais ajouter le problème et la solution que je trouvais. La branche a été faite à partir d'un sous-dossier de tronc et non de l'arbre entier. Ainsi, lorsque j'ai essayé de me réintégrer, je ne faisais pas correspondre les hiérarchies. En restructurant simplement l'intégration pour qu'elle soit dans le sous-dossier approprié de mon coffre, WD a permis au processus de continuer.

Ajouter dans l'espoir que cela pourrait aider quelqu'un qui répond à ce Q/A. :)

68
davebytes

Laisse-moi deviner: les projets ne sont pas liés? Recherchez l’histoire, si l’un d’eux était jamais ramifié ou pas.

Solution immédiate: fusionnez à la main ou essayez en ligne de commande avec "svn merge --ignore-ascestry"

17
Leonidas

Comme davebytes mentionné, ce problème peut se produire lorsque vous branchez trunk\X dans branches\Y, puis déplacez X dans un nouveau dossier Z, c.-à-d. trunk\X\Z

Si vous essayez simplement de fusionner une modification sur branches\Y dans trunk\X, vous aurez beaucoup de conflits; si vous essayez simplement de fusionner branches\Y dans trunk\X\Z, vous obtiendrez l'erreur «liée aux ancêtres».

Mais, le manuel SVN décrit le problème sous-jacent : svn merge devrait en réalité s'appeler svn diff-and-apply. Ce que vous devriez plutôt essayer de décrire dans ce scénario, c’est que vous essayez de résumer les modifications apportées de r100 à r200 de branches\Y et d’appliquer ces modifications à trunk\X\Z\.

Dans TortoiseSVN, il s’agit du scénario fusionner deux scénarios d’arbre avec votre copie de travail locale de trunk\X\Z, avec r100 de branches\Y défini sur "de" et r200 de branches\Y défini sur "à".

8
jevon

Nous avons rencontré ce problème pour les raisons suivantes:

Création d'un dossier avec le navigateur de référentiel de TortoiseSVN et l'utiliser comme branche. Nous avons ensuite essayé de fusionner le dossier créé manuellement dans le dossier de travail.

La solution est la suivante: ne créez pas de branche manuellement, mais utilisez plutôt TortoiseSVN -> Branch/tag ... pour créer une branche.

Espérons que cela sera utile.

5
Memet Olsen

Au début, j'ai essayé de fusionner dans le dossier racine et j'ai eu l'erreur, puis j'ai parcouru le dossier spécifique dans lequel je voulais fusionner, puis j'ai sélectionné le bon dossier.

Exemple,

Dans ma branche, j'ai une structure de projet:

 -Root    
    - Code
    - DB

J'ai créé une balise et changé dans le dossier DB de la balise. Maintenant, je veux apporter les modifications de la balise à la branche. Alors, je suis passé à ma branche et j'ai essayé de fusionner et j'ai obtenu l’erreur «doit être lié aux ancêtres».

Donc la solution était,

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

Maintenant, à partir de l'URL de fusion, j'ai sélectionné: 

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

Alors, j'ai cliqué sur le bouton "Fusionner".

2
Junaed

Cette erreur peut se produire si vous avez un fichier nommé exactement comme l'une des branches (ou du tronc):

# 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

Pour résoudre ce problème, ajoutez le répertoire en cours à la commande (notez le point):

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

C'est un exemple concret, cela m'a coûté quelques heures très désagréables. :(

1
alx

J'ai eu la même erreur et la raison était sur les autorisations.

Le problème vient du fait qu’un développeur tente d’intégrer les modifications d’une branche, il dispose d’un accès en lecture/écriture à une autre. Il dispose également d’un accès en lecture/écriture, mais le dernier est une branche créée à partir d’une autre branche à laquelle il vient d’être accédé.

Voici la structure avec les autorisations (r = lecture, w = écriture):

tronc (r) développer (r) QA (rw) branches featureBranch1 (rw)

Dans ce cas, develop a été créé à partir du tronc, QA de develop et featureBranch1 de develop. Le fait qu'il essaye de réintégrer FeatureBranch1 dans QA qui était une branche créée à partir de develop et qu'il n'a pas accès en écriture pour développer est dans notre cas le problème pourquoi il reçoit ce message lorsqu'il tente de réintégrer featureBranch1 dans QA. 

Immédiatement après lui avoir donné accès en écriture pour se développer, le message disparaît.

0
Samuel

J'ai eu le même problème. Je l'ai corrigé correctement cd sur lequel j'ai fusionné. Je fusionnais dans le répertoire de chemin pour projeter pas dans le répertoire de chemin pour trunk (qui est l'ancêtre réel).

0
Dragos

Je fusionnais avec un autre projet. Causé ce problème. J'ai fusionné avec la branche appropriée, puis cela a bien fonctionné. Ma mauvaise, la dyslexie

0
Zeus