2009-02-20 5 views
1

Mon groupe de développement suit le modèle de branches stables stables dans Subversion. Chaque mois, une branche de publication stable est créée à partir du tronc. Parfois, les modifications doivent être fusionnées à partir de ces branches de publication dans les branches de publication suivantes et, éventuellement, dans le tronc.Fusionner les modifications manquées dans Subversion

Le problème est que, au cours des derniers mois, les fusions ont été effectuées de manière incorrecte dans toutes ces branches. De nombreuses révisions ont été ignorées en raison d'une mauvaise compréhension par les développeurs des révisions dont ils avaient besoin pour fusionner.

Un exemple historique de fusion incorrecte ressemblerait à ceci:


------------------------------------------------------------------------ 
r57 | Bob | 2008-11-27 04:02:46 -0600 (Thu, 27 Nov 2008) | 1 line 

action:merge; origin:branches/1; target:branches/2; range:28-55 
------------------------------------------------------------------------ 
r28 | Alice | 2008-11-25 10:14:00 -0600 (Tue, 25 Nov 2008) | 1 line 

action:merge; origin:branches/1; target:branches/2; range:10-25 

Ici, Bob aurait dû commencer sa fusion de R25, où la fusion d'Alice a pris fin, au lieu de R28.

Donc maintenant j'ai 6 branches qui ont été fusionnées incorrectement depuis début octobre de cette façon. Cela provoque des échecs de test et de nombreuses régressions dans le coffre. Alors maintenant, je veux revenir en arrière et fusionner tous les changements manqués.

Y a-t-il un moyen facile et correct de faire cela? Mon plan actuel est de revenir au début et de commencer à fusionner dans chaque trou. Donc dans l'exemple, je fusionnerais les révisions 25-28 de la branche 1 à la branche 2. Mais j'attends beaucoup de conflits et j'espère qu'il y aura un meilleur moyen.

Il n'y a vraiment pas de solution simple et rapide pour cela. Forcer les développeurs à gérer plusieurs branches simultanées dans Subversion est source d'erreurs et de temps. Dans ce cas, de nombreux commentaires d'archivage des développeurs sont inexacts de toute façon. Donc, il n'y a vraiment aucun moyen de revenir en arrière et de revenir sur leurs pas. Au lieu de cela, nous allons tester complètement la branche la plus récente et fermer le reste.

+0

qui ressemble vraiment à une politique horrible et sujettes aux erreurs. J'ai toujours essayé d'adhérer à la notion de «succursale uniquement lorsque cela est nécessaire et le plus tard possible». Je suis sûr qu'il me manque quelque chose et que je n'ai tout simplement pas eu besoin de le faire à votre façon, mais pour moi, cela semble être une invitation à des problèmes. – Tim

Répondre

1

Si les développeurs vérifiaient leurs modifications dans les branches en cours de route, ne pouviez-vous pas créer une nouvelle branche avant la fusion, fusionner les modifications correctement, puis fusionner leur nouveau code? Peut-être qu'il me manque quelque chose. Je ne suis pas familier avec les différents modèles de Subversion, mais ma société suit un processus où notre tronc est toujours stable, et les développeurs ne peuvent pas le changer (ne peut changer les branches). Nous n'avons jamais eu de problèmes de fusion en conséquence, et nous avons plus de 10 000 révisions et 100 branches dans SVN. Je ne fais que soulever cette question car il semble que vous ayez un défaut majeur dans votre processus/modèle s'il y a plusieurs développeurs ayant des problèmes de fusion.

+0

Nous venons d'avoir quelques discussions sur les deux différentes techniques de branchement. Je dois dire qu'ils ont chacun leurs mérites et leurs problèmes. Ayant travaillé avec d'autres logiciels de contrôle de source, je pense que Subversion pourrait le faire mieux, mais je ne suis pas vraiment sûr de comment. – staticsan

0

Eh bien, pour obtenir tout ce que vous pouvez fusionner juste aux URL sans révisions spécifiques. Comme dans:

cd /path/to/working/copy/of/stable/brunch 
svn merge https://company.com/repo/project/branch/stable https://company.com/repo/project/trunk 

De cette façon, vous obtiendrez tout de trunk que vous avez oublié de fusionner en stable. Passez en revue, retournez les choses dont vous n'avez pas besoin, et validez.

Questions connexes