55 votes

Subversion: comment trouver toutes les révisions qui ne sont pas fusionnées dans le coffre?

La ramification des sources pour la libération du cycle est l'une des communes de la source de scénarios de gestion. La fusion dès que possible est une bonne pratique. Nous disposons donc d'un facteur humain: la succursale est fermée, mais quelqu'un a oublié de fusionner quelque chose dans le tronc.

Q: Est-il "un clic" de façon à obtenir tous les numéros de révision qui n'ont pas été fusionnées à partir de la branche X, du tronc?

(Note: je n'ai pas besoin de ces numéros de révision de trouver de quoi de fusion, j'ai besoin d'eux pour créer de validation automatisés, qui rappelle les gens à s'assurer qu'ils ne pas oublier de fusionner quelque chose du tronc. La fusion elle-même n'est pas un problème.)

Il coutures comme svn mergeinfo commande échoue là pour vous aider. Passage de la branche et du tronc racines échouera si la fusion a été réalisée non pas sur la racine (et c'est un scénario commun).

Des Scripts, des outils de toute sorte de svn crochets comme une solution sont les bienvenus.

P. S.

La dernière version de SVN. Pas besoin d'argumenter de façon commune ou bien ce scénario est ;)

70voto

tmont Points 1240

Vous pouvez le faire très facilement si vous utilisez une version relativement nouvelle de Subversion (1.5 ou plus, je pense) avec la sous-commande mergeinfo .

 svn mergeinfo --show-revs eligible svn://repo/branches/your-branch-name svn://repo/trunk
 

Cela vous montrera toutes les révisions pouvant être fusionnées avec le tronc à partir de la branche "votre-nom-de-branche".

Source: http://svnbook.red-bean.com/fr/1.5/svn.ref.svn.c.mergeinfo.html

7voto

Nathan Kidd Points 1792

Réponse courte: je ne pense pas.

Réponse longue: j'ai fini par écrire un script python pour répondre à cette question. À chaque fois que les développeurs fusionnent un ensemble de modifications, ils sont tenus de mettre "rXXX fusionné" dans le message du journal. (Cela existait avant svn: mergeinfo existait) Le script analyse tous les svn branches + trunk en temps réel et analyse de manière récursive tous les liens "fusionnés", générant une liste par développeur des modifications non fusionnées.

2voto

Mat Schaffer Points 962

Je me rends compte votre cas est probablement trop tard pour cela, mais ce que je fais pour ce genre de chose est d'établir une convention pour la fusion s'engage donc ils sont identifiables plus tard. Par exemple "Fusion [1234]: ...(journal de validation de 1234)...". Ensuite, je peux l'analyser de svn log avec un script plus tard.

Assurez-vous que votre ensemble de l'équipe t-il, de faire de la fusion de la convention dans un script et le mettre dans votre projet. (par exemple, ./scripts/fusion 1234). Les gens vont généralement à même d'apprécier ce, doublement si le script se confond plus facile que le raw commande svn serait en faisant des choses comme trouver l'url de la source automatiquement

Bonne chance.

1voto

Ether Points 34103

Je ne serais pas s'inquiéter à propos des numéros de changement de ce qui doit l'être fusionnés, mais plutôt il suffit de regarder les différences:

Tout d'abord, apporter la de la branche latérale jusqu'à la date du tronc (ou voir ce qui pourrait être fusionné):

cd branch-dir
svn merge --reintegrate http://svnrepo/path-to-trunk .
svn ci -m'making this branch current'

cd ../trunk-dir
svn merge --dry-run http://svnrepo/path-to-trunk http://svnrepo/path-to-branch .
svn ci -m'merging in all unmerged changes from <branch>'

Rappelez-vous, svn merge commandes de regarder juste comme svn diff commandes - vous créer un diff/patch, puis appliquez-les à un endroit particulier. Que la commande de fusion ci-dessus est simplement en train de dire "prendre toutes les différences entre le tronc et la branche, et de les appliquer à une copie de travail du tronc". Vous pouvez donc facilement remplacer le deuxième commande de fusion dans un diff pour votre mail de notification.

N'oubliez pas de vérifier les diff avant de s'engager dans chaque cas, afin d'être sûr que rien de mal ne s'est passé. Vous devrez également résoudre certains conflits.

0voto

dma_k Points 3567

Pour cette raison, CVS créé une étiquette de marque de la racine de la branche :) Pour SVN qui devrait ressembler à ça:

+ trunk / project1
+ tags / project1-b1-root
+ branches / project1-b1

Notes:

  1. Tag projet1-b1-racine et branche projet1-b1 sont créés dans le même temps, à partir du tronc.
  2. Personne ne devrait s'engager à projet1-b1-racine (vous pouvez restreindre cette opération pour tags/ chemin d'accès).
  3. Quand tout le monde prétendait, qu'il a tout mis dans le tronc, vous faire un diff entre projet1-b1-racine et projet1-b1 et essayer de les appliquer à tronc: les changements, qui sont déjà appliqués, sera silencieusement ignoré, pour le reste, vous verrez la différence ou de collisions.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X