Comment mettre à niveau le système de fichiers de subversion v2 vers v3 FSFS

9

Premièrement, j'essaie de réintégrer une branche avec le tronc (en utilisant TortoiseSVN) mais je reçois le message d'erreur "L'interrogation des informations de fusion nécessite la version 3 du schéma du système de fichiers FSFS; le système de fichiers E: / MyRepository / utilise uniquement la version 2".

N'était-il vraiment pas possible de réintégrer des branches dans des versions antérieures de subversion? Ou existe-t-il une autre façon de procéder?

Quoi qu'il en soit, comment puis-je mettre à niveau le système de fichiers de la version 2 à la version 3?

cbp
la source

Réponses:

6

Vous n'avez pas spécifié la version de Subversion que votre serveur exécute. Mais d'après le message que vous avez fourni dans la question, il s'agit probablement d'une version 1.4.x ou plus ancienne. Je ne me souviens pas s'il y avait une commande de mise à niveau fournie ou non pour la conversion de 1.4.x à 1.5.x, mais le moyen sûr de fichier pour obtenir votre référentiel de la version 2 à la version est de vider et de charger. Mais cela n'a pas beaucoup d'importance, vous voudrez quand même installer 1.6.x pour utiliser la dernière version. Voici donc les étapes à suivre:

  • Passez à Subversion 1.6.x si ce n'est déjà fait
  • Vider votre référentiel existant à l'aide de svnadmin dump
  • Créez un nouveau référentiel, appelez-le _nouveau
  • Chargez votre nouveau dépôt avec le vidage de l'ancien en utilisant svnadmin load
  • Copiez le fichier uuid de l'ancien référentiel vers le nouveau référentiel
  • renommer l'ancien référentiel en _old
  • renommer le nouveau référentiel en

Voir aussi la FAQ Subversion http://subversion.apache.org/faq.html#dumpload pour un exemple concret.

Cela devrait vous permettre de prendre soin de vous et le fichier uuid empêchera vos clients de paniquer. Faites une mise à jour svn pour en être sûr.

jgifford25
la source
2
du svnadmin help loadmessage: --force-uuid : set repos UUID to that found in stream, if any. En bref: pas besoin de jouer avec des fichiers
Hubert Kario
@Hubert Kario: Oui, la ligne de commande a cette option. Mais tous les clients GUI ne le font pas. Et, si vous pouvez le faire côté serveur, cela facilite la tâche des utilisateurs. Mais je garderai cet interrupteur à l'esprit la prochaine fois que je rencontrerai ce problème. Merci pour le conseil!
jgifford25
Lors de la création de votre nouveau référentiel, veillez à définir les autorisations. Par exemple, si vous accédez au référentiel via apache mod_svn, apache s'exécute sous l'utilisateur "www", le groupe "www" et vous êtes connecté en tant que "fred", vous aurez probablement besoin de quelque chose comme: sudo chown -R fred:www myrepositorysuivi d'un sudo chmod g+wto myrepository/db/repcache.dbetmyrepository/db/uuid
xgretsch
8

Le vidage / chargement n'est pas requis pour la mise à niveau des référentiels Subversion. Utilisez la commande de mise à niveau svnadmin:

svnadmin upgrade <path-to-repos>

REMARQUE: la mise à niveau de svnadmin "n'effectue que la quantité minimale de travail nécessaire pour accomplir cela tout en conservant l'intégrité du référentiel. Alors qu'un vidage et une charge ultérieure garantissent l'état de référentiel le plus optimisé, la mise à niveau de svnadmin ne le fait pas." - voir aussi la documentation de mise à niveau svnadmin

Ivan Zhakov
la source
1
REMARQUE, cependant, que cela "n'exécute que la quantité minimale de travail nécessaire pour accomplir cela tout en conservant l'intégrité du référentiel. Alors qu'un vidage et une charge ultérieure garantissent l'état de référentiel le plus optimisé, la mise à niveau svnadmin ne le fait pas." - voir aussi svnbook.red-bean.com/en/1.7/svn.ref.svnadmin.c.upgrade.html
Jörg
1
Notez également que «vous devez toujours sauvegarder votre référentiel avant» en utilisant la mise à niveau svnadmin, alors qu'avec dump / load, vous avez implicitement votre sauvegarde.
Jörg
5

Ivan a un bon conseil qui fonctionne, je l'ai essayé et c'est très simple.

svnadmin upgrade <path-to-repos>

Un exemple que j'ai manqué dans Ivans qui peut être utile aux autres est:

Ex.

<path-to-repos> = C:\repos\theRepo
(ie. NOT C:\repos\theRepo\db)

Ne pointez pas svnadmin vers le répertoire db, mais vers le répertoire contenant le répertoire db.

Par G
la source