2010-09-18 5 views
3

Ce message peut être un peu long, mais si vous pensez pouvoir nous aider, lisez-le s'il vous plaît.svnmerge est vraiment là pour m'aider?

Voici le scénario. Je travaille sur un projet [pour KDE], dont le tronc est hébergé chez, disons: http://ubersvn.org/home/uber/trunk/myapp. Aussi, je travaille sur une branche, disons: http://ubersvn.org/home/uber/branches/work/myapp-mod. Voici ce que j'ai fait:

Après avoir créé une branche, j'ai travaillé sur ma copie de travail locale de la branche et j'ai souvent utilisé des modifications du tronc. On m'a dit que cela aiderait à prévenir une multitude de conflits quand il s'agirait finalement de revenir au tronc. Alors, assez souvent, je faisais:

svnmerge.py merge 
svn commit -F svnmerge-commit-message.txt 

Après le travail a été fait, il était temps de fusionner la branche dans le tronc. J'ai d'abord vérifié une copie de travail du tronc:

svn co svn+ssh://ubersvn.org/home/uber/trunk/myapp 
cd myapp 

Puis, je suivais le documentation pour la fusion de retour:

svnmerge init svn+ssh://ubersvn.org/home/uber/branches/work/myapp-mod 

Et pour fusionner les deux sens:

svnmerge merge --bidirectional -S svn+ssh://ubersvn.org/home/uber/branches/work/myapp-mod 

Et Voici où le problème commence. Tout d'abord, de la regarder, il fusionne chaque révision depuis que j'ai ramifié. Si c'est le cas, je ne vois pas l'intérêt de tirer fréquemment du coffre et de tenir ma branche à jour. Cependant, je suppose que svnmerge l'utilise en quelque sorte pour résoudre les conflits tout au long de la fusion. Jusqu'ici tout va bien.

En second lieu, il a pris fin abruptement avec une erreur qui sonnait quelque chose comme:

Attempt to add tree conflict that already exists 

Une petite recherche en ligne m'a dit que le problème pourrait être résolu par:

svn resolve --accept working -R . 

Et puis cela montre que certaines résolutions ont été effacées et toutes. Cependant, maintenant, quand je fais ceci:

svnmerge merge --bidirectional -S [BRANCH_URL] 

il est dit 'aucune information svnmerge trouvée'. J'ai essayé d'utiliser svnmerge init BRANCH_URL, mais il est dit '.' has local modifications. It must be clean.

Donc, maintenant les problèmes que je fais face sont:

  • Je ne peux pas tirer de ma branche car il y a des modifications locales
  • Pour faire ma copie de travail propre, je dois engager, ce qui est une option puisque la fusion est seulement à mi-chemin et il serait définitivement briser le tronc.
  • Mes fichiers sont complètement incohérents. Je ne sais pas comment les révisions ont été fusionnées, il y a des fichiers qui incluent 'mylittleapp.h', mais 'mylittleapp.h' a été créé dans une révision ultérieure.
  • ** Il y a un grand nombre de conflits ** pour ** CHAQUE ** nouveau fichier qui a été ajouté dans ma branche. Je ** absolument ** ne comprends pas cela.J'étais le seul développeur travaillant sur ces fichiers, ces fichiers ne pouvaient pas dans le coffre à tout moment. Pourquoi y a-t-il autant de conflits dans ces fichiers?
  • Il y a un grand nombre de fichiers appelé `mybigapp.h.merge- (à droite | gauche) .R [0-9] +` et `mybigapp.h.working`. `mybigapp.h` lui-même est plein de conflits. Tant de conflits qu'il est humainement impossible de résoudre.
  • Depuis la moitié des dossiers supposent l'existence d'un fichier qui est en fait pas présent, je ne peux pas tester ou quoi que ce soit jusqu'à ce que je fais obtenir le fichier. Et je ne peux pas obtenir de révisions ultérieures après l'erreur "tenter d'ajouter un conflit d'arbre".

Alors, comment dois-je procéder d'ici? Une solution semble être juste de diff de la branche, appliquer au tronc puis commettre. Mais selon les politiques de l'organisation pour laquelle je travaille, ce n'est pas acceptable. Toute aide est grandement appréciée et je serais vraiment reconnaissant.

Merci, rohan

+0

Quelle version de subversion utilisez-vous? Les versions> = 1,5 fournissent un suivi de fusion «intégré». À ma compréhension * svnmerge * est obsolète. – zellus

Répondre

2

Je n'ai pas vraiment une solution pour vous, mais j'espère que cela aide.

Avant de fusionner votre branche en tronc, votre succursale doit avoir chaque valider à partir du tronc à partir du moment où vous avez créé votre succursale. Ceci est important car sinon, la fusion de vos modifications sur le tronc effacerait les modifications d'autres personnes du tronc. Maintenant, si vous ne faites que fusionner my-branch en trunk, la modification de rev 7 sera perdue! C'est pourquoi vous devez mettre à jour votre branche avec tous les changements du coffre. Chaque fois que vous fusionnez des modifications, SVN ajoute une propriété mergeinfo (SVN 1.5) au répertoire de premier niveau (celui sur lequel vous effectuez la fusion). Cela ressemble à ceci:

svn: mergeinfo/trunk: 7, 10-13, 14 (cela signifie que vous avez fusionné ces révisions de tronc à votre succursale)

Le message sur les conflits d'arbre est généralement lié au fichier et au répertoire se déplace et renomme. Si vous avez supprimé un fichier mais que vous n'avez pas utilisé svn delete, ou que somefile.h a été modifié dans le coffre mais que ce fichier est déplacé ailleurs dans votre branche.

Voici ce que je voudrais essayer:

  1. Commander nouveau tronc
  2. Commander nouvelle branche
  3. Assurez-vous que branche contient tous les changements du tronc (vous pouvez vérifier la propriété mergeinfo sur le répertoire de la branche de haut niveau , si vous utilisez svn 1.5)
  4. tout savoir sur la fusion http://svnbook.red-bean.com/en/1.5/index.html (il ne vous prendra pas trop de temps et vous saurez exactement ce que vous faites)
  5. Essayez de vous fusionner branche r le tronc

Je ne peux pas vous aider avec la ligne de commande car je ne suis pas à l'aide d'un client de ligne de commande. Ce que vous essayez de faire est quelque chose que les gens qui utilisent SVN font tous les jours, ça doit marcher.