2009-02-24 7 views
19

Je voudrais savoir comment puis-je définir deux référentiels pour mon exemplaire de travail. J'ai besoin d'un référentiel dans mon serveur, pour que je puisse entrer/sortir entre deux PC; J'ai besoin d'un autre dépôt dans mon PC local, de sorte que je peux voir le résultat de diff rapidement (mon serveur svn est sur un hôte partagé lent)SVN: une copie de travail, deux dépôts?

Comment puis-je faire cela?

+0

Ceci est utile pour les projets open source lors de la soumission d'un correctif, mais ne souhaitant pas attendre qu'il soit approuvé avant d'en créer un autre. – dbkk

+0

La plupart des projets utilisent aujourd'hui Git, ce que j'ai fait, cloné un dépôt GIT et Subversion'ed. Je suis capable de mettre à jour la copie de Git et de la garder à jour ainsi que de maintenir mes changements, avec moins de conflits. Je pensais que ça vous donnerait un pourboire! – asyncwait

+0

duplicata possible de [Puis-je avoir un projet dans deux référentiels SVN?] (Http://stackoverflow.com/questions/425975/can-i-have-one-project-in-two-svn-repositories) – JasonMArcher

Répondre

11

Jetez un oeil à repository replication.

Vous pouvez configurer un travail cron pour effectuer une synchronisation périodique d'un référentiel à l'autre. Mais vous devez vous assurer que les commits n'arrivent qu'à l'un des deux.

Si les validations se produisent dans les deux référentiels, peut-être un système de version distribué tel que git, Bazaar ou Mercurial est plus à votre disposition? Git, par exemple, vous permet même de tirer et de pousser directement vers un dépôt Subversion.

1

Si votre boîte locale est linux, vous pouvez créer une entrée crontab à svn update toutes les X minutes pour la synchroniser avec le serveur en arrière-plan. De là, vous auriez la copie la plus récente sur votre serveur svn local à diff.

7

Subversion n'utilise pas l'accès réseau pour son opération de comparaison. C'est l'un des grands avantages de Subversion par rapport à CVS. Donc, je ne suis pas sûr de savoir pourquoi vous rencontreriez ce problème spécifique.

Une alternative est d'utiliser Git et spécifiquement git-svn sur votre PC local. Vous obtenez une copie complète de l'historique complet du référentiel sur votre machine locale, avec la possibilité de comparer et d'afficher l'historique localement (avec les nombreuses autres fonctionnalités que Git vous donne). Lorsque cela est possible, j'utilise maintenant git-svn pour accéder aux dépôts Subversion.

+1

Il est seulement une opération locale de différencier la version locale de la copie de travail d'origine. Si vous différez des révisions précédentes, il s'agit d'une opération à distance. – Evan

+0

Accordé, local diffing est que vous faites 90% du temps, mais la question n'a pas précisé cela définitivement. – Evan

3

Si vous n'avez pas besoin d'utiliser SVN, il est préférable d'utiliser un système de contrôle de version distribué, tel que Mercurial ou Git. Chaque PC aura sa propre copie du référentiel, et les changements peuvent être synchronisés soit directement entre les PC ou via une autre copie sur un serveur central. Étant donné que chaque référentiel est stocké localement sur chaque PC, vous pouvez effectuer des opérations diff ou toute autre opération sans accès réseau.

1

Vous pouvez essayer d'utiliser svk comme client local au lieu de svn. Svk est un système de contrôle de version pseudo-distribué utilisant des dépôts svn.

Vous utiliseriez svk pour mettre en place un miroir du référentiel, le synchroniser, et vous pouvez changer le contenu de votre coeur, autant de révisions que vous voulez et tout est local.

Vous pouvez également créer une branche du référentiel en miroir et l'utiliser comme checkout, puis vos commits sont également une opération locale seulement, et quand vous êtes prêt avec un lot de validations, vous les poussez sur le svn distant repository (et récupère les autres utilisateurs, comme une commande svn update).

Deux mises en garde:

  1. Préparez-vous à utiliser la ligne de commande. À ma connaissance, il n'y a pas de TortoiseSVK ou autre interface graphique.
  2. J'ai seulement utilisé svk sur linux. Si vous utilisez Windows, je ne suis pas sûr de la qualité du client.

Autre que cela, je seconde en utilisant bazaar, mercurial ou git comme d'autres l'ont suggéré. Bazar est probablement le plus facile à utiliser, et a une interface graphique TortoiseBzr qui, selon un de mes collègues, est assez solide.

Git est le plus dur à utiliser. C'est comme le couteau de l'armée suisse qui est presque plus large que longtemps, avec tous les petits gadgets et les pères-papas dedans et qui pendent, avec les ressorts si serrés que vous coupez occasionnellement un doigt en essayant de prendre une lame en dehors.

+0

+ 1 analogie couteau suisse –

0

Je ne suis pas convaincu que la réplication de référentiel standard vous donnera ce que vous voulez. Avec cette configuration, un proxy est toujours en lecture seule, et je ne pense pas que ce soit le cas dans votre situation.

Vous devriez faire le svn switch --relocate pour changer le référentiel que vous regardez juste avant l'enregistrement. Assez sujet à erreur. Ce que vous recherchez est un write through proxy. Si vous configurez ceci avec apache et mod_svn_dav sur votre machine locale, vous aurez un référentiel local qui reçoit toutes les mises à jour et que vous pouvez facilement comparer et contre vérifier, mais pour lequel toutes les écritures remontent à la réalité. référentiel que tout le monde utilise et obtenir des mises à jour.

0

Le résultat de svn diff ne dépend pas de la vitesse de votre connexion au serveur; c'est une opération entièrement locale. SVN n'est pas intrinsèquement adapté à de tels cas d'utilisation.

1

Vous devrez modifier les choses ici et là (comme écrire crons). Si vous voulez quelque chose qui fonctionne hors de la boîte pour convenir à de tels cas d'utilisation, essayez GIT.

Questions connexes