2012-01-04 18 views
13

Estoy utilizando mercurial con ramas con nombre, y observe que cuando creo una nueva rama de valor predeterminado, el valor predeterminado se marca como una rama inactiva. Por ejemplo:Mercurial: mantener la rama predeterminada "activa"

C:\data\solutions\test-repo>hg branches 
default      0:aeec280e6310 

C:\data\solutions\test-repo>hg branch feature-branch 
marked working directory as branch feature-branch 

C:\data\solutions\test-repo>hg com -m "created new branch" 

C:\data\solutions\test-repo>hg branches 
feature-branch     1:1cb18d7fa554 
default      0:aeec280e6310 (inactive) 

Este es un problema porque nuestro sistema de despliegue muestra ramas nombradas que son activos, que se pueden desplegar desde.

¿Cómo puedo mantener mi rama predeterminada "activa"?

Respuesta

22

La noción de ramas "activas" e "inactivas" es algo de lo que nos estamos alejando en el proyecto Mercurial. El problema es simplemente que las ramas pueden alternar entre los dos estados más o menos al azar y en momentos inconvenientes, como acaban de ver.

En cambio, ahora nos estamos centrando en "abierto" frente a "cerrado". Esta es una noción explícita: para cerrar una cabeza rama, lo hace

$ hg update feature-branch 
$ hg commit --close-branch -m "passes all tests, ready for merging" 

que agregará un conjunto de cambios especial que marca la cabeza de la rama como cerrado. Cuando todas las cabezas de una rama están cerradas, la rama misma se considera cerrada y desaparecerá de hg branches. Recomiendo cerrar antes de fusionar, por favor see my named branch guide for a longer example.

Así que le sugiero que cambie su sistema de despliegue para mostrar las ramas abiertas (hg branches) en lugar de las ramas activas (hg branches --active).

+1

¿Pero cómo mantiene esto el valor predeterminado activo? Según lo veo, TIENES que actualizar al valor predeterminado después de hacer una rama con nombre, y hacer una confirmación "ficticia"; de lo contrario, la rama predeterminada se marcará como inactiva. – mslot

+0

@mslot: propuse usar cerrado/abierto en lugar de activo/inactivo.Olvídese de todo lo relacionado con las ramas inactivas y concéntrese en las ramas cerradas. Para volver a abrir una bifurcación, debe realizar una confirmación después del conjunto de cambios que la marca: normalmente no es un problema, ya que desea volver a abrir una bifurcación porque tiene un cambio real para comprometerse en esa bifurcación. –

+0

Para su guía a +1, ya que es muy útil y descriptivo. – glglgl

13

Inactivo significa que no tiene cabeza.

En su caso la gráfica es la siguiente:

default:  0 -\ 
feature-branch:  \- 1 --- * 

* significa que el "trabajo dir

Al hacer más correcciones en su función (como los nodos 2 y 3) este será el aspecto :

default:  0 -\ 
feature-branch:  \- 1 --- 2 --- 3 ---- * 

Cuando se desea integrar feature-branch en el default acaba de actualizar a la default

default:  0 -\--------------------- * 
feature-branch:  \- 1 --- 2 --- 3 

y luego fusionar feature-branch en el default:

default:  0 -\-------------------/- * 
feature-branch:  \- 1 --- 2 --- 3 -/ 

El hecho de que aparezca "inactivo" no se lo que significa que no se puede trabajar con él. Por ejemplo, sus "scripts de implementación" pueden tener un hg update --clean default que funcionará perfectamente incluso si apareciera como "inactivo".

Inactivo significaba que no tenía cabeza. Nada más. Después de la fusión, se activará y será feature-branch que se volverá "inactivo".

No importa si está activo/inactivo, simplemente trabaje con él normalmente.

+0

Si bien este es un buen ejemplo de mostrar cuando una rama se considera inactiva, decir "sin cabeza" es erróneo ya que * es * una cabeza. En este caso, el encabezado de feature-branch es 3: 'hg heads feature-branch' confirmará esto. Más bien, es una regla de negocios (* diferente * de 'sin cabeza') por la cual 'hg branches' determina en [en] el estado activo. – user2864740

+0

Las reglas son así: cuando * todos * los hijos de * todas * las cabezas de una rama nombrada pertenecen a una * rama * nombrada (como después de una combinación como se muestra), entonces se considera inactiva. Crear una nueva cabecera en la misma rama con nombre (como agregar una confirmación en la rama de nombre) violaría instantáneamente la regla y se volvería, al menos momentáneamente, activa de nuevo. – user2864740

Cuestiones relacionadas