Comment est-ce que je branche correctement post-commit et retourne le tronc dans svn?

StackOverflow https://stackoverflow.com/questions/148902

  •  02-07-2019
  •  | 
  •  

Question

J'ai quelques commits que j'ai décidé, après le fait, vont être plus de travail de branche que de travail de coffre. Comment créer la branche et rétablir le tronc tout en veillant à ce que la fusion ne soit pas pénible plus tard?

Est-ce aussi simple que de copier le tronc actuel dans une branche et de revenir en arrière? Ou cela créera-t-il des maux de tête plus tard?

Était-ce utile?

La solution

Je pense que la méthode Philips ressemblerait à ce qui suit, en supposant que le dernier "bon" est correct. la révision était à 100 et vous êtes maintenant à 130, pour créer la nouvelle branche:

svn copy -r100 svn://repos/trunk svn://repos/branches/newbranch
svn merge -r 100:130 svn://repos/trunk svn://repos/branches/newbranch

Notez que l’idée est de conserver les modifications apportées à ces révisions afin que vous puissiez les appliquer au tronc.

Pour rétablir le tronc:

svn merge -r130:100 .
svn ci -m 'reverting to r100 (undoing changes in r100-130)' . 

(Peu importe l'ordre dans lequel vous les avez exécutés, vous pouvez donc rétablir le tronc avant de créer la branche.)

Ensuite, vous pouvez basculer vers la nouvelle branche créée dans le référentiel:

svn switch svn://repos/branches/newbranch workdir

Autres conseils

Pour être honnête, je copie mes modifications, rétablit la jonction, la branche, puis valide mes modifications dans la branche. La raison principale étant la facilité de fusion ultérieure (si vous fusionnez ultérieurement du tronc vers la branche au point de branche, la fusion contiendra un retour de vos modifications initiales).

Ce n'est peut-être pas le "correct" De cette façon, vous pouvez toujours ignorer les révisions lors de la fusion, mais c’est normalement beaucoup moins le casse-tête pour moi par la suite. Clause de non-responsabilité: je ne suis pas un gourou du svn. Cela peut donc être plus facile pour moi car je le fais mal - mais j’utilise beaucoup de svn.

Il n’ya rien de mal à suivre la méthode de Philip, si ce n’est qu'elle laisse des traces de "cruel". dans l'historique de révision. Si vous souhaitez les supprimer pour des raisons de propreté, et que les révisions sont dans HEAD, vous pouvez les supprimer du référentiel en suivant ces instructions .

Mise à jour: La méthode de Philip est meilleure que celle suggérée dans la question pour les raisons qu'il a énoncées. Les méthodes de Mine et de Philip seraient similaires, si ce n'est que pour ne pas inverser le tronc, je propose de supprimer les révisions de l'historique des révisions. (Comme je l'ai dit, cela ne peut être fait que si toutes les révisions que vous voulez supprimer se trouvent en tête du référentiel.)

Je n'ai pas svn disponible ici, mais voici comment j'essaierais de le faire:

Déterminez à quel moment de l’histoire vous avez commencé à commettre de mauvaises choses (dites révision "100" pendant que vous êtes à "130")

svn copy trunk branch # create your branch while preserving history
svn copy trunk@100 trunk #replace current revision with revision 100  

Ceci devrait contourner l’historique erroné sans ajouter de fusion inversée (en fait, vous contournez l’historique des troncs entre 100 et 130, mais vous avez conservé un lien vers cet historique dans la branche et accéder au tronc tout en forçant la rév histoire correcte)

Alors

svn switch branch workdir

Cela devrait fonctionner si vous voulez supprimer complètement les modifications du coffre. Si vous souhaitez conserver de petits objets, vous pouvez les sélectionner à nouveau d'une branche à une autre (si vous utilisez svn 1.5, il suivra les points de fusion et évitera les conflits parasites).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top