2010-02-08 15 views
4

J'ai donc mon dépôt subversion stocké sur un nuage (par exemple code.google.com) mais pour diverses raisons, je dois rendre mon code non public.Subversion: Y a-t-il quelque chose de plus rapide que "svnsync"?

j'ai décidé que je devais télécharger l'ensemble du référentiel et migrer vers mon propre serveur svn.

donc je suis allé sur l'utilisation:

svnsync init DEST SRC 
svnsync sync DEST 

Et il a fallu environ 0,5 seconde pour chaque révision de la pension!

Heureusement, ma pension n'avait comme 200 révisions ... donc quelques minutes à attendre. Mais qu'en est-il des projets matures qui ont 200 000 ou 2 000 000 révisions!

... 2E6 * 0,5/60/60/24 ~ 11 jours!


Y at-il plus rapide que « svnsync » pour télécharger votre repo d'un nuage?

+3

Ma réponse sarcastique est de dire "git est plus rapide" (parce qu'il l'est). Mais vous verrez probablement aussi de meilleures vitesses en utilisant "svnadmin dump" et "svnadmin load". –

+1

Comment faites-vous svnadmin dump sur quelque chose comme code.google.com/? –

Répondre

1

Eh bien, vous pouvez évidemment sauvegarder vous-même sur le serveur, puis zip et télécharger. Ou vous pourriez simplement ne pas télécharger tout l'historique.

Mais quel est le point de cette question? C'est un peu académique, car votre problème est résolu.

+2

"le compresser et le télécharger". C'est en effet le moyen le plus rapide, mais cela ne peut pas être fait avec la commande subversion (sur les protocoles réseau Subversion), et ce n'est probablement pas possible avec Google Code. – Thilo

+5

Une petite curiosité académique ne fait jamais mal. ;-) –

1

J'ai ce même problème dans ma collection de référentiels qui ont des centaines de milliers de révisions. Voici comment je contourner le problème:

  1. Créer un référentiel vide sur le miroir.
  2. Créez un fichier de vidage gziped de mon référentiel. (Mon système de sauvegarde fait déjà) (note: cette étape a pris la nuit pour envoyer mon dépôt géant à travers continent)
  3. scp (ou votre technique de copie de fichiers distant favori), le fichier de vidage sur le serveur miroir.
  4. Chargez le référentiel, en vous assurant de spécifier --force-uuid.
  5. Mettre en place les revprops sur la révision 0. Je viens de prendre un dépôt blanc normalement configuré et regarda son tour 0.

Vous êtes maintenant prêt à fonctionner svnsync sur votre serveur maître. Cela continuera à partir de l'endroit où votre décharge s'est arrêté.

+0

En outre, j'utilise la technique du miroir write-thru pour l'utiliser comme un miroir local pour mes bureaux distants. J'en ai aussi un dans le bureau local en tant que «sauvegarde d'urgence». –

0

Dans le cas de l'OP, où vous ne disposez pas d'accès à la console au serveur svn, svnsync (qui est essentiellement svn checkout d'URL 1 combiné avec svn commit à l'URL 2) est aussi bon que vous allez obtenir.

Mais si vous avez accès au serveur, il existe des moyens plus rapides que svnsync. Une bonne méthode pour construire un miroir est d'utiliser svnadmin hotcopy pour faire la copie initiale du référentiel, puis utilisez l'option svnsync init --allow-non-emptyadded in subversion 1.7 pour le transformer en miroir. Cela vous donne également une sauvegarde de vos hooks, etc. que svnsync ne fera pas autrement.

Notez que vous voulez déplacer votre répertoire hooks-hooks-original ou quelque chose afin qu'ils ne seront pas utilisés par le miroir --- surtout si vous avez un crochet post-commit sur le repo original qui appelle svnsync sync!