6
votes

Comment migrer une base de code d'un repo SVN à une autre histoire de préservation?

J'ai une succursale dans un repo SVN mal structuré qui doit être dépouillé et déplacé vers un autre référentiel SVN. (J'essaie de le nettoyer).

Si je fais un journal de code et non stop on copier / renommer Je peux voir tous les 3427 commettre que je me soucie de. Existe-t-il un moyen de jeter les révisions, à écrire quelques scripts majeurs?

Je suivrais les conseils dans Cette question mais cette branche a été déplacée partout et je voudrais préserver les mouvements également.


3 commentaires

J'ai posé des questions similaires et svndumpfilter était toujours la réponse standard. Êtes-vous sûr que ça ne va pas le couper pour vous?


Eh bien, je pourrais utiliser Svndumpfilter, mais je pense que je vais devoir faire au moins 9 chemin de chemin à des points dans la décharge. Je ne savais juste pas s'il y avait une solution automatisée. (Le repo est trop gâché pour utiliser git-svn).


Pourquoi ne pas importer les révisions comme - est et renommez-les à Subversion? Il n'y a pas besoin de réécrire l'histoire?


4 Réponses :


-2
votes

Vous devez utiliser HotCopy pour sauvegarder le répertoire du référentiel. Ensuite, il devrait s'agir simplement de restaurer simplement le référentiel.


2 commentaires

Je pense qu'il parle de décaper une structure très complexe (avec plusieurs mouvements à l'intérieur) d'un repo qui contient beaucoup plus.


Vous ne pouvez pas utiliser HotCopy pour cela, ce qui ne peut être utilisé que pour faire des copies complètes des référentiels



1
votes

Vous voudrez utiliser une combinaison de:

  1. Svnadmin Dump
  2. svndumpfilter
  3. SVNADMIN LOAD

    Si vous voulez faire toute la branche, vous n'avez peut-être même pas besoin de SvnDumpfilter. Mais si vous faites:

    http: / /svnbook.red-bean.com/nightly/fr/svn.reposadmin.maint.htm#svn.reposadmin.maint.filtering


0 commentaires

2
votes

Je suppose que cela pourrait être similaire à ce que @zacthompson (et @pekka) signifie: je pense svndumpfilter est votre ami.

De votre question, je pense que vous avez l'idée de faire ce qu'il est censé faire mais de lutter contre la copie / le déménagement de la branche sur la place? Une réponse à celle-ci peut être trouvée dans le précédent mentionné Documentation SVN , je crois:

Aussi, les chemins copiés peuvent vous donner des difficulté. Subversion prend en charge la copie opérations dans le référentiel, où un nouveau chemin est créé en copiant certains chemin déjà existant. C'est possible qu'à un moment de la vie de la vie de votre référentiel, vous pourriez avoir copié un fichier ou un répertoire de certains emplacement que svndumpfilter excluait, à un emplacement qu'il comprend. Faire les données de décharge autosuffisantes, svndumpfilter doit toujours montrer le ajout du nouveau chemin - y compris le Contenu de tous les fichiers créés par le Copier et ne pas représenter cet ajout comme copie d'une source qui ne va pas Existe dans vos données de dépotoir filtrées flux. Mais parce que la subversion Le format de dépotoir du référentiel ne montre que quoi a été changé dans chaque révision, la Contenu de la source de copie pourrait ne pas être facilement disponible. Si vous soupçonnez que vous avez des copies de ce genre Dans votre référentiel, vous voudrez peut-être Repenser votre ensemble d'inclus / exclu chemins, peut-être inclure les chemins qui a servi de sources de votre opérations de copie gênantes, aussi.

Signification: faire svndumpfilter Inclure Tous les chemins La branche jamais vécue à. Ou est-ce que je manque quelque chose?

Une autre possibilité pourrait être le svndumpfilter2 mentionné par @compie dans le fil que vous avez lié Bien que je pense que ce n'est même pas nécessaire (et je ne sais pas non plus @compie ou svndumpfilter2 < / code>).


2 commentaires

Je ne savais pas à Svndumpfilter2 mais cela semble être ce que je cherche. Je vais l'essayer et voir comment ça marche.


Je n'ai pas encore fini mon effort de migration (énorme repo 30k + commits) mais cette méthode semble prometteuse.



0
votes

Il y a une autre solution assez simple et résout le problème "préserver les mouvements" . Veuillez consulter le dernier paragraphe de l'entrée de la FAQ de Subversion Apache Comment puis-je supprimer complètement un fichier du référentiel Histoire? ". La solution ne s'appuie pas sur le svndumpfilter .

Vous pouvez effectuer les étapes suivantes:

  1. configure Autorisation basée sur le chemin Règles à Deny Lire l'accès pour un compte d'utilisateur sur le compte aux chemins du fichier ou un dossier que vous souhaitez supprimer de l'historique du référentiel.

    Veuillez noter le nom pluriel chemins . Le fichier ou le dossier que vous souhaitez vous débarrasser peut avoir des noms différents ou peut être situé dans différents endroits dans une histoire du référentiel. Veuillez considérer cela lors de la mise en place de règles de refuser.

  2. créer un référentiel vide,

  3. réplique le référentiel source avec svnsync outil sur le référentiel cible sous compte nom d'utilisateur . Pour plus de détails sur la synchronisation du référentiel avec svnsync Veuillez vous reporter au chapitre SVNBook " Réplication du référentiel ".

    Contrairement à svndumpfilter , svnsync traduit automatiquement Copie SVN Opérations avec un chemin source illisible dans des ajouts normaux, ce qui est utile si l'historique implique des opérations de copie et doit encore être filtré. :)


0 commentaires