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.

2voto

tlehman Points 273

Je suis tombé sur ce problème et j'ai trouvé cet outil. svndumpsanitizer Il a semblé fonctionner correctement ; j'ai pu importer le fichier qu'il a créé dans un nouveau référentiel.

1voto

ng. Points 4096

Les commandes spécifiques sont les suivantes, je vais supposer que le dépôt est hébergé sur un serveur http(s)://, bien que les mêmes commandes fonctionneront pour svn:// ou file://.

svnadmin dump /path/to/repository > dumpfile  
svnadmin create /path/to/new_repository 
svnadmin load /path/to/new_repository < dumpfile 
svn co https://localhost/svn/new_repository_url new_repository_checkout 
cd new_repository_checkout 
svn move https://localhost/svn/new_repository_url/trunk  https://localhost/svn/new_repository_url/branches/head -m "Moving HEAD to branches" 
svn move https://localhost/svn/new_repository_url/branches/head/whatever https://localhost/svn/new_repository_url/trunk -m "Creating new trunk" 
svn update 
cd branches 
svn remove head
svn commit

Vous devriez maintenant avoir la partie que vous voulez de l'ancien référentiel comme tronc du nouveau.

0voto

Je vois que c'est assez vieux maintenant, mais est-ce que l'ajout de "--skip-missing-merge-sources" aide ? Il semble que cela pourrait...

0voto

Brawndo Points 436

Si vous n'avez pas besoin de l'historique complet, vous pouvez le récupérer juste après l'erreur. Si votre erreur se situe à la révision 412, vous pouvez essayer de la reprendre juste après :

svnadmin dump /path/to/repo -r 413:HEAD > largerepo.dump

Je suis conscient que cette solution n'est peut-être pas parfaite, mais elle peut être suffisante dans votre cas.

Vous pouvez aussi faire tout cela en une seule étape.

svnadmin dump /path/to/repo -r 413:HEAD | svndumpfilter include my/directory > mydir.dump

0voto

Alex Points 472

Plus d'informations sur svndumpfilter et comment le réparer. http://blog.rlucas.net/uncategorized/some-gotchas-with-using-svndumpfilter/

Ou vous pouvez essayer le remplacement de svndumpfilter script, maintenant appelé svndumpfilter2 -. http://cogo.wordpress.com/2009/03/10/problems-with-svndumpfilter/

Je n'ai pas essayé ce script, car j'ai besoin d'un peu de temps pour faire une sauvegarde de repo, pour tester là-dessus (j'ai un dump de sauvegarde pour jouer avec mais sur Windows, et c'est un script linux).

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