2011-03-24 23 views
30

Tengo un repositorio Mercurial en Bitbucket y en mi máquina local, ambos son espejos, actualizados. Creé una rama de características, que se refleja en ambos repositorios. Hice todo mi trabajo en la rama de características.¿Hacer otra rama predeterminada?

La rama de características se ha completado y ahora quiero que sea la predeterminada para el repositorio principal y mi copia local. Realmente no me importa la rama predeterminada, se ha trabajado lo suficiente en la rama de características que todo lo que quiero hacer es designarla como la nueva predeterminada.

No creo que quiera fusionar ni debería? ¿Cómo puedo hacer esto para que tanto locales como remotos no se confundan?

+1

Cuando comencé a trabajar con Mercurial, tuve intentos similares en el manejo de nombres de sucursales pero [se me aconsejó que lo hiciera mejor] (http://stackoverflow.com/questions/1405604/managing-release-branches-in-mercurial). –

Respuesta

24

Sólo fusionar feature-branch en default continuación, cierre feature-branch:

$ hg checkout default 
$ hg merge feature-branch 
$ hg commit 
$ hg checkout feature-branch 
$ hg commit --close-branch 

No hay más manera limpia y sensible (que yo sepa) para “hacer feature-branch el valor por defecto”.

Una cosa que no sería tan agradable, pero se puede hacer, es hacer un commit a default en la parte superior de feature-branch:

$ hg checkout feature-branch 
$ hg branch default 
$ hg commit 

Pero esto dejaría dos cabezas en la default rama, la cual es subóptimo

+0

Estaba esperando algo más como cambiar y cambiar el nombre, pero si es así, que así sea. Gracias por la respuesta rápida .. – dartdog

7

Tuve éxito sin fusionarme al cerrar la rama predeterminada.

en mi directorio de trabajo repositorio de desarrollo:

$ hg update default 

$ hg commit --close

entonces mi rama de desarrollo se convirtió en la nueva rama por defecto. Pero no sé las reglas de por qué mi rama de desarrollo fue elegida como el nuevo valor predeterminado. creo que es porque era mi punta ? (¿o quizás la última rama modificada? (¿Sugerencia?))

También creo que debes repetirlo la próxima vez. Porque creo que mi nombre de rama elegido fue "sobrescrito" por el nombre 'predeterminado'.

Sería bueno tener el nombre de la sucursal.

dev-projectname-version.x = por defecto

respecto

+0

otro buen enfoque ... – dartdog

+0

Awesome answer ... –

17

Desde Mercurial 2.4, puede crear un marcador llamado @ y Mercurial pago y envío que la revisión nuevos clones.

Sin embargo, seguiría tratando de usar default como la rama donde tiene lugar el desarrollo principal. Si lo hace, causará la menor cantidad de sorpresa para los desarrolladores que ya están acostumbrados a Mercurial: el wiki describes the standard way to use branches en Mercurial.

Si usted sigue el consejo convencional de utilizar default como la rama principal de desarrollo, entonces usted debe cerrar su rama de la característica antes de combinarlo vuelta:

$ hg update feature-branch 
$ hg commit --close-branch -m "Feature done, merging into default branch" 
$ hg update default 
$ hg merge feature-branch 
$ hg commit 

Si usted no ha hecho ningún trabajo en absoluto en la rama predeterminada desde que inició la rama de características, esta fusión será trivial y no tendrá conflictos. De lo contrario, tendrás que resolver conflictos. Si está seguro de que desea mantener todo, desde la rama de la característica, entonces usted puede hacer

$ hg merge --noninteractive --tool internal:local feature-branch 
$ hg revert --all --rev feature-branch 

en lugar de sólo hg merge anteriormente. Eso asegurará que la confirmación nueva en default se vea exactamente como la última confirmación en feature-branch.

+0

agregar marcador no funcionará: "abortar: un marcador no puede tener el nombre de una rama existente", incluso si la rama está cerrada (hg 2.7 .2) – bartekbrak

+0

@ user35186: Gracias por el aviso. Supongo que esta restricción se agregó más tarde. Afortunadamente, también se agregó otro mecanismo más adelante: Mercurial ahora comprobará automáticamente el marcador '@' en clones nuevos. –

1

Quería hacer exactamente lo que describía y buscar hasta que encontré una respuesta que utiliza el comando de revertir para hacer exactamente lo que usted describe. Aquí está el código que utilicé:

hg volver --all --rev $ {1}

hg commit -m "Restauración de la rama $ {1} como predeterminado"

donde $ {1} es el número de la revisión o el nombre de la rama. Estas dos líneas son en realidad parte de un script bash, pero funcionan bien por sí mismas si quieres hacerlo manualmente.

Esto es útil si necesita agregar una corrección urgente a una rama de versión, pero necesita compilarla de manera predeterminada (hasta que tengamos nuestras herramientas de CI correctas y capaces de compilar desde sucursales y eliminar ramas de versión). .

Cuestiones relacionadas