41 votes

Comment diviser un dossier SVN en son propre dépôt lorsqu'il a été renommé ?

Je veux diviser un répertoire d'un grand dépôt Subversion en un dépôt à part entière, et conserver l'historique des fichiers dans ce répertoire.

J'ai d'abord essayé de le faire de la manière habituelle

svnadmin dump /path/to/repo > largerepo.dump
cat largerepo.dump | svndumpfilter include my/directory >mydir.dump

mais cela ne fonctionne pas, car le répertoire a été déplacé et copié au fil des ans et les fichiers ont été déplacés vers d'autres parties du référentiel. Le résultat est un grand nombre de ceux-ci :

svndumpfilter: Invalid copy source path '/some/old/path'

La prochaine chose que j'ai essayé est d'inclure ces /some/old/path au fur et à mesure qu'ils apparaissent et après une longue, longue liste de fichiers et de répertoires inclus, le svndumpfilter se termine, MAIS l'importation du dump résultant ne produit pas les mêmes fichiers que ceux du répertoire courant.

Alors, comment puis-je séparer correctement le répertoire de ce dépôt tout en conservant l'historique ?

EDIT : Je veux spécifiquement trunk/myproj pour être le tronc dans un nouveau dépôt PLUS que le nouveau dépôt n'inclue aucun des autres anciens éléments, c'est-à-dire qu'il ne devrait pas y avoir la possibilité pour quiconque de mettre à jour l'ancienne révision avant la séparation et d'obtenir/voir les fichiers.

La solution svndumpfilter que j'ai essayée aurait permis d'obtenir exactement cela, malheureusement ce n'est pas faisable puisque les chemins/fichiers ont été déplacés. Le site solution par ng n'est pas acceptable puisque c'est essentiellement un clone + suppression des extras qui conserve TOUT l'historique, pas seulement l'historique pertinent de myproj.

3voto

Le lien de auriarte vers svndumpfilter3 404's. Voici un lien fonctionnel (à partir du 2011-01-31), pour ceux qui le recherchent : http://furius.ca/pubcode/pub/conf/bin/svndumpfilter3.html

3voto

michael Points 263

Je viens de migrer avec succès un projet d'un repo combiné existant (chez Google Code) vers son propre repo. Les articles publiés ici ont été très utiles.

Voici ce qui a finalement marché pour moi...

  1. J'ai utilisé svnsync pour créer un miroir local de mon dépôt Google Code en suivant les indications suivantes aquí .
  2. svnadmin dump to foo-dumpfile
  3. cat dumpfile | ./svndumpfilter3 --untangle mymirrorrepo trunk/foo > foo-dumpfile
  4. svnadmin create foorepo
  5. svnadmin load foorepo --ignore-uuid < foo-dumpfile

El --untangle de l'étape 3 a permis de résoudre tous les problèmes de chemin d'accès qui bloquaient svndumpfilter et svndumpfilter2.

Au départ, à l'étape 5, j'étais bloqué sur l'erreur :

<<< Started new transaction, based on original revision 2
svnadmin: File not found: transaction '1-1', path 'trunk/foo'

Mais cette poste dans le blog de Charles Calvert expliquait que tout ce qui était nécessaire était de créer le répertoire trunk dans foorepo avant de faire le chargement.

2voto

ng. Points 4096

Pourquoi ne pas répliquer l'ensemble du dépôt, le transférer dans un nouveau dépôt. Ensuite, divisez le tronc en branches, supprimez la tête et fusionnez les parties que vous voulez réintégrer dans le tronc à partir de la branche. Ainsi, vous avez conservé l'historique et divisé les parties que vous voulez dans un nouveau référentiel.

  1. Dump to /trunk
  2. Brancher /trunk sur /branches/trunk
  3. Supprimer /trunk
  4. Fusionner /branches/trunk/quelque chose en /trunk ou /trunk/quelque chose

De cette façon, vous avez gardé toute l'histoire, et choisi les parties que vous voulez.

2voto

Adriaan Points 2481

Je suis également à la recherche d'une réponse à cette question (étant moi-même confronté à ce problème). Sur la base de la réponse d'Alex, j'ai trouvé http://furius.ca/pubcode/pub/conf/common/bin/svndumpfilter3.html qui prétend résoudre certains des problèmes de svndumpfilter2. Je crois que c'est une solution partielle.

Le bon :

Une réécriture de la méthode de Subversion svndumpfilter de Subversion en pur Python, qui vous permet de démêler les opérations de déplacement/copie entre les opérations exclues et les ensembles de fichiers/répertoires exclus et inclus les convertissant en ajouts. Si vous utilisez cette option, elle récupère les fichiers originaux d'un référentiel donné.

Préoccupation :

Important

Certaines personnes ont signalé un bug avec ce script, qu'il va créer un fichier vide sur un grand dépôt. Cela a bien fonctionné pour le fractionnement que j'ai que j'ai eu à faire sur mon référentiel, mais je n'ai pas le temps de corriger le problème qui se produit pour les dépôts de certaines autres personnes

2voto

rjp Points 1562

Il s'agit d'un coup de poignard sauvage et fou dans l'obscurité de la sur-complication des choses, mais que diriez-vous d'importer le repo SVN dans git en utilisant git-svn /[tailleur][3], en séparant le répertoire à l'aide de git-split puis en le réexportant vers svn avec git-svn ?

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