2011-01-20 5 views
5

Ho un repository Mercurial centrale contenente una cronologia clonata da un repository SVN utilizzando hgsubversion. Ho richiamato i commit aggiuntivi apportati al repository SVN poiché il repository hg originale è stato clonato; questi sono attualmente nel ramo predefinito.Utilizzo di Mercurial, come si ottengono le modifiche dall'impostazione predefinita in un ramo denominato?

Ho anche un ramo denominato. Ho clonato questo ramo (usando hg clone -b mybranch) sul mio sistema locale. Ora voglio prendere le modifiche che esistono solo in modo predefinito e renderle disponibili nel mio ramo nominato. Il modo ovvio che vedo per farlo è quello di fare un hg update mybranch sul repository, quindi hg merge default e commit. Questo sembra pericoloso: se mi dimentico di aggiornare di nuovo al valore predefinito dopo aver terminato, tutte le future estrazioni da SVN attiveranno le modifiche in mybranch.

Ho anche considerato che forse non avrei dovuto specificato mybranch quando ho clonato il repo, ma clonato l'intero pronti contro termine e appena aggiornato a mybranch localmente. In questo modo, posso inserire le modifiche di default sul mio clone locale e fare l'unione lì.

Qual è la risposta giusta qui? Fatelo sul repository condiviso e state attenti? Clona tutto e gestisci i rami localmente? O c'è una soluzione più semplice che mi manca?

+1

L'unione sembra perfetta, non ho proprio il problema. * hgsubversion * sembra essere a conoscenza dei rami SVN, quindi quando si tira, dovrebbe mettere * SVN-trunk * cambia in * default * e * SVN-mybranch * nel proprio ramo * mybranch *. Se si uniscono e rimangono su * mybranch *, la punta di * mybranch * cambia davvero se il lato remoto ha solo cambi di linea? Il pull dovrebbe funzionare indipendentemente dalla revisione della tua copia di lavoro. –

+0

La mia preoccupazione riguardava le modifiche dirette all'archivio principale e i rischi associati a ciò. Naturalmente, nel mondo DVCS, tutti i repository sono essenzialmente uguali, quindi è probabilmente solo il mio bias VCS client-server. –

risposta

6

In generale con Mercurial, ogni volta che faccio qualcosa che penso possa causare problemi, clonato il repository e provalo là fuori. Quindi posso scegliere di reinserire tali modifiche o eseguire l'azione sul repository reale. In entrambi i casi ho la possibilità di fallire e non causare alcun danno. I cloni possono essere gettati via, non è necessario tenerli in giro se si fa incasinare.

+1

Questo è un buon punto, ed è la risposta che mi stavo inclinando verso lo stesso. Volevo solo assicurarmi che non ci fossero alcune funzionalità di hg che mi mancavano, e questo sembra improbabile, dato il tasso di risposta simile a quello di Firehose alla maggior parte delle domande SO che ho postato. –

1

Fatelo nel repository condiviso e fate attenzione. Oppure clonare l'intero repository condiviso, fare l'unione lì e quindi passare al clone di solo ramo.