Réintégrer ne peut être utilisé que si les révisions X à Y ont été précédemment fusionnées à partir de <URL> pour réintégrer la source, mais ce n'est pas le cas

127

J'ai utilisé des branches SVN avec Tortoise 1.6. J'ai régulièrement fusionné le tronc dans la branche pour le maintenir à jour.

Aujourd'hui, j'ai pensé réintégrer la branche. J'ai choisi «Réintégrer une branche» de Tortoise et j'ai reçu le message d'erreur suivant:

La réintégration ne peut être utilisée que si les révisions 4709 à 5019 ont été précédemment fusionnées de http://subversion/svn/saxdev/trunkla source de réintégration, mais ce n'est pas le cas

Il a ensuite répertorié environ 50 fichiers avec des descriptions telles que celle-ci:

Error: branches/qst/kobalt/sax/businessobjects/util/HistoryParent.java

Error: Missing ranges: /trunk/kobalt/sax/businessobjects/util/HistoryParent.java:4709-5018

La révision 5019 est la révision principale. La révision 4737 était la révision lorsque j'ai créé une branche.

J'ai ceci du journal pour la révision 4737

Action: Ajout du chemin: / branches / qst Copie du chemin: / trunk

Pour moi, ce message d'erreur dit que la branche n'était pas à l'origine du tronc, ce qui n'est pas vrai.

Des idées?

colinjwebb
la source
1
D'accord. Je n'utilise plus vraiment Subversion, mais je vais vous croire sur parole!
colinjwebb
1
Merci mec. Je pense que la page est meilleure pour cela.
Gray

Réponses:

138

Si vous travaillez sur une branche et que vous l'avez mise à jour avec d'autres travaux, vous pourriez être perplexe lorsque vous créez une copie de travail du tronc et essayez de réintégrer votre branche si vous recevez un message comme celui-ci:

$ svn merge --reintegrate https://server.blah/source/orb/branches/bronze_services
svn: Reintegrate can only be used if revisions 650 through 694 were previously merged from
     https://server.blah/source/orb/trunk to the reintegrate source, but this is not the
     case:
  branches/bronze_services/occl
    Missing ranges: /trunk/occl:650-693

J'ai vu un certain nombre de solutions de contournement sur Google, mais elles m'ont rendu nerveux en tant que «hacks». Pour y remédier, j'ai décidé de faire exactement ce à quoi la subversion fait allusion dans le message. Je suis retourné dans ma branche et j'ai explicitement fusionné les révisions spécifiées:

$ svn merge -r 650:693 https://server.blah/source/orb/trunk
$ svn commit -m 'merged revisions 650:693 from trunk'
    Sending        occl
Committed revision 695.

Une fois que j'ai fait cela, j'ai pu revenir à la copie de travail du tronc et réintégrer la branche sans aucun problème.

J'espère que ça aide

Paul Whipp
la source
16
Agréable! "faites exactement ce que la subversion fait allusion dans le message". :)
Adam
7
Je suis d'accord, la réponse la plus populaire est tentante, mais il vaut probablement mieux la corriger correctement. Je devais aller au fichier problématique spécifique et svn mergecela depuis le coffre.
Steve Kehlet
1
Cela a très bien fonctionné pour moi. L'astuce principale était que Tortoise ne me disait pas la révision du problème. Après avoir mis à jour mon client svn en ligne de commande, j'ai pu le faire me donner un message comme vous l'avez fait, puis j'ai pu fusionner la révision du problème et revenir au coffre.
user12861
7
Cela n'a pas fonctionné pour moi car les fusions "manquantes" répertoriées avaient déjà été effectuées dans la branche (réintégrer la source).
Sam
6
Bien que cette réponse semble raisonnable, elle n'a pas fonctionné pour moi. J'ai continué à recevoir les mêmes messages d'erreur. Ce qui a aidé, c'est de supprimer les propriétés svn: mergeinfo des fichiers répertoriés, comme le suggère la réponse acceptée.
Jenny O'Reilly
85

