Debería tener que incorporar y comprometer cada vez que se actualiza el rama Mercurial en el servidor de producción?

StackOverflow https://stackoverflow.com/questions/1830303

  •  11-09-2019
  •  | 
  •  

Pregunta

Estoy usando Mercurial en un proyecto reciente. En el servidor web en la que estoy desplegando el proyecto que tengo un archivo de configuración ligeramente diferente con los ajustes de producción. El problema es cuando pull y update, que a menudo tienen que merge y commit también.

Es este el flujo de trabajo correcto? Parece extraño que con el fin de poder seguir actualizando tengo que estar cometiendo los conjuntos de cambios, pensé que sería una combinación de integrarlos en mi rama de producción y continuará haciéndolo cada vez que pongo al día. Es este un paradigma de control de versiones distribuido que no estoy acostumbrado a todavía?

¿Fue útil?

Solución

Esta era una especie de manejarse en esta pregunta , pero creo que su pregunta es mejor ya que busca un poco más de claridad.

En resumen: Sí, es normal. Aquí hay un poco de una expanation:

Usted comienza con esto en el repositorio principal (donde están las cajas de cambios):

main: --[E]--[F]--[G]

A continuación, se clona en el servidor de producción y agrega un conjunto de cambios, H, que hace la personalización despliegue. Por lo que la cesión temporal de implementación es el siguiente:

production: --[E]--[F]--[G]--[H]

y luego más trabajo que ocurre en el repositorio principal, añadiendo conjuntos de cambios, I y J, por lo que el aspecto principal de recompra como:

main: --[E]--[F]--[G]--[I]--[J]

, que cuando se tira a la producción será similar a:

production:  --[E]--[F]--[G]--[I]--[J]
                            \         
                             \-[H]

con dos cabezas, que se fusionan para obtener:

production:  --[E]--[F]--[G]--[I]--[J]
                            \         \
                             \-[H]-----[K]

donde K es sólo J además de los cambios que hizo originalmente en H.

Ahora más trabajo sucede en el principal, dando:

main: --[E]--[F]--[G]--[I]--[J]--[L]--[M]

, que se tire en la donación de producción:

production:  --[E]--[F]--[G]--[I]--[J]--[L]--[M]
                            \         \
                             \-[H]-----[K]

y luego se fusionan y obtener:

production:  --[E]--[F]--[G]--[I]--[J]--[L]--[M]
                            \         \         \
                             \-[H]-----[K]-------[N]

Así que cada vez que traer cambios desde principal, estás haciendo una fusión, y la creación de un nuevo conjunto de cambios (esta vez N).

Creo que está bien, y es "normal".

Puede, sin embargo, evitar que mediante el uso de algunas de las respuestas de la pregunta he vinculado anteriormente y hay un nuevo truco que puede utilizar para mantener modificador el original los padres de H (y contenidos) de modo que siempre se mueve al final de lo que es la nueva punta.

El truco es el Rebase Extensión y cedería historia lineal en la producción (aunque 'todavía d estar haciendo lo que es esencialmente una combinación de conseguirlo). No soy un fan de ella, porque no me gusta cambiar de cambios después de que se cometieron, pero desde H nunca se abandona el cuadro de la producción que está bien.

Las otras respuestas fueron colas mercuriales y hacer los cambios de producción en vivo en el repositorio dev y obtener desencadenados por algo que es diferente en el entorno de producción (como la cabecera Host:).

Otros consejos

Una opción es mantener los valores de implementación específicos del servidor del repositorio de código completo.

Esto significa la posibilidad de subir y cambiando a mano en el servidor, pero elimina la necesidad de fusionar constantemente. También mantiene las cosas como contraseñas de bases de datos de control de versiones, que es probablemente una buena cosa.

Por ejemplo, cuando trabajo en una aplicación Django puedo comprobar en un archivo settings.py que contiene:

  • Todos los ajustes que no va a variar entre los servidores (nombre del sitio, aplicaciones instaladas Django, etc).
  • ajustes "específicas del servidor de base de datos" (ubicación, etc.) para el desarrollo local.
  • El from deploy import * línea al final.

La línea from deploy import * tira en todos los elementos del archivo deploy.py si existe. En un servidor de prueba / puesta en escena / producción voy a crear este archivo y poner los ajustes específicos del servidor en el interior. Debido a que la importación se realiza al final de settings.py éstos se sobreponen a cualquiera de los ajustes locales de desarrollo específico en el archivo principal de configuración.

Hacerlo de esta manera significa que todo lo necesario para ejecutar y desarrollar localmente se registró en el control de versiones, pero no hay información específica del servidor y / o sensible (como contraseñas) se comprueban en (y por lo tanto no necesita ser fusionado). Se requiere un poco de trabajo extra para configurar (añadiendo la línea de importación y crear el archivo en el servidor deploy.py inicialmente).

Este esquema particular es para un proyecto de Django, pero tal vez una idea similar podría funcionar para usted.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top