Comment migrer une base de code d'un repo svn à une autre histoire préservant?
-
23-09-2019 - |
Question
J'ai une branche dans une prise en pension svn mal structuré qui doit être dépouillé et déplacé vers un autre dépôt svn. (Je suis en train de nettoyer certains).
Si je fais un svn log
et non arrête la copie / renommage je peux voir tous 3427 engage que je me soucie. Est-il un moyen de vider les révisions à court d'écrire des scripts majeurs?
Je suivrais les conseils donnés dans cette question mais cette branche a été déplacé dans tous les sens et je voudrais préserver les mouvements aussi bien.
La solution
Je suppose que cela pourrait être semblable à ce que @ZacThompson (et @Pekka) signifient: Je pense que svndumpfilter
est votre ami
De votre question, je pense que vous avez l'idée de ce qu'il est censé faire, mais lutter avec la copie / déplacement de la branche dans tous les sens? Une réponse à cette question se trouve dans l'avant mentionné Documentation SVN , je crois:
En outre, les chemins copiés peuvent vous donner quelques difficulté. Subversion supporte la copie des opérations dans le référentiel, où nouveau chemin est créé en copiant certains déjà chemin existant. C'est possible que, à un moment donné dans la vie de votre dépôt, vous pourriez avoir copié un fichier ou un répertoire de certains endroits que svndumpfilter exclut, à un emplacement qu'il est compris. Faire l'auto-suffisante de données de vidage, svndumpfilter doit montrer encore la ajout du nouveau chemin, y compris la contenu de tous les fichiers créés par le copier et ne représentent pas que l'addition comme une copie d'une source qui ne sera pas existent dans vos données de décharge filtrée courant. Mais parce que la Subversion format de sauvegarde du référentiel indique que ce a été modifiée dans chaque révision, la le contenu de la source de copie peut-être pas être facilement disponibles. Si vous pensez que vous avez des copies de ce genre dans votre dépôt, vous voudrez peut-être repenser l'ensemble de vos inclus / exclus chemins, y compris peut-être les chemins qui a servi en tant que sources de votre opérations de copie gênants aussi.
Signification: faire svndumpfilter
comprennent tous les chemins de la branche jamais vécu . Ou suis-je manque quelque chose?
Une autre possibilité pourrait être le svndumpfilter2
mentionné par @compie dans le fil que vous avez lié même si je crois qu'il est même pas nécessaire (et je ne sais pas non plus de @compie ou svndumpfilter2
).
Autres conseils
Vous voulez utiliser une combinaison de:
- svnadmin dump
- svndumpfilter
- svnadmin load
Si vous voulez faire toute la branche, vous pouvez même pas besoin svndumpfilter. Mais si vous le faites:
http: / /svnbook.red-bean.com/nightly/en/svn.reposadmin.maint.html#svn.reposadmin.maint.filtering
Il y a une autre solution qui est assez simple et permet de résoudre le « préserver les mouvements » problème . S'il vous plaît voir le dernier paragraphe de l'entrée Apache Subversion FAQ "Comment puis-je supprimer complètement un fichier de l'histoire du référentiel ? ". La solution ne repose pas sur le svndumpfilter
.
Vous pouvez effectuer les étapes suivantes:
-
Configurer contrôles sur les chemins règles à nier accès en lecture pour USERNAME compte CHEMINS du fichier ou un dossier que vous souhaitez supprimer de l'histoire du référentiel.
S'il vous plaît noter le nom pluriel chemins . Le fichier ou le dossier que vous voulez vous débarrasser de pourrait avoir des noms différents ou peuvent être situés dans des endroits différents à travers une histoire de dépôt. S'il vous plaît tenir compte lors de la mise en place Deny.
-
Créer un répertoire vide,
-
Reproduire le référentiel source avec
svnsync
outil au référentiel cible sous le compte USERNAME . Pour plus de détails sur la synchronisation du référentiel avecsvnsync
s'il vous plaît se référer au chapitre SVNBook "de réplication du référentiel".
Contrairement à svndumpfilter
, svnsync
convertit automatiquement les opérations de svn copy
avec un chemin source illisible dans une extension normale, ce qui est utile si l'histoire implique des opérations de copie et doit encore filtrer. :)
Vous devez utiliser hotcopy pour sauvegarder le répertoire de dépôt. Ensuite, il devrait être une question de simple restauration du dépôt.