Domanda

Ho un repository subversion con la seguente disposizione:

svnrepo/projectA/trunk
svnrepo/projectA/tags
svnrepo/projectA/branches
svnrepo/projectB/trunk
svnrepo/projectB/tags
svnrepo/projectB/branches


che vorrei passare a un repo mercuriale con un layout rivisto:
hgrepo / projectA
hgrepo / ProjectB

Qual è il modo migliore di fare questo? Alcuni dei miei pensieri sono:

Opzione 1

Riorganizza i percorsi di eversione (utilizzando svn move) in un formato intermedio:

svnrepo/trunk/projectA
svnrepo/trunk/projectB
svnrepo/tags/projectA
svnrepo/tags/projectB
svnrepo/branches/projectA
svnrepo/branches/projectB

poi hg convert sul svnrepo / trunk. Sarà questo confondere hg importazione?

2 hg convert ciascuno dei progetti / tronco in pronti contro termine hg separati. Poi unirli in un unico repository hg (usando hg init, hg pull -f projectA, ecc). Penso che questo perderà i nomi dei rami e tag sul primo progetto importato.

È stato utile?

Soluzione

In Mercurial, memorizzazione codebases indipendenti nella stessa repository è una cattiva idea perché sarà

  • È significativo che complicare la fusione. Unisce dipenderà modifiche apportate al tutti progetti, piuttosto che solo il progetto si sta cercando di unire.
  • stoccaggio Causa e nella verifica in testa - Mercurial, per quanto ne so, non supporta check-out solo sottodirectory di un repository. Dovreste ramo tutti i progetti in una sola volta.

La soluzione è quella di convertire il repository Subversion singolo in più repository Mercurial. La maggior parte degli strumenti di conversione supportano questa.

Altri suggerimenti

Ogni progetto dovrebbe essere nel proprio repository Hg (per essere in grado di ottenere o tag solo un progetto specifico).

Ricordate che la directory che si vede in Subversion (tronco, tag, rami) non esiste in nessun (D) VCS moderni, dove rami e tag sono primo cittadino di classe (vale a dire dei meta-dati gestito direttamente dallo strumento), come opposti come semplice directory risultante da un copia a buon mercato (in SVN).

Ciò significa che quando si converte un repository SVN, non è necessario memorizzare direttamente qualsiasi "tronco", "tag" o directory "rami" nella storia del repo Hg.

Si dovrebbe piuttosto utilizzare un come hgsubversion per l'importazione il vostro repo SVN (come solo "repo / projectA") in un repo Hg dedicato al projectA. manterrà i tag e le filiali del progetto orignal SVN e convertirli in oggetti Hg.
Da relativa documentazione :

  

Tutti gli aggiornamenti che utilizzano hgpullsvn sono realizzati nel ramo chiamato dalla ultimo componente del URL SVN (ad esempio, se l'URL SVN è svn://server/myproj/branches/feature-ZZZ, hgpullsvn sarà creare e utilizzare il ramo denominato 'feature-ZZZ')


Se non si vuole "convertire", ma "la sincronizzazione", tonfa raccomanda hgsubversion , sebbene "non è in uno stato di flusso a causa di refactoring pesante":

  

In questo momento è non pronto per l'uso in produzione. Si deve usare solo questo se si è pronti per incidere su di esso, e fare immersioni nelle parti interne di Mercurial e / o Subversion.

Dal hgsvn permettere anche qualche sincronizzazione attraverso hgpushsvn e hgpullsvn ... Vorrei restare con hgsvn per ora.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top