2010-03-25 8 views
6

Esto ha sido un gran signo de interrogación en mi mente.¿Cuál es la forma estándar o mejor para tratar con la ramificación de la base de datos con las ramas de Mercurial o Git?

Me estoy mudando a Mercurial o Git muy pronto para mi software web, y algunas veces mis sucursales requieren cambios significativos en la base de datos que otras ramas no deberían ver. Esto, no siempre puedo compartir la misma base de datos para mis sucursales.

¿Hay alguna manera estándar de tratar con los cambios en la base de datos para ramificación y clonación? Que hacen todos ustedes? Estoy usando MySQL.

Respuesta

2

Para manejar la clonación, su base de datos debe diseñarse para ser multiusuario.

Para cambios en el esquema, confirme los cambios en el esquema para esa rama como parte del repositorio.

Luego tiene que decidirse, para cada esquema, ¿ejecuta múltiples espacios de tabla en una base de datos, bases de datos múltiples, etc.? Luego, ingrese un puntero al correcto como parte de la configuración de instalación en esa rama.

+0

¿Qué quiere decir con un puntero? ¿Estás hablando de cambiar el DSN para cada rama? –

+0

¿Qué quiere decir con "diseñado para ser multiusuario"? ¿Quiere decir que si cada desarrollador tiene una sucursal, debería funcionar para cada una de esas sucursales? –

+0

Un clon del repositorio es solo eso, un clon idéntico, completo con ramas internas. Si la preocupación es manejar la clonación, entonces (supongo) la preocupación es que múltiples desarrolladores accedan a una base de datos a la vez, o un único desarrollador con múltiples repositorios clonados accederá a la base de datos desde más de una copia de la aplicación en ejecución. Solo para esta instancia, ignorando las sucursales, si sus bases de datos son multiusuario, se manejan los repositorios clonados. – kmarsh

5

Utilizando una herramienta changset base de datos puede ser realmente útil. He usado liquibase (http://www.liquibase.org), en el trabajo para administrar el control de versiones para el db. Recomendaría encarecidamente esa herramienta a cualquiera. Liquibase admite conjuntos de cambios, con escenarios de retrotracción configurables. Sin embargo, es una herramienta para administrar el esquema, no los datos reales. No trataría de usarlo para mantener los datos de la tabla actualizados.

Sin embargo, todavía siento que su mejor opción es usar liquibase, y tener diferentes esquemas, para diferentes ramas de origen.

+0

¿Fue fácil resolver los conflictos de combinación en el registro de cambios? ¿Tiene una solución incorporada para las cajas? – inf3rno

0

El esquema de la base de datos es en sí mismo (registrado en) una base de datos cuya estructura está, más o menos, definida por el INFORMATION_SCHEMA del estándar SQL.

Ahora, los DBMS están diseñados deliberadamente para permitir solo un único valor de base de datos en un punto único en el tiempo. Y dado que el catálogo es en sí mismo "solo un valor de base de datos para la base de datos INFORMATION_SCHEMA", los sistemas SQL admiten, deliberadamente, solo una única estructura de base de datos en un punto único en el tiempo.

Cuestiones relacionadas