2012-10-22 4 views
7

Je dois travailler sur deux dépôts et je veux déplacer un répertoire avec du code entre les deux en gardant l'historique de révision.SVN Déplacez le code avec l'historique entre deux dépôts

J'ai lu quelques questions ici sur SO, mais je ne sais toujours pas où aller. Nos dépôts sont HUGE (fichiers (orkingcopy) ne comprenant pas les révisions> plusieurs Go), puisque tout est archivé (code + designdata + ...).

Les solutions que je l'ai vu à ce jour sont:

  1. svnadmin dump + filtre + importation: pas une option en raison de la taille du dépôt
  2. svnsync: Nous avons déjà données dans le deuxième dépôt (les dépôts sont déjà énormes, je ne pense pas que les fusionner est une bonne idée, en plus de décider que ce n'est pas mon travail), et d'après ce que j'ai compris, cela nécessite que le deuxième dépôt soit vide.
  3. Third Party Solution: se bloque régulièrement, car il ne peut pas supprimer un fichier parce que « un autre as de traiter le fichier ouvert » (enevthough i peut supprimer le fichier via l'os, et il est créé par le script)

Existe-t-il d'autres solutions, des approches à cet égard ou est-ce qu'il me manque quelque chose à propos de l'une des solutions?

+1

Pourquoi la première option est-elle un problème? Vous pouvez passer le vidage à travers un filtre sans enregistrer dans un fichier. –

+0

@DmitryPavlenko: étant donné que le dépôt est environ 20 Go vérifié et que les numéros de révision sont proches de 6 chiffres (112 xxx) pour le moment, le vidage doit être considérablement plus important. Le vidage du référentiel complet pour déplacer un répertoire de code d'une taille de quelques Mo semble être trop lourd. Cela met beaucoup de stress inutile sur le système (Vérifiez chaque révision/vidage => "copie" 200G ou beaucoup plus (doit vérifier la taille de repro) => exécuter le filtre sur 200G de données.Si vous considérez que cela va fonctionner sur un réseau qui est déjà sous une utilisation intensive, il inhibe notre flux de travail – ted

+0

@DmitryPavlenko: En bref, je ne suis pas sûr d'avoir 200G à ma disposition (pas un administrateur juste un utilisateur), l'impact du réseau et les frais généraux. Vous voulez continuer à travailler pendant que cette quantité de données est déplacée Mais que fait svn dump s'il y a des accès au référentiel dans le même temps? – ted

Répondre

7

Le fichier svnadmin dump + filter + import fonctionne même avec de grands référentiels.

Il y a certaines choses que vous devez faire pour la performance. Découvrez quelle révision a été la première à créer le dossier que vous souhaitez copier. Ensuite, vérifiez le journal pour trouver la dernière révision qui a modifié quelque chose dans ce dossier. Vous avez seulement besoin de vider les révisions dans cette plage.

Utilisez l'indicateur --incremental pour svndump. N'essayez pas d'utiliser le drapeau Deltas avec SVN Dump. SvnDumpFilter ne fonctionnera pas sur les dumps créés avec "deltas". N'essayez pas d'enregistrer l'énorme vidage dans un fichier et exécutez SvnDumpFilter sur le fichier. Au lieu de le faire en une seule étape avec un tuyau.

Si votre révision de départ était 10000 et votre révision de fin était 20 000 et le chemin que vous souhaitez copier est des projets/sources, la commande devrait ressembler à

svnadmin dump --incremental -r10000:20000 YourRepoPath | svndumpfilter include projects/source --drop-empty-revs --renumber-revs > source.dump 

Suivi par une commande de charge svnadmin pour charger la décharge dans votre autre repo.

+0

Puis-je le faire avec le référentiel en ligne? Après tout, je limite la dernière révision. – ted

+0

Oui, vous pouvez effectuer le vidage et charger avec le référentiel en ligne. – maddoxej

Questions connexes