mercurial - ¿Cómo solo empujar a una rama en Hg?
merge branch (3)
Tengo un repositorio de Hg con 3 sucursales, pero dos de ellas están inactivas (ya que las he fusionado en mi rama predeterminada). hg heads muestra 3 cabezas, una para cada rama, aunque hg ramas muestra 2 de esas ramas como ''inactivas''.
Cuando trato de enviar mi rama predeterminada (usando hg push --branch default http: // ... ) a otro repositorio, la combinación se cancela con el mensaje "abortar: push crea nuevas sucursales remotas:!"
Desde las páginas de manual de Hg push, "De forma predeterminada, push no permitirá la creación de nuevos jefes en el destino, ya que múltiples jefes harán que no quede claro qué cabezal usar. En esta situación, se recomienda tirar y fusionar antes de empujar".
Ya lo he hecho, pero aún no puedo presionar --branch default sin que se cancele.
Cualquier ayuda es apreciada. ¡Gracias!
¡Puedes FORZARLO!
Aquí es cómo:
1. Pull from your repository
2. hg push --rev nnn -f (replace nnn with your Rev # of your working branch)
3. do NOT force before PULLing. if you do things will get out sync and you are screwed
Si está usando algo como RhodeCode, verifíquelo después de forzarlo y verá que su última sucursal está allí.
Sin embargo, creo que más adelante Mercurial le pedirá que presione la otra rama nuevamente, incluso si la cierra, Mercurial intentará crear esa rama en un servidor.
También soy usuario de Git y me encontré con la misma situación porque un cliente está usando Mercurial, pero me gustaría usar el estilo de flujo de trabajo de Git.
Creo que es factible, pero todavía no he descubierto el 100%.
Para empujar una sola rama solo usas -b
hg push -b myBranch
En cuanto a la cuestión específica, es posible que desee examinar el cierre de sucursales. Sé que SourceTree lo ofrece, pero no estoy seguro de los detalles
Si los conjuntos de cambios en los valores default
tienen conjuntos de cambios anteriores en otras ramas, también tiene que empujar esos conjuntos de cambios. No es posible que exista un conjunto de cambios en un repositorio sin que también existan todos sus conjuntos de cambios.
Así que prueba:
hg push --branch default --new-branch
que dice "sí, sé que este impulso envía a través de un nombre de rama que el repositorio remoto no había visto antes" (también requiere Mercurial 1.6 o posterior IIRC)>
Además, puedes tomar esas cabezas inactivas y convertirlas en cabezas cerradas con:
hg update thebranch
hg commit --close-branch -m ''closing''
Debido a que "las ramas con nombre son para siempre", muchas personas optan por reservarlas para conceptos de larga duración como "estable" y "experimental" y utilizan marcadores, ramas anónimas o clones para funciones, lanzamientos y otras cosas transitorias. Vea esto para una guide sobre esas otras opciones.