2009-09-04 5 views
7

Tengo un problema de larga duración: en el trabajo estamos usando mercurial como DSCM, pero no podemos encontrar la manera de mantener sincronizados nuestros archivos de configuración.Pregunta de flujo de trabajo mercurial (cómo manejar archivos de configuración)

El problema es que queremos hacer un seguimiento de los archivos de configuración y queremos intercambiar el contenido del archivo de configuración entre los desarrolladores, pero cada desarrollador desea tener su sección de connectionStrings independiente de la de los demás.

¿Es posible de alguna manera mantener los archivos de configuración rastreados pero omitir la sección de cadenas de conexión al tirar y empujar?

Intentamos agregar archivos de configuración a .hgignore, pero cuando alguien agrega algo importante al archivo de configuración, tenemos que compartirlo por correo electrónico.

Gracias.

Respuesta

6

Si no puede tratar con la inclusión de configuraciones personalizadas, solo tiene un archivo de configuración base en el repositorio.

Luego haga que cada desarrollador ponga su propia personalización en la parte superior (con mq). Si la personalización no es demasiado intrusiva, la fusión siempre irá bien.

Hay otra manera, donde se fusionan en repetidas ocasiones su personalización, pero luego cuando se empuja hay que recordar que no debe empujar la rama de combinación (tX es la línea principal, c1 es la personalización)

t1-t2-t3-t4-...-tN 
    \ \  \ \ 
    c1---c2-----c3--c4 

Las necesidades dev y los cambios push que solo tienen tX como padres, cX nunca deben escapar del repositorio.

1

La manera no DVCS de manejarlo es configurar su proceso de compilación para leer las cadenas de conexión de archivos de configuración separados y luego preprocesarlos durante el proceso de compilación (en java puede usar hormig o maven para filtrar desde propiedades archivo, no sé acerca de MS-land).

4

No conozco los detalles de sus archivos de configuración, pero si puede incluir otros archivos, cree un archivo config_local para guardar la configuración específica del desarrollador. Agregue ese archivo al .hgignore. La configuración común entra en el archivo de configuración principal, que luego incluye el archivo config_local.

Como dice Ken, si la inclusión no es una opción, entonces el preprocesamiento durante el paso de compilación puede ser el camino a seguir.

3

Puede usar Mercurial Queues para hacerlo. Entonces, lo que harías es tener las configuraciones "reales" bajo hg (con sus nombres reales), y los desarrolladores pueden mantener sus personalizaciones usando parches que se sientan en la parte superior y se mantienen con mq.

Luego, cuando los desarrolladores necesitan actualizar la configuración real, abren su parche que mantiene todas sus personalizaciones fuera de la pila, hacen el cambio a la configuración y confirman + lo presionan.

Suponiendo que todos los demás desarrolladores no hayan anulado esos cambios particulares en sus propias colas, los recibirán la próxima vez que extraigan + actualizar.

0

Es un poco bastardecedor, pero puede usar el KeywordExtension para expandir automáticamente los tokens. En su archivo de configuración, escriba algo como esto:

db.host = $DBHOST$ 
db.host = $DBUSER$ 
db.host = $DBPASS$ 

y luego en su ~ /.Los archivos hgrc del usuario tendrían algo como esto:

[extensions] 
hgext.keyword= 
[keyword] 
# expand keywords in all python files in working dir 
**.conf = 
[keywordmaps] 
DBHOST = dev.server.internal 
DBUSER = myname 
DBPASS = mypass 

La producción, por supuesto, tendría su propia .hgrc.

El esquema les costaría a todos un poco de tiempo de configuración una vez, pero después de eso debería ser automático. Los valores predeterminados podrían estar en el archivo system-wise/etc/mercurial/hgrc en caso de que el usuario no desee establecer sus propias cadenas de conexión privadas.

1

Coloque sus cadenas de conexión en un archivo diferente. p.ej. en web.config:

<connectionStrings configSource="connections.config" /> 

entonces usted tiene un archivo connections.config con las cadenas de conexión, que se puede excluir desde el repositorio dejando de ese modo cada desarrollador modificar el contenido de su corazón.

Si desea una versión de 'referencia' del archivo connections.config, simplemente agregue otro archivo connections.example.config que esté bajo control de fuente, y úselo como su versión de plantilla.

Cuestiones relacionadas