Bonjour,
Pour un projet à la fac, j'ai mis en place un serveur svn sur une de mes machines perso. Pour la sécurité, j'ai mis en place une réplication vers une autre machine.
Pour ce faire j'ai suivi les instructions ici : http://svnbook.red-bean.com/en/1.4/s...nt.replication
En résumé j'ai fait
svnsync init svn://backupserv/projet svn://serv/projet
svnsync sync svn://backupserv/projet
(La deuxième dans un hook post-commit du serveur principal)
J'ai, aussi changé l'UUID du réplicat de façon à pouvoir basculer les working copie sur le serveur secondaire en cas de besoin. (Le basculement pourrait se faire manuellement avec la commande switch, mais ça marche aussi en jouant sur les dns.)
Bien entendu ça a pas loupé, le serveur principal a foiré (certainement xorg qui s'est mis à pomper tout le cpu). J'ai donc basculé le dns vers le serveur secondaire et autorisé les accès pour les gens de mon groupe.
Jusqu'ici, pas de problème, on a pu travailler sur le projet comme si rien ne s'était passé.
Simplement, maintenant que j'ai le serveur principal entre les mains (ou sous les pieds ^^) je voudrai rebasculer sur le serveur principal. Mais des commits ont été faits sur le réplicat, il faudrait donc réimporter les commits vers le serveur principal.
Les solutions qui ne marchent pas :
- tout ce qui consiste à toucher aux fichiers du repository (de toutes façons pour des révisions identiques les deux repository sont différents)
- un svnsync vers le serveur principal. Si vous relisez les commandes pour maintenir le réplicat à jour, vous verrez que la réplication est unidirectionnelle
- tout ce qui perdrait l'historique. Genre faire un diff entre le HEAD du principal et le HEAD du réplicat pour réinjecter les modifications.
Ou pire : faire un update sur le réplicat pour faire un commit sur le principal. (Ça ne marchera pas ! Le client svn sera simplement perdu dans les numéros de révision en voyant BASE > HEAD)
Je pourrai, bien entendu détruire le repository du serveur principal, et le recréer en tant que réplicat, puis détruire le repository du serveur secondaire, pour y recréer le réplicat qui pourra être updaté par les hook du serveur principal.
Mais cette solution est légèrement tordue, et on aurait le serveur principal qui serait une réplique du serveur vers lequel il doit se répliquer. Gné ?
Il doit y avoir plus simple.
Partager