2011-05-26 10 views
8

Después de un cambio en mi repositorio local, me comprometo con hg commit -m <message>, luego presiono a mi servidor con hg push, luego en mi servidor actualizo el directorio operativo con hg update.Cómo hacer un empujón rápido con Mercurial

¿Hay una mejor manera de hacerlo?

Respuesta

8

Los dos primeros pasos que ha descritas:

hg commit -m <message> 
hg push 

se requieren de acuerdo con el hecho de que cometa se mantienen completamente independiente del servidor de Mercurial (y la mayoría de los otros DVCS también). Podrías escribir un enganche post-commit para realizar el push después de cada commit, pero esto no es aconsejable porque te impide corregir errores simples durante el commit y antes del push.

Como está tratando de realizar una actualización en 'el servidor', supongo que está ejecutando una versión del código en su repositorio en el servidor. Estoy asumiendo esto porque normalmente el servidor simplemente actuaría como un repositorio principal para que usted y sus desarrolladores puedan acceder (y también para estar sujetos a copias de seguridad, etc.), y no necesitaría el hg update explícito.

Suponiendo que está ejecutando el código en el servidor, se puede tratar de sustituir el empuje y la actualización con este comando:

hg pull <path to development repo> -u

que llevará a cabo un trago de tu repositorio local y luego una actualización automática . Dependiendo de la configuración de su servidor, puede ser difícil obtener la ruta a su repositorio local.

2

Existe una extensión llamada autosync le puede resultar útil:

Esta extensión proporciona el comando de sincronización automática, que automática y continuamente se compromete trabajan cambios de copia, recuperaciones (tirar, fusionar, commit) los cambios de otro repositorio y empuja cambios locales de vuelta al otro repositorio. Piense en los archivos de configuración o las listas de tareas como ejemplos de cosas para sincronizar. En un nivel superior, el comando autosync no solo sincroniza repositorios sino copias de trabajo. Un repositorio central (por lo general sin una copia de trabajo) debe ser utilizado como cubo de sincronización:

6

Para la primera parte de la pregunta (es decir, empujar automáticamente cuando se hace una de comprometerse.), Puede utilizar el truco descrito en este respuesta: mercurial automatic push on every commit.

Si desea actualizar automáticamente el directorio de trabajo, puede hacerlo con un gancho. Añadir este en el hgrc de su repositorio (.hg/hgrc en el directorio del servidor):

[hooks] 
changegroup = hg update >&2 

Esto actualizará automáticamente el directorio de trabajo cada vez que se hace un esfuerzo para este servidor. Este gancho se describe en el Mercurial FAQ.

Si utiliza estas 2 soluciones, la próxima vez que haga hg commit -m "message", la confirmación se enviará automáticamente al servidor remoto y se actualizará el directorio de trabajo en el servidor.

+0

Muchas gracias, ¡acabas de alegrarme el día! Mercurial es mucho más fácil que git y svn, solo hace lo que quiero que haga, nada más, nada menos. – elslooo

Cuestiones relacionadas