J'ai lu des articles sur la création de branches/la fusion avec Subversion 1.5 en utilisant l'excellent et gratuit Contrôle de version avec Subversion book. Je pense comprendre comment utiliser le client de ligne de commande Subversion pour effectuer les actions dont j'ai le plus souvent besoin, à savoir:
Mise à jour de la branche avec les modifications apportées au tronc
À partir du répertoire de travail de la branche, exécutez:
svn merge http://svn.myurl.com/proj/trunk
Fusionner la branche dans le coffre
À partir du répertoire de travail du coffre, exécutez:
svn merge --reintegrate http://svn.myurl.com/proj/branches/mybranch
Cependant, nous utilisons TortoiseSVN 1.5 comme interface avec Subversion. Je voudrais savoir comment mieux effectuer ces opérations avec TortoiseSVN. La nouvelle boîte de dialogue propose trois options différentes dans le menu principal.
D'après ce que je peux en déduire, TortoiseSVN exécute toujours svn avec la syntaxe suivante.
svn merge [--dry-run] --force From_URL @ revN To_URL @ revM PATH
De plus, la réintégration d'une branche échoue souvent avec un message indiquant que certaines cibles n'ont pas été fusionnées et ne peuvent donc pas continuer. J'ai donc dû utiliser l'option 3.
Mes questions sont:
MODIFIER
Lors de tests "à sec", j'ai constaté que l'opération de subversion en ligne de commande
svn merge http://svn.myurl.com/proj/trunk
est analogue à l'option n ° 1 (Fusionner une plage de révisions) dans TortoiseSVN, tant que je laisse la plage de révision vierge.
Le comportement dépend de la version de votre référentiel. Subversion 1.5 permet 4 types de fusion:
Subversion avant 1.5 n'autorisait que les 2 premiers formats.
Techniquement, vous pouvez effectuer toutes les fusions avec les deux premières méthodes, mais les deux dernières permettent le suivi des fusions de Subversion 1.5.
Les options de TortoiseSVN fusionnent une plage ou des révisions mappées à la méthode 3 lorsque votre référentiel est supérieur à 1,5 ou à la méthode 1 lorsque votre référentiel est plus ancien.
Lors de la fusion de fonctionnalités vers une branche de version/maintenance, vous devez utiliser la commande "Fusionner une plage de révisions".
Ce n'est que lorsque vous souhaitez fusionner toutes les fonctionnalités d'une branche en une branche parente (généralement une ligne principale) que vous devriez envisager d'utiliser 'Réintégrer une branche'.
Et la dernière commande, Fusion de deux arbres différents, n’est utile que si vous souhaitez sortir du comportement de branchement normal. (Par exemple, comparer différentes versions puis fusionner la différence avec une autre branche)
Je ne pouvais pas bien suivre les autres réponses, voici plus d'un guide pour les nuls ...
Vous pouvez faire cela dans les deux sens pour utiliser trunk -> branch
ou branch -> trunk
. Je commence toujours par trunk -> branch
à résoudre les conflits, puis à fusionner branch -> trunk
.
Vous devriez utiliser "fusionner une plage de révision".
Pour fusionner les modifications du tronc en une branche, dans la copie de travail de la branche, choisissez "fusionner la plage de révisions" et entrez l'URL de la ligne ainsi que les révisions de début et de fin à fusionner.
La même chose dans le sens opposé pour fusionner une branche dans le coffre.
Pour le drapeau --reintegrate, consultez le manuel ici: http://tortoisesvn.net/docs/release/TortoiseSVN_fr/tsvn-dug-merge.html#tsvn-dug-merge-reintegrate
Jetez un coup d'œil à svnmerge.py . C'est en ligne de commande, ne peut pas être invoqué par TortoiseSVN, mais c'est plus puissant. De la FAQ :
La subversion traditionnelle vous laissera fusionner les modifications, mais pas "souviens-toi" de ce que tu as déjà fusionné . Il ne fournit pas non plus une solution pratique moyen d'exclure un jeu de modifications d'être fusionné. svnmerge.py automatise une partie de le travail, et le simplifie. Svnmerge crée également un message de validation avec le enregistrer les messages de toutes les choses qu'il fusionné.
Maj-clic droit sur le dossier et sélectionnez TortoiseSVN -> Fusionner tout