2009-11-05 8 views
17

Nuestro proyecto está funcionando bastante cerca de código (muchos cambios suceden en paralelo en un área geográfica bastante pequeña del código), y nuestro flujo de trabajo git basado en sucursales características funciona realmente bien para nuestro código java.¿Cómo manejar xml/html en el flujo de trabajo de la rama de funciones git?

Pero las cosas xml/html no funcionan muy bien. Cambios simples no relacionados (un diseñador que agrega un div circundante, un desarrollador que cambia una identificación de un elemento interno) proporciona fusiones realmente desastrosas.

Me doy cuenta de que puede haber varias opciones sobre cómo manejar esto. Una buena fusión de git xml sería óptima, o poner restricciones al reformateo del código xml/html otro. No trabajar en tan poco tiempo sería otra opción (inaceptable).

¿Cómo resuelves este problema de manera eficiente?

Respuesta

17

Git permite encargo fusionar los conductores, seleccionados a través de gitattributes por ruta (por ejemplo, para todos los archivos *.xml).

Lo que necesita encontrar es un controlador de combinación compatible con XML, y posiblemente también escriba un script simple para transformar entre las convenciones de Git y las convenciones de controlador de fusión. Existe, por ejemplo, el módulo Perl XML::Merge. Hay XyDiff, pero parece que no tiene una combinación de tres vías (y supongo que para XML la fusión de 3 vías a partir de diffs como se describe en el documento A Formal Investigation of Diff3 (PDF) no funcionaría). También puede leer la publicación del blog Matching, diffing and merging XML (o el artículo al que se hace referencia allí).

Otra solución sería desarmar atributo de combinación de archivos XML (que serían tratados como archivos binarios WRT. Conflictos de combinación), y el uso de alguna herramienta de combinación gráfica para resolver los conflictos de fusión, tal vez a través git mergetool.

+1

De alguna manera estoy pensando que una combinación que simplemente ignora todos los tipos de espacios en blanco iniciales/finales (excepto saltos de línea) funcionaría lo suficientemente bien. ¿Sabes cómo puedo lograr esto? – krosenvold

5

Si sabe que puede automatizar parte del problema de fusión que tiene con esas fusiones de archivos xml, podría crear secuencias de comandos de esas resoluciones.
Si hay una secuencia de comandos, puede llamarlos desde un controlador de combinación adaptado para archivos xml/xhtml, solo en algunos directorios.

Consulte here para obtener un controlador (realmente simple) de combinación.

De esta manera, cualquier conflicto que permanezca (porque el script del controlador de combinación no lo resolvió) son cuestiones de fusión legítimas que deben abordarse.

Cuestiones relacionadas