2009-08-20 5 views
1

J'ai fait beaucoup de développement sur une branche dans mon dépôt subversion. Tout au long de cela, j'ai fusionné les changements de tronc en repérant manuellement ceux que j'ai mis. J'ai lu accidentellement un livre SVN 1.0 qui m'a explicitement dit que SVN ne suit pas les changements qui ont été fusionnés, donc j'ai essayé de spécifier fusionner dans ma branche pour le garder en phase avec le tronc et tout le développement qui s'y passait.Comment puis-je utiliser SVN pour fusionner les modifications d'un dossier repo à lui-même?

Le problème réside ici: j'ai raté beaucoup de changements lors de la synchronisation. Je l'ai synchronisé avec ce que je pensais être à jour il y a quelques jours, puis, pour le remettre dans le coffre, j'ai marqué et effacé le coffre actuel, puis copié ma branche dans le coffre. Cependant, une partie du développement qui a été fait sur le tronc (en fait pas mal) a été perdue parce que je n'ai pas appliqué ces changements avant de déplacer ma branche dans le tronc et je n'ai pas svn merge --reintegrate (qui aurait appliqué mes changements au coffre). Le développement a été fait sur ce nouveau tronc depuis (tout un tas de corrections de bugs) donc je ne peux pas vraiment refaire la fusion.

Important: J'utilise actuellement SVN 1.5, qui utilise la propriété svn: mergeinfo. C'est génial parce que je sais exactement quelles révisions j'ai manqué, mais je ne peux pas obtenir SVN pour les appliquer. Je pense que

svn merge --ignore-ancestry http://example.org/svn/trunk 

qui semblait appliquer trop de changements,: j'ai essayé de faire cela sur ma copie de travail (une caisse du tronc):

svn merge http://example.org/svn/trunk 

en vain, et cela aussi était appliqué chaque changeset jamais fait au lieu de ceux que j'ai manqués lors de la mise à jour de ma branche.

Aidez s'il vous plaît!

Répondre

1

I marqués et supprimé le tronc actuel, puis copié ma branche dans le tronc

Ne jamais faire. L'URL http://example.org/svn/trunk référence désormais différents objets versionnés en fonction de la révision dont vous parlez: l'ancienne ligne de réseau ou le nouveau tronçon. Pour distinguer entre les deux, vous pouvez utiliser un peg revision comme ceci:

svn merge http://example.org/svn/[email protected]

Si la révision peg X est une révision d'avant que vous avez supprimé le tronc (par exemple, la révision qui a supprimé le tronc moins un), alors cette volonté fusionner toutes les révisions éligibles de l'ancienne ligne réseau.

Vous pouvez utiliser l'option --dry-run pour voir ce qui se passerait sans rien faire. Vous pouvez utiliser -r ou -c pour spécifier des révisions spécifiques ou des plages à fusionner, comme expliqué lorsque vous tapez svn help merge.

1

Vous pouvez spécifier une plage de révision à merge en utilisant svn. Vous pouvez donc spécifier chaque révision que vous avez manquée pour obtenir uniquement les modifications qui ont été effectuées à chaque fois.

par ex.

svn merge -r 30:31 thhgttg.txt 

Une fois que vous avez mis à jour toutes les révisions, j'éditeriez la propriété mergeinfo il détient l'ensemble des révisions.

Questions connexes