2012-04-16 15 views
7

En algunos casos, tengo que hacer cumplir que los usuarios de Mercurial han ejecutado hg pull -u antes de que se pueda hg commit, es decir, hg pull significa que la cola entrante es vacío, y además, también quiero que la persona esté usando la versión principal de la rama.Mercurial: aplicar "hg pull -u" antes de "hg commit"

¿Cómo puedo configurar tal restricción?

(Soy plenamente consciente de que esto va en contra partes del núcleo diseño DVCS)

+0

Otra forma de hacer esto es cómo implementar un servidor de gatillo empuja para no permitir que crean múltiples cabezas. –

+0

No puedo decirte cómo automatizar, pero utilizo "hg incoming" para comprobar si necesito extraer. Es posible que desee usar eso. –

+4

Sería mejor si explicara el problema que está tratando de resolver en lugar de la solución defectuosa que desea solucionar. –

Respuesta

1

Normalmente mercurial no dejará que se presiona una cabeza abierta al servidor sin necesidad de utilizar la bandera -f (fuerza). Puedes escribir un gancho para tirar automáticamente pero eso no se puede hacer cumplir en el lado del servidor debido a que el servidor no sabe lo que tienes. Hay un artículo en el sitio web de mercurio en este escenario: https://www.mercurial-scm.org/wiki/TipsAndTricks?highlight=%28heads%29#Prevent_a_push_that_would_create_multiple_heads

3

Se podría pedir a sus desarrolladores para instalar

[hooks] 
pre-commit = hg pull -u 

en sus archivos de configuración (que probablemente se debe instalar en el archivo por cada repositorio .hg/hgrc ya que este el flujo de trabajo es específico del repositorio).

Esto hace que Mercurial sea un poco parecido a Subversion: tus desarrolladores solo tendrán un conjunto de cambios sobresaliente. Pero tenga en cuenta que tan pronto como alguien presiona hacia el servidor, hg pull -u no puede actualizarse a la nueva sugerencia de bifurcación, ya que cruzará ramas (ramas topológicas) para hacerlo. Por lo tanto, se necesitará una combinación adecuada en ese punto (o un rebase, consulte hg pull --rebase).

1

Como dice Adam, tal vez lo que realmente necesita hacer es evitar múltiples cabezas (por rama). Esto es lo que hacemos, utilizando el enlace 'forbid_2head' de Netbeans (enlazado desde aquí https://www.mercurial-scm.org/wiki/TipsAndTricks#Prevent_a_push_that_would_create_multiple_heads)

El resultado es que el gancho impide cualquier inserción que crea múltiples cabezas en una rama (por lo tanto, una en la rama anónima/predeterminada más uno cada uno en ramas nombradas). Esto fuerza un pull antes de commit porque tienes que tirar, obtener las dos cabezas localmente, luego unir o rebase para eliminarlo.

nota, el gancho está en el repositorio del servidor/maestro

Cuestiones relacionadas