une - tortoise svn create branch




Combinaison de plusieurs référentiels SVN en un seul (4)

Après avoir considéré les réponses à ma question précédente ( un référentiel SVN ou plusieurs? ), J'ai décidé de prendre les 4 dépôts que j'ai et de les consolider en un seul. Cela conduit bien sûr à la question, quelle est la meilleure façon de le faire?

Existe-t-il un moyen de combiner deux ou plusieurs référentiels en conservant l'historique des versions pour les deux?

Edit: Je dois aussi signaler que j'utilise Assembla.com, qui ne donne pas accès à la commande svnadmin, AFAIK

Une autre édition: Cela compte-t-il? Si svnadmin fonctionne sur des URL, alors ce n'est pas un problème.


Avec Subversion 1.7, vous êtes maintenant capable de faire des vidages à distance. Autrement dit, sans avoir accès au système de fichiers local et à la commande svnadmin dump .

Vous pouvez utiliser svnrdump pour obtenir un vidage complet d'un dépôt distant. Voir la documentation pour les détails de la syntaxe.

Notez que le serveur ne doit pas exécuter 1.7, seul le client.

http://svnbook.red-bean.com/en/1.7/svn.ref.svnrdump.c.dump.html


Edit: Eh bien, l'édition de la question a été faite pendant que je tapais. Ceci est une réponse à

Existe-t-il un moyen de combiner deux ou plusieurs référentiels en conservant l'historique des versions pour les deux?

En admettant que

Les référentiels existants ont une structure telle que:

  • racine du référentiel
    • branches
    • Mots clés
    • tronc

et vous voulez une structure quelque chose comme:

  • racine du référentiel
    • projectA
      • branches
      • Mots clés
      • tronc
    • projectB
      • branches
      • Mots clés
      • tronc

Ensuite, pour chacun de vos référentiels de projet:

svnadmin dump > project<n>.dmp

Ensuite, pour chacun des fichiers de vidage:

svn mkdir "<repo url>/project<n>"
svnadmin load --parent-dir "project<n>" <filesystem path to repos>

Des manipulations plus complexes sont possibles, mais c'est la plus simple, la plus simple. La modification de la structure du référentiel source lors d'une sauvegarde / chargement est dangereuse, mais faisable grâce à une combinaison de svnadmin dump , svndumpfilter , d'édition manuelle ou de filtres de texte supplémentaires et de svnadmin load

Traiter avec un fournisseur tiers

  • Demander svnadmin dump fichiers de svnadmin dump pour chacun de vos dépôts. Le fournisseur devrait être disposé / capable de fournir ceci - c'est votre code!
  • Créez un référentiel SVN localement.
  • Effectuez les actions répertoriées ci-dessus pour les fichiers de vidage.
  • Vérifiez que la structure du référentiel est correcte avec votre client préféré.
  • Créez un fichier de vidage pour les référentiels combinés.
  • Demander que le fournisseur remplisse un nouveau référentiel à partir de ce fichier de vidage.

YMMV: Cela semble être une approche raisonnable, mais je n'ai jamais travaillé avec un fournisseur tiers comme celui-ci.


Oui, en utilisant svnadmin dump et svnadmin load .

Supposons que vous avez des référentiels, l'un avec la révision HEAD 100 et l'autre avec la révision HEAD 150.

Vous déchargez le premier référentiel et le chargez dans le nouveau: vous retrouvez l'histoire complète du premier référentiel, de la révision 0 à la révision 150.

Ensuite, vous déchargez le deuxième référentiel et le chargez dans le nouveau: il est chargé avec son historique complet, les seules choses qui changent sont les numéros de révision réels. L'historique du deuxième référentiel sera représenté dans le nouveau référentiel de la révision 151 à la révision 250.

L'historique complet des deux référentiels est preserver, seuls les numéros de révision sont modifiés pour le référentiel importé en seconde position.

La même chose s'applique bien sûr pour plus de deux dépôts.

EDIT: J'ai posté pendant que vous éditiez, donc je n'ai pas vu votre note ...


Si vous n'avez pas accès à svnadmin, ce serait difficile mais faisable. Supposons que vous ayez des référentiels A et B et que vous souhaitiez les fusionner dans le référentiel C. Voici les étapes à suivre pour y parvenir.

  1. Découvrez la révision 1 du référentiel A sur votre disque dur.

  2. Créez un répertoire, appelé Repository_A à la racine de votre référentiel C, et vérifiez cela sur votre disque dur local.

  3. Copiez les fichiers de votre chèque de A (moins) les fichiers .svn, à votre caisse de C, dans le dossier Repository_A.

  4. Effectuer une validation sur C.

Mettez à jour votre copie de travail du référentiel A vers la révision 2, et effectuez les étapes 3 et 4, et répétez avec chaque révision successive jusqu'à ce que vous atteigniez la tête.

Maintenant, faites de même avec B.

Cela ferait essentiellement la même chose que @Davide Gualano suggérait, sans avoir besoin de svnadmin. Vous pourriez probablement écrire un script simple pour le faire pour vous, s'il n'y a pas beaucoup de révisions, vous pouvez le faire manuellement.





svn