2010-06-14 10 views
7

Desarrollo en un lenguaje de script propietario con código muy resumido en el que la mayoría de las configuraciones están contenidas dentro del código.Combinación manual en GIT

El problema obvio serían las diferencias en el código en sí mismo entre los entornos de prueba y producción, y eso es exactamente lo que intento administrar con GIT.

Como mi entorno de prueba es bastante volátil, pensé que podría crear una rama en GIT mientras se realizan cambios (y mantener el código con las configuraciones de prueba allí) y después de que el código haya sido aceptado me fusionaría en producción

Bueno, cuando pido a git que combine mis sucursales, hace un trabajo maravilloso con el código ... pero las configuraciones también se migran y tengo que abrir archivo por archivo, cambiándolo a lo que era .

¿De todos modos podría desactivar la fusión automática de GIT y amenazar todo como conflictos de código para combinarse manualmente con WinMerge o algo más tarde? El código es corto, realmente. Y ya que voy a tener que editarlo de todos modos para aplicar las configuraciones ...

ps .: tenga en cuenta que no estoy preguntando cómo configurar WinMerge en git. Tengo estas herramientas funcionando. Mi pregunta es cómo realizar siempre fusiones manuales entre sucursales.

gracias!

f.

Respuesta

5

desactivar la fusión automática

Eso podría lograr escribiendo un pequeño controlador de combinación, situado en a .gitattributes file.
Una política como unset podría ser lo que estás buscando.

Unset 

tener la versión de la rama actual como el resultado de la fusión tentativa, y declarar que la fusión tiene conflictos. Esto es adecuado para archivos binarios que no tienen una semántica de fusión bien definida.

Pero otro conductor gitattribute interesante sería un clean filer:

http://git-scm.com/figures/18333fig0703-tn.png

Eso sería ejecutar automáticamente un script 'limpia' de su elección justo antes de cometer el contenido de "limpiar" al repositorio.
Este script 'clean' podría ayudarlo a automatizar los cambios que tiene que realizar en su código para mantener o modificar los valores de configuración integrados en él.

+0

Hm .. eso es bastante interesante , pero no estoy tan familiarizado con los controladores GIT. he añadido a mi '.gitconfig' lo siguiente:' [Merge "manual"] = \t nombre de combinación manual de \t driver = Unset' y luego se añadió a la .gitattribute: '* fusión = Manual ' (los recogió de' git help merge') no funcionó bien. ¿podría ser más específico con el controlador git? gracias! f. – filippo

+0

@flpgdt: eso sería un controlador de combinación personalizado (definido en el archivo .gitconfig de hecho). Me refería solo al atributo merge (ver http://www.kernel.org/pub/software/scm/git/docs/gitattributes.html). Un simple: 'echo * .xxx merge = unset> dirWithConfgFiles \ .gitattributes' debería ser suficiente (con 'xxx' es la extensión para los archivos de código, incluidos los valores de configuración) – VonC

+0

hey mate. En realidad no funcionó. Tenía mis .gitattributes (probé ambos, en mi carpeta raíz y en mi carpeta que contenía los archivos exactos) como '* .xml merge = Unset'. Seguiré intentándolo, pero gracias de todos modos. También estaba echando un vistazo a cómo crear el controlador limpio, y aunque creo que logré crearlo, no estoy seguro de cómo decirle a GIT que lo use :( ¡gracias! f. – filippo

2

Usted dice "la mayoría de las configuraciones están contenidas dentro del código mismo", pero es de esperar que toda la configuración esté aislada en archivos específicos para la configuración. Si ese es el caso, puede mantener los casos de prueba y liberación del código de configuración en la misma bifurcación. Luego podría usar un interruptor de línea de comando para usar la configuración de prueba en lugar de la configuración normal.

Si su programa puede leer una selección de configuración de la línea de comando (o variable de entorno, clave de registro, archivo de texto o lo que sea), entonces no tendrá que fusionarse en absoluto. El programa puede ignorar los archivos de configuración de prueba cuando el interruptor de línea de comando no está presente e ignorar la configuración de liberación cuando el cambio de línea de comando está presente.

Esto le evita los posibles errores durante la fusión, así como el tiempo que lleva hacer la fusión.

+0

hnf .. Ojalá fuera así. Lamentablemente es un poco peor, las configuraciones están incrustadas en el código en sí. Bien técnicamente, el "código" es un archivo de configuración complejo donde algunos de sus contenidos se relacionan con el entorno donde se ejecuta (el tipo de conexiones, identificadores y rutas). No puede ser tan difícil ... Solo desearía poder hacer algo como 'git diff master dev' y cuando pulso guardar para cada archivo, los cambios se almacenan en la rama actual ... – filippo

Cuestiones relacionadas