[[Bien que ma solution ait fonctionné pour moi dans le passé, elle peut conduire à des résultats incorrects avec les clients SVN modernes. Dans notre cas, les erreurs de fusion semblaient être des sous-produits d'automatisations qui confondaient notre historique SVN et non une activité réelle. Je laisse cela ici pour la postérité, mais veuillez plutôt considérer la réponse acceptée. ]]

La solution pour moi était de supprimer tout svn:mergeinfo propriétés qui sont en quelque sorte attachées à des fichiers individuels dans la hiérarchie.

svn merge --reintegrate svn+ssh://svn/usr/local/svn/repos/all/trunk 
svn: Reintegrate can only be used if revisions 18765 through 18921 were
    previously merged from svn+ssh://svn/usr/local/svn/repos/all/trunk to the
    reintegrate source, but this is not the case:
trunk/proj/src/main/java/com/foo/furniture.java
Missing ranges: /trunk/proj/src/main/java/com/foo/furniture.java:18765-18920

Pour trouver les fichiers avec des informations de fusion, vous pouvez faire:

cd ~/svn/branches/2.7
svn propget -R svn:mergeinfo .

Ensuite, vous pouvez supprimer les propriétés mergeinfo:

svn propdel svn:mergeinfo proj/src/main/java/com/foo/furniture.java ...
svn commit -m 'removed mergeinfo' proj/src/main/java/com/foo/furniture.java ...

Après avoir terminé cela, ma fusion s'est bien déroulée.

gris
la source
2
Cela m'a vraiment aidé à résoudre mon problème, mais le mien était dû à la fusion d'une révision d'un dossier enfant plutôt que de le faire sur le dossier racine. Mon problème était - j'avais effectué la fusion mais le dossier racine n'avait pas reconnu que la fusion s'était produite, cela signifiait que je devais mettre à jour manuellement le prop mergeinfo avec les numéros de révision manquants. REMARQUE Je ne pouvais le faire que parce qu'il n'y avait pas d'autres modifications de fichiers pour la révision et entraînerait un comportement inattendu si d'autres fichiers doivent être fusionnés - vous devrez fusionner à nouveau les révisions si tel est le cas.
ExecutionOrder
5
Dans TortoiseSVN, vous pouvez faire un clic droit sur le fichier, sélectionner "TortoiseSVN" -> "Propriétés" et supprimer la propriété svn: mergeinfo.
StarCub
3
@StephenKennedy Vous rencontrez peut-être le problème de la réutilisation d'une branche qui a déjà été réintégrée. Si c'est le cas, consultez la dernière section de svnbook.red-bean.com/en/1.7/... commençant par "Une fois qu'une fusion --reintegrate est effectuée de branche en tronc, la branche n'est plus utilisable pour d'autres travaux."
AlexMA
6
+1. Vous n'avez pas besoin de supprimer tous les mergeinfos; juste ceux qui ont des plages manquantes. Voir ma réponse pour un moyen de supprimer uniquement le problème mergeinfos en filtrant la sortie d'erreur TortoiseSVN.
Iain Samuel McLean Elder
4
-1. Vous ne devriez pas supprimer les propriétés de mergeinfo à moins d'être vraiment sûr de ce que vous faites. Beaucoup de gens peuvent lire ceci, supprimer ces propriétés et introduire par inadvertance d'autres problèmes. Paul Whipp a une meilleure réponse.
Bizmarck
15

Si vous essayez de réintégrer votre branche au tronc et que vous voyez des erreurs comme celle-ci de TortoiseSVN:

Le test de réintégration de fusion a échoué seulement!: "Réintégrer ne peut être utilisé que si certaines révisions ont été précédemment fusionnées à partir du tronc, mais ce n'est pas le cas"

Cliquez sur le texte d'erreur et appuyez sur CTRL+ A, CTRL+ Cpour copier tout le texte.

Collez le texte dans la chaîne ici de ce script PowerShell:

@"
Command: Reintegrate merge http://svn.cloudcorp.com/branches/myproject into C:\Users\iain\Documents\Repositories\CloudCorp\trunk  
Error: Reintegrate can only be used if revisions 18089 through 18612 were previously  
Error:  merged from http://svn.corp.skyscanner.local/svn/SkyScannerDatabase/trunk to  
Error:  the reintegrate source, but this is not the case:  
Error:    
Error:  branches/myproject/userdata/usermanagementservice  
Error:   
Error:     Missing ranges:  
Error:  /trunk/userdata/usermanagementservice:18365,18404  
Error:    
Error:  branches/myproject/userdata/auto_create_db.sql  
Error:   
Error:     Missing ranges:  
Error:  /trunk/userdata/auto_create_db.sql:18406  
Error:   
Error:    
Error:  branches/myproject/userdata/create_audit_tables_triggers_uds.sql  
Error:   
Error:     Missing ranges:  
Error:  /trunk/userdata/create_audit_tables_triggers_uds.sql:18406  
"@ -split "`n" |
? { $_ -match ('Error: +branches') } |
% { $_.Substring($_.IndexOf('userdata')) } |
% { "svn propdel svn:mergeinfo $_" }

Le script extrait les chemins relatifs des fichiers avec le problème mergeinfo et génère une liste de commandes pour corriger chacun d'eux.

Vous devrez peut-être modifier la 'userdata'valeur en fonction de la structure de votre référentiel.

Exécutez le script pour générer les commandes dont vous avez besoin pour supprimer le problème mergeinfos.

Dans cet exemple, le script produirait cette sortie:

svn propdel svn:mergeinfo userdata/usermanagementservice  
svn propdel svn:mergeinfo userdata/auto_create_db.sql  
svn propdel svn:mergeinfo userdata/create_audit_tables_triggers_uds.sql  

À l'invite de commande, vous pouvez accéder à la base de la branche (myproject) et exécuter les commandes pour supprimer le problème mergeinfos.

Vous devriez voir une sortie comme celle-ci:

property 'svn:mergeinfo' deleted from 'userdata\usermanagementservice'.
property 'svn:mergeinfo' deleted from 'userdata\auto_create_db.sql'.
property 'svn:mergeinfo' deleted from 'userdata\create_audit_tables_triggers_uds.sql'.

Comme dans la réponse de Gray , vous devez maintenant valider les changements dans la branche et essayer de vous réintégrer à nouveau. Cette fois, ça devrait marcher!

Iain Samuel McLean aîné
la source
1
Bien avant de réintégrer, j'ai fusionné (et non réintégré) certaines modifications apportées au tronc de ma branche parce que je me suis accidentellement engagé dans ma branche alors que je voulais m'engager dans le tronc. Serait-ce la raison de ces erreurs de réintégration?
Iain Samuel McLean Elder
C'est exactement ce qui semble avoir causé ce problème dans mon cas. Merci d'avoir pris le temps d'écrire le script!
Sam
@Sam Heureux que vous ayez trouvé cela utile. Avez-vous eu besoin de remplacer l'espace littéral par un \s+pour le faire fonctionner pour vous?
Iain Samuel McLean Elder
Sorte de; c'était plus ce +qu'il fallait pour que cela fonctionne pour moi. Dans mon cas, certaines lignes avaient deux espaces et d'autres trois, il fallait donc prendre en charge des nombres variables d'espaces. Je ne sais pas pourquoi j'ai changé l'espace en un \s; ce n'était probablement pas nécessaire, alors désolé pour cette partie!
Sam
@Sam Pas de soucis, mais je vais le changer en un espace littéral pour l'instant jusqu'à ce que TortoiseSVN commence à le mélanger avec des onglets ou autre :-) J'ai laissé le +car il vous a été utile.
Iain Samuel McLean Elder
11

En fait, je l'ai corrigé en utilisant l'option "fusionner deux branches différentes" pour fusionner le tronc et la branche dans ma copie de travail. Ensuite, j'ai remis cela au coffre.

Merveilleux

colinjwebb
la source
4
Cette réponse n'explique pas vraiment ce que vous avez fait. Pas d'exemples, pas même un lien vers la section requise du manuel.
zigg
Avec le recul, non, ce n'est pas le cas. Cependant, comme c'était ma propre réponse le même jour que la question, c'était la meilleure réponse depuis quelques mois. Je suppose que cela a du sens si vous utilisez toujours Tortoise SVN 1.6. J'ai plutôt accepté la réponse de Gray comme réponse acceptée.
colinjwebb
Exemple: svn merge ^ / tags / wx ^ / tags / yz. L'erreur de réintégration est apparue pour moi lors de l'utilisation de la version 1.8 et de la fusion dans le coffre où la source de fusion avait une révision spécifique précédemment fusionnée à partir du coffre. 1.8 a semblé décider qu'une fusion de réintégration était tentée, ce qui n'était pas le cas. Une fusion à sec avec 1.6 fonctionnerait bien, mais la fusion des deux URL convient également.
Nick
1
Le scénario précis qui a échoué avec la version 1.8 consistait à copier une balise à partir de certaines révisions pour une version de correctif, à choisir un changement du tronc au backport par une fusion dans la balise corrigée, à apporter une nouvelle modification à la balise corrigée et à la fusionner. dans le coffre. Les changements entre la balise de base et la version corrigée sont ce qui doit être fusionné avec le tronc, et une fusion à 2 URL fonctionne un régal pour cela.
Nick
J'aurais dû lire cette réponse avant de passer 3 jours à essayer de comprendre ce qui se passait. Je ne comprends toujours pas pourquoi j'ai eu ce problème, mais je soupçonne que le commentaire de @Nick en est la raison - et maintenant les choses fonctionnent, je ne vais pas chercher plus loin ...
Dave Richardson
6

Quelque chose qui a fonctionné pour moi dans tortoise SVN: au lieu de fusionner toutes les révisions de la branche, choisissez une plage spécifique et sélectionnez manuellement toutes vos révisions dans la branche.

Olga Perederieieva
la source
1
Merci pour cette idée basique. De toutes les réponses, ce n'était pas seulement la moins compliquée, mais c'était la seule qui fonctionnait pour moi.
redman
3

Faites comme SVN vous le dit.

  1. Fusionnez la branche de la réversion que SVN vous dit
  2. Réintégrer de la branche au tronc
Eilami farshid
la source
2
Cela n'a pas fonctionné pour moi. Les changements existaient déjà dans la branche. Vos instructions semblent devoir fonctionner dans certains cas, mais elles semblent être basées sur une hypothèse, elles ne semblent donc pas universelles.
Sam
1

Voir aussi ma réponse ici pour mon expérience dans un cas similaire. Je ne sais pas si c'est la source de votre problème, mais il semble que Subversion 1.8 ait des problèmes avec les informations de fusion lorsque deux changements s'annulent.

rosée
la source
0

J'ai rencontré ce problème. J'ai fait un journal SVN sur ma branche pour trouver où j'avais fusionné le tronc avec ma branche.

J'ai noté toutes les révisions.

J'ai ensuite fait la fusion de ma branche vers le tronc en spécifiant les révisions manuellement. J'ai spécifié toutes les plages pour exclure les révisions où j'ai fusionné le tronc. J'arrive à faire fusionner ma succursale.

J'ai dû faire quelques retours sur mergeinfo, mais j'ai fusionné mon code.

J'ai immédiatement supprimé ma succursale.

David
la source
0

J'ai eu cette erreur après avoir utilisé une vérification partielle d'une succursale. Je gardais la branche à jour avec le coffre, mais les révisions du coffre pour les parties de la branche qui n'étaient pas extraites n'étaient bien sûr pas mises à jour. Le correctif consistait à effectuer une extraction complète de la branche, puis à fusionner toutes les modifications du tronc. Après les avoir validés dans la branche, j'ai pu fusionner la branche avec le tronc avec succès.

John W
la source
0

Vous avez ce problème

  • TortoiseSVN 1.9.7, Build 27907 - 64 Bit, 08/08/2017 19:34:38
  • Subversion 1.9.7, -release
  • avr 1.5.2
  • apr-util 1.5.4
  • serf 1.3.9
  • OpenSSL 1.0.2l 25 mai 2017
  • zlib 1.2.8
  • SQLite 3.14.1

faites un clic droit sur la branche où vous souhaitez fusionner (mais obtenez ce message) et sélectionnez l'option "mettre à jour à la révision" puis sur la boîte de dialogue qui s'ouvre (capture d'écran ci-dessous) sélectionnez ces révisions et cliquez sur ok - une fois que toutes les révisions précédentes sont fusionnées, tu ne recevrais pas ce message

entrez la description de l'image ici

Ajouter ceci ici pour aider quelqu'un qui utilise Tortoise SVN

Akber Iqbal
la source
-1

Je sais que c'est un ancien message, mais j'avais également du mal à résoudre ce problème jusqu'à ce que je découvre que les fichiers répertoriés dans le message d'erreur ont un problème de propriété SVN.

J'ai fait un clic droit sur les fichiers perturbés: TortoiseSVN> Propriétés, et j'ai constaté que le fichier avait deux svn: mergeinfo, et l'un d'eux n'avait pas hérité des données. J'ai donc supprimé cette mergeinfo.

J'utilise TortoiseSVN 1.12.2, Build 28653 - 64 Bit.

awan.soekamto
la source