Que se passe-t-il lors de la validation des journaux sur une succursale après la fusion?

Scénario:

  1. Le programmeur crée une twig pour le projet ‘foo’ appelé ‘my_foo’ à la révision 5
  2. Le programmeur apporte plusieurs modifications à plusieurs fichiers pendant qu’il travaille sur la fonctionnalité “my_foo”.
  3. A la fin de chaque étape majeure, par exemple en ajoutant plusieurs nouvelles fonctions à une classe, le programmeur fait un svn commit sur les fichiers appropriés, les engageant ainsi dans la twig.
  4. Après plusieurs semaines et plusieurs commits plus tard (chaque commit ayant un journal de validation décrivant ce qu’il a fait), le programmeur fusionne la twig dans le tronc:
#Assume the following is being done from inside a working copy of the trunk: svn merge -r 5:15 file:///path/to/repo/twigs/my_foo
#Assume the following is being done from inside a working copy of the trunk: svn merge -r 5:15 file:///path/to/repo/twigs/my_foo 

Hazzah! il a fusionné tous ses changements dans le coffre! Il y a beaucoup de joie et de boire de Mountain Dew.

Maintenant, disons qu’un autre programmeur arrive une semaine plus tard et met à jour sa copie de travail de la révision 5 à la révision 15. “Wow”, disent-ils. “Je me demande ce qui a changé depuis la révision 5”. Le programmeur fait alors un svn status sur leur copie de travail et ils obtiennent quelque chose comme ceci:

 -------------------------------------------------- ----------------------
 r15 |  programmeur1 |  2010-03-20 21:27:04 -0400 (sam. 20 mars 2010) |  1 ligne

 Fusion des modifications de la version 2.0 dans le tronc
 -------------------------------------------------- ----------------------
 r5 |  programmateur2 |  2010-02-15 10:59:55 -0500 (lun. 15 févr. 2010) |  1 ligne

 Ajout de assets / images / tumblr_icon.png au tronc

Que diable est-il arrivé à toutes les notes que l’autre programmeur a mises avec tous ses commits dans sa twig? Est-ce que ceux-ci ne sont pas arrêtés lors d’une fusion? Suis-je fou ou juste oublier quelque chose?

La réponse est obsolète , maintenant que nous avons svn log -g .


Non, vous n’êtes pas fou. C’est comme ça que ça fonctionne, malheureusement.

Le mieux que vous puissiez faire est d’inclure dans le message de validation pour la fusion l’URL de twig et le numéro de révision, afin que l’on puisse rechercher manuellement le journal de révision de cette twig. (Les données sont toujours là, bien sûr).

Cependant, vous ne savez pas lequel des changements est entré dans le coffre et ceux qui ne l’ont pas été.

S’il n’y a pas eu ou peu de modifications sur la ligne, cela peut être une option pour faire une fusion inversée (fusionner du tronc en twig), puis remplacer la ligne par la twig. Ce type de raisonnement peut également être effectué sur des sous-dossiers individuels (par exemple: remplacez le sous-dossier d’implémentation de l’parsingur XML de la twig, conservez le rest). Remplacer des dossiers (avec svn delete, svn copy) conservera l’historique des révisions.

Pour les fichiers qui ont été récemment ajoutés lors de la fusion, leur historique de révision peut être copié depuis la twig, si vous avez utilisé la commande svn copy. Pas sûr si la commande de fusion inclut le support pour cela, cependant.

Il pourrait être intéressant de savoir s’il existe un outil pour svn qui fait un “rebase” (comme dans git ou mercurial). Cela créerait des commits individuels pour chaque changement sur la twig. D’un autre côté, les commits individuels sont peut-être trop encombrants.

La meilleure recommandation que je puisse vous donner est d’utiliser une bonne interface utilisateur, telle que Trac, qui facilite l’inspection de l’historique des révisions, afin que vous puissiez voir ce qui s’est passé dans la twig.

Essayez svn log -g pour inclure l’historique de fusion stocké depuis Subversion 1.5.

TortoiseSVN a la case à cocher “Inclure les révisions fusionnées” au bas de la boîte de dialog “Afficher le journal” pour inclure les commentaires validés dans les twigs.

Bonnes réponses … Si vous souhaitez également connaître les fichiers archivés et éventuellement le nom de la twig, regroupez l’option -v [–verbose] avec -g [–use-merge-history].

Exemple:

 svn log -vg 

La sortie aura le chemin complet des fichiers archivés (même la twig fusionnée), ainsi qu’un message (à partir de ‘revision_url’) pour les fichiers ajoutés dans la révision avec la fusion.