44 votes

Subversion fusionnant les modifications d'un autre référentiel

Je suis vraiment confus. Je veux faire quelque chose qui semble comme il devrait être assez simple, et b) d'autres personnes doivent faire tout le temps, mais je ne peux pas trouver la meilleure façon de le faire n'importe où.

Il y a un référentiel externe qui contient de la 3e partie du code. Je veux faire une copie de la version 1 du code et de le mettre dans mon propre dépôt, puis de le personnaliser pour mes propres besoins. Lorsque la version 2 de ce code est publié, je veux être en mesure de mettre à jour ma version spéciale avec toutes les version 2 changements, en conservant mes personnalisations.

J'ai lu sur le vendeur branches (http://svnbook.red-bean.com/en/1.5/svn.advanced.vendorbr.html) mais je ne comprends pas pourquoi la fusion de la version précédente du code du fournisseur et la nouvelle copie du vendeur, le code doit être si compliqué (c'est à dire. svn_load_dirs.pl). Sûrement, si la 3ème partie du code est stocké dans un référentiel SVN, l'ensemble de l'histoire concernant les fichiers qui ont déménagé/été supprimé est connu, alors pourquoi avez-vous besoin de lui dire ce qui a changé manuellement?

Citation:

Par exemple, vous aurez la possibilité de dire au script que vous savez que le fichier de maths.c dans la version 1.0 de libcomplex a été renommé à l'arithmétique.c dans libcomplex 1.1.

J'ai aussi lu (http://svn.haxx.se/users/archive-2006-04/0285.shtml) qu'il est possible de simplement exécuter une fusion entre les différents référentiels, mais je ne pensais pas que c'était possible, et chaque fois que je l'ai essayé il est tombé en panne (si je pouvais faire quelque chose de mal).

Quelqu'un peut-il clarifier cela pour moi, et de proposer la meilleure solution?

Merci, Jack

21voto

Mike Houston Points 4320

J'ai juste essayé une brève expérience avec TortoiseSVN:

De la création du test dépôts

  1. créer deux nouveaux référentiels dans rep1 et rep2
  2. découvrez rep1 dans co1
  3. ajouter un fichier texte à co1 et
  4. l'exportation rep1 à ex1
  5. importation ex1 dans rep2

À ce stade, vous serez dans l'état de la création de votre local 'branche' dans un nouveau référentiel. Les deux dernières étapes sont tous vous avez besoin pour un projet existant.

Pour simuler certaines modifications à l'original repo, modifier le fichier texte dans co1 et valider les modifications.

Modifications De La Fusion

Maintenant, pour créer votre propre copie de travail, découvrez rep2 en co2.

Nous devrions être prêts à essayer de fusion de l'rep1 en co2.

Ouvrez la boîte de dialogue fusionner pour le co2 et de le pointer sur rep1.

Pour le 'de' révision sélectionner la révision à laquelle vous avez exporté votre copie (dans ce cas, la révision 1), ou de la révision que vous avez mis à jour votre copie locale pour.

Pour le " à " la révision sélectionnez la TÊTE ou de la dernière mise à jour que vous souhaitez appliquer.

Résultats

Cela semble fonctionner comme prévu, avec les modifications de rep1 être appliquée à la copie de travail de rep2 de co2. Ceux-ci doivent être résolus de retour à votre dépôt local.

9voto

Tall Jeff Points 6065

Le vendeur branches lien que vous avez fourni est de décrire le processus de ce que vous voulez faire. C'est une solution parfaite par rapport à vous permettant de faire une quinte de mise à jour (import) de la branche vendeur, et puis comme vous faites allusion à l', vous permettra par la suite à la fusion du fournisseur mises à jour avec les modifications dans la branche de développement principale.

Le problème est que la Subversion vraiment ne fournit pas de support direct pour le fichier renomme et déplace des fichiers entre des répertoires successifs de mise à jour du code de fournisseur parce que vous venez d'obtenir des instantanés de la source des fichiers de contenu....quelque chose a besoin pour exécuter les commandes dans la version du système pour indiquer que des modifications sont apportées à l'arbre de noms de fichiers qui composent la nouvelle version. C'est le but de la svn_load_dirs.pl script processus. Il vous aide à obtenir votre version de l'histoire manipulée autour de faire correspondre les branches de sorte que vous pouvez alors procéder à la fusion. Si le vendeur n'a pas renommer et/ou de déplacer des fichiers entre les versions que vous avez importé, vous n'auriez pas ce problème.

Dans tous les cas, le processus décrit ici est ce que vous devez faire.

0voto

HUAGHAGUAH Points 1369

Je n'ai pas essayé avec plusieurs pensions de moi, mais je ne vois pas pourquoi vous ne pouvez pas utiliser les suggestions à partir de votre 2ème lien.

svn merge ORIGINAL@REV MISE à niveau de@REV LOCAL_PATH

Effectivement cela dit SVN de prendre toutes les modifications entre la version originale de paiement, et la version que vous voulez, et de les appliquer à votre copie locale.

Protip: j'ai toujours utiliser des révisions et incluent la commande de fusion avec le message de validation, de sorte que je peux facilement passer en revue l'histoire et de comprendre comment reproduire ou annuler les modifications.

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