2008-09-27 10 views
57

Mon entreprise a une filiale avec une connexion Internet lente. Nos développeurs souffrent d'interagir avec notre serveur central Subversion. Est-il possible de configurer un esclave/miroir pour eux? Ils interagiraient localement avec le serveur et toutes les validations seraient automatiquement synchronisées avec le serveur maître.Comment synchroniser deux dépôts Subversion?

Cela devrait fonctionner le plus clairement possible pour les développeurs. L'utilisabilité est un must.

S'il vous plaît, pas de suggestions pour changer notre système de contrôle de version.

+0

Je suis sceptique comment peut mandatement améliorer les choses. Il est possible qu'un commit prenne moins de temps pour le POV de l'utilisateur, mais les données doivent encore être transmises au master, et cela prend toujours la même quantité de bande passante réseau. Ainsi, la mise à jour du maître est tout aussi lente, même si elle semble plus rapide pour l'utilisateur. En raison de ce comportement asynchrone, le maître peut commencer à être à la traîne. – aseq

Répondre

27

Subversion 1.5 a introduit la prise en charge du proxy lorsque vous utilisez http pour héberger votre référentiel. Les développeurs peuvent extraire leurs copies de travail de l'esclave. Ensuite, toutes les opérations en lecture seule (diff, log, mise à jour, etc.) utiliseront l'esclave. Lors de la validation, l'esclave transmet de manière transparente toute l'opération d'écriture au maître.

+1

BTW , Je suis dans un autre travail et je n'utilise même plus Subversion. J'ai implémenté avec succès la solution proxy. Argh, il n'est pas facile de configurer Apache et Subversion dans Windows. Le plus gros problème était quand une panne s'est produite pendant la synchronisation. La solution consistait à avoir un script de démarrage à nettoyer. Maintenant, une personne non technique peut simplement redémarrer la machine et tout fonctionne à nouveau. – neves

+0

Il y a eu ou il y a des bogues dans lesquels svn proxying ne fonctionne pas (bien). C'est la raison pour laquelle je ne l'ai pas encore fait fonctionner avec ma configuration. Voir par exemple http://subversion.tigris.org/issues/show_bug.cgi?id=3275 http://subversion.tigris.org/issues/show_bug.cgi?id=3445 ce dernier est toujours ouvert. – aseq

6

Vous devriez essayer The SVK version control system

SVK est un système de contrôle de version décentralisée construite avec le système de fichiers Subversion robuste. Il prend en charge la mise en miroir du référentiel, l'opération déconnectée, la fusion sensible à l'historique et s'intègre à d'autres systèmes de contrôle de version, ainsi qu'aux outils de fusion visuelle les plus courants.

Sur ce lien il y a texte sur Using SVK to Synchronize SVN Repositories

49

Il est possible, mais pas nécessairement simple: le problème que vous essayez de résoudre est dangereusement proche de la mise en place d'un environnement de développement distribué qui est pas exactement ce que SVN est conçu pour.

La façon miroir SVN

Vous pouvez utiliser svn mirror comme expliqué dans la documentation du livre SVN pour créer un miroir en lecture seule de votre référentiel maître. Vos développeurs interagissent chacun avec le miroir le plus proche d'eux. Cependant, les utilisateurs du référentiel esclave devront utiliser

svn switch master_url --relocate

avant de pouvoir engager et ils devront se rappeler de déménager en arrière sur l'esclave une fois qu'ils sont faits. Cela pourrait être automatisé en utilisant un script wrapper autour des commandes de modification du référentiel sur SVN si vous utilisez le client en ligne de commande. Gardez à l'esprit que l'opération de relocalisation tout en accélérant ajoute un peu de frais généraux. (Et faites attention à dupliquer le dépôt UUID -. Voir the SVN documentation)

[Modifier - Vérification de la documentation, il semble TortoiseSVN que vous pouvez avoir TortoiseSVN execute hook scripts client side. Vous pourrez peut-être créer un script de pré/post-commit à ce stade. Soit cela ou essayez de voir si vous pouvez utiliser le TortoiseSVN automation interface pour le faire].

La façon SVK

svk est un ensemble de scripts Perl qui émulent un service de mise en miroir répartis sur SVN. Vous pouvez le configurer pour que la branche locale (le miroir) soit partagée par plusieurs développeurs. Ensuite, l'utilisation de base pour les développeurs sera complètement transparente. Vous devrez utiliser le client svk pour la sélection de cerises, la fusion et le starmerging. C'est faisable si vous pouvez obtenir votre tête autour des concepts distribués.

La façon git-svn

Bien que je jamais utilisé moi-même, vous pourriez aussi avoir les développeurs distants utilisent git localement et utiliser la passerelle git-svn pour la synchronisation.

Derniers mots

Tout dépend de votre environnement de développement et le niveau d'intégration dont vous avez besoin. En fonction de votre IDE (et si vous pouvez changer SCM), vous pouvez jeter un oeil à d'autres SCM entièrement distribués (pensez Mercurial/Bazaar/Git/...) qui prennent en charge le développement distribué hors de la boîte.

+0

Serait-il possible de créer un script client TortoiseSVN pour effectuer automatiquement cette relocalisation? – neves

+4

Cette réponse a plus de voix que celle que j'ai choisie. Je pense que la solution de svnsync est meilleure parce que les commits se produisent de manière transparente sur le serveur. Pas besoin de déménager. Grande convivialité. Les utilisateurs finissent par trouver un message d'erreur bizarre lorsque le miroir n'est pas complètement synchronisé. Habituellement, ils doivent juste attendre quelques minutes et tout va bien. – neves

+0

Lien vers le chapitre de svn redbook documentant la configuration du proxy en écriture: http://svnbook.red-bean.com/fr/1.7/svn.serverconfig.httpd.html#svn.serverconfig.httpd.extra.writethruproxy –

2

Si l'un des référentiels est entièrement en lecture seule, vous pouvez utiliser 'svnsync' pour le mettre à jour avec le référentiel maître. Cet outil est souvent utilisé en combinaison avec le support proxy pour créer une configuration d'esclave maître.

E.g. Apache fait cela pour refléter leur dépôt vers différents continents. Le référentiel principal est situé aux États-Unis, mais si j'accède au référentiel depuis l'UE, j'obtiens un miroir local qui fonctionne aussi bien que le serveur maître.

1

Il existe une solution commerciale qui offre une véritable réplication active-active (non-esclave maître) des dépôts Subversion si vous avez besoin de performance et de sécurité des données au-delà de ce que svnsync fournit appelé "Subversion MultiSite".

Disclaimer: Je travaille pour la société qui rend cette solution

1

VisualSVN serveur de Multisite Repository Replication a été conçu pour ce cas.

Vous pouvez conserver le référentiel maître dans votre bureau principal et configurer plusieurs référentiels esclaves inscriptibles aux emplacements distants.

Cela devrait fonctionner le plus clairement possible pour les développeurs. La convivialité est un must.

  • La réplication entre les esclaves et le maître est transparent et automatique,

  • Chaque référentiel maître et l'esclave est un dépôt Subversion inscriptible du point de vue de l'utilisateur,

  • Works OUT- de la boîte et peut être configuré en quelques clics via la console MMC VisualSVN Server Manager.

VisualSVNServerManagerConsoleMultisite

+4

Le produit est joli. Vous venez d'oublier de dire que cela coûte mille dollars. – neves

+2

En outre, à la fois miroir et esclave doit Visual SVN serveur. – majkinetor

Questions connexes