2010-11-23 8 views
3

J'ai créé un miroir Mercurial d'un référentiel SVN (en utilisant ce tutoriel: http://oreilly.com/opensource/excerpts/opensource-mercurial/migrating-to-mercurial.html). La synchronisation fonctionne très bien, sauf que j'ai remarqué qu'elle ne récupère pas un référentiel externe référencé dans le repo SVN principal ...Synchronisation de SVN à Mercurial en utilisant svnsync & hg convert - rate svn: externals?

J'aimerais idéalement pouvoir tout ramener à Mercurial (avec changesets si possible). Ce dont je ne suis pas sûr est: est le manque manquant une limitation de svnsync, ou une limitation de hg convert?

Y a-t-il un moyen de forcer la synchronisation de l'external dans le même repo de Mercurial? Je pense qu'une bonne solution serait de recommencer le processus de synchronisation, pour l'externe. Créez une fourche du miroir hg actuel et synchronisez l'externe dans la fourchette miroir hg. Le hic, c'est que le tronc de l'external est destiné à aller dans un sous-dossier du premier miroir, alors comment puis-je le répliquer avec convert? Je doute que je pourrais dire convertir à importer dans un sous-dossier ...

Répondre

3

est le manquant externe une limitation de svnsync ou une limitation de hg convertir?

svnsync est utilisé pour créer un miroir d'un référentiel SVN. Cela inclut toutes les propriétés svn:externals. Par conséquent, il doit être une limitation de hg convert. Notez qu'il n'est pas vraiment nécessaire de créer un miroir avec svnsync. L'article recommande cela uniquement parce qu'ayant une copie locale peut accélérer le processus de conversion.

Y a-t-il un moyen de forcer la synchronisation de l'external dans le même repo de Mercurial?

Il est courant qu'un référentiel SVN contienne plusieurs projets liés de manière lâche, chacun avec ses propres branches et balises. Mais Mercurial ne fonctionne pas de cette façon: lorsque vous branchez, vous branchez tout ce qui est dans le référentiel. Vous devez créer un dépôt Mercurial distinct pour chaque projet dans SVN qui a ses propres tronc/branches/tags. Cette approche différente est la plus probable pourquoi hg convert ignore les externes, même s'ils se trouvent dans le même référentiel SVN. Il y a un équivalent de svn:externals dans mercurial; ça s'appelle "sous-dépôts". Au lieu d'avoir une ou plusieurs propriétés svn:externals, vous avez un seul fichier .hgsub avec un contenu similaire à la racine de votre projet. Vous devez d'abord convertir chaque projet SVN en un référentiel mercurial séparé, puis les connecter avec des sous-dépôts. Voir le mercurial wiki page for subrepositories pour plus de détails.

+0

Merci pour la réponse Wim. Si je devais utiliser la fonction de sous-dépôt, serais-je toujours capable de garder chaque repo hg entièrement en synchronisation avec la contrepartie SVN? –

+1

@Jon: Je pense que ce ne serait pas un problème. Après avoir poussé les changements à SVN, vous auriez juste un fichier '.hgsub' supplémentaire pour chaque projet dans votre dépôt SVN, ce qui n'a pas de signification particulière pour SVN bien sûr. Mais je n'ai pas vraiment d'expérience avec l'utilisation de mercurial comme ça. –

+0

Merci, je vais essayer et voir ce que les pauses :-) –

Questions connexes