mercurial - suggestions - ¿Otra rama predeterminada?
tags for likes 2018 (4)
Tengo un repositorio de Mercurial en Bitbucket y en mi máquina local, ambos son espejos, hasta la fecha. Creé una rama de características, que se refleja en ambos repositorios. Hice todo mi trabajo en la rama de características.
La rama de características ahora está completa 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 designarlo como la nueva opción predeterminada.
No creo que quiera fusionarme ni debería? ¿Cómo puedo hacer esto para que tanto lo local como lo remoto no se confundan?
Desde Mercurial 2.4, puede crear un marcador llamado @
y Mercurial revisará esa revisión de clones nuevos.
Sin embargo, todavía intentaría seguir usando el default
como la rama donde se lleva a cabo el desarrollo principal. Hacerlo causará la menor cantidad de sorpresas para los desarrolladores que ya están acostumbrados a Mercurial: la wiki describe la forma estándar de usar sucursales en Mercurial.
Si sigue los consejos convencionales de usar el default
como la rama principal para el desarrollo, debe cerrar su rama de características antes de fusionarla:
$ 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 no ha realizado ningún trabajo en absoluto en la rama predeterminada desde que inició la rama de características, entonces esta combinación será trivial y no tendrá conflictos. De lo contrario tendrás que resolver los conflictos. Si está seguro de que quiere mantener todo en la rama de características, entonces puede hacer
$ hg merge --noninteractive --tool internal:local feature-branch
$ hg revert --all --rev feature-branch
en lugar de simplemente hg merge
arriba. Eso asegurará que la nueva confirmación en el default
vea exactamente como la última confirmación en feature-branch
.
Lo logré sin fusionar cerrando la rama por defecto.
En mi directorio de trabajo del repositorio de desarrollo:
$ hg update default
$ hg commit --close
entonces mi rama de desarrollo se convirtió en la nueva rama por defecto. Pero no conozco las reglas de por qué mi rama de desarrollo fue elegida como la nueva opción predeterminada. Creo que es porque fue mi consejo ? (o tal vez la última rama cambiada? (punta?))
También creo que hay que repetir eso la próxima vez. Porque creo que el nombre de mi rama elegido fue "sobrescrito" por el nombre ''predeterminado''.
Sería bueno tener nombre de rama.
dev-projectname-version.x = por defecto
Saludos
Quería hacer exactamente lo que describiste y buscó hasta encontrar una respuesta que use el comando revertir para hacer lo que describiste. Aquí está el código que utilicé:
hg revertir --todos --rev $ {1}
hg commit -m "Restaurando 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 de bash, pero funcionan bien por si mismas si quieres hacerlo manualmente.
Esto es útil si necesita agregar un hotfix a una sucursal de lanzamiento, pero necesita compilar desde el valor predeterminado (hasta que obtengamos las herramientas de CI correctas y podamos construir desde las sucursales y luego eliminemos también las sucursales de lanzamiento).
Simplemente fusionar feature-branch
en la default
luego cerrar feature-branch
$ hg checkout default
$ hg merge feature-branch
$ hg commit
$ hg checkout feature-branch
$ hg commit --close-branch
No hay una manera más limpia y sensata (que yo sepa) de "hacer que la feature-branch
la predeterminada".
Una cosa que no sería tan agradable, pero que podría hacer, es hacer un compromiso con el default
en la parte superior de feature-branch
de feature-branch
:
$ hg checkout feature-branch
$ hg branch default
$ hg commit
Pero esto dejaría dos cabezas en la rama default
, que no es óptima.