2009-11-05 1 views
17

Il nostro progetto funziona in termini di codice abbastanza ravvicinati (molti cambiamenti avvengono in parallelo in un'area geografica del codice abbastanza piccola) e il nostro flusso di lavoro git basato su feature branch funziona davvero bene per il nostro codice java.Come gestire xml/html nel flusso di lavoro della feature feature git?

Ma il materiale xml/html non funziona molto bene. Semplici cambiamenti non correlati (un designer che aggiunge un div circostante, uno sviluppatore che modifica un id di un elemento all'interno) dà una fusione davvero disastrosa.

Mi rendo conto che ci possono essere diverse opzioni su come gestirlo. Una buona unione di git xml sarebbe ottimale, o mettendo un altro sulla riformattazione del codice xml/html. Non lavorare in tali ambienti ravvicinati sarebbe un'altra opzione (inaccettabile).

Come si risolve questo problema in modo efficiente?

risposta

17

Git permette personalizzato unire driver, selezionati tramite gitattributes per percorso (ad esempio per tutti i *.xml file).

Quello che devi trovare è un driver di unione XML-aware, oltre a scrivere anche un semplice script da trasformare tra le convenzioni Git e dette convenzioni di unire driver. C'è ad esempio il modulo Perl XML::Merge. C'è lo XyDiff, ma sembra che manchi dell'unione a tre (e immagino che per XML costruire un unione a 3 vie da diff come descritto nel documento A Formal Investigation of Diff3 (PDF) non funzionerebbe). Puoi anche leggere il post del blog Matching, diffing and merging XML (o l'articolo a cui fa riferimento).

Un'altra soluzione potrebbe essere quella di attributo merge unset per i file XML (sarebbero trattati come file binari WRT. Unire i conflitti), e utilizzare alcuni strumento di unione grafica per risolvere i conflitti di fusione, forse via git mergetool.

+1

In qualche modo sto pensando che una fusione che ignora semplicemente tutti i tipi di spazi bianchi iniziali o finali (ad eccezione degli interruzioni di riga) potrebbe funzionare abbastanza bene. Sai come posso ottenere questo? – krosenvold

5

Se si sa che è possibile automatizzare parte del problema di unione che si ha con queste unioni di file xml, è possibile scrivere tali risoluzioni.
Se è presente uno script, è possibile chiamarli da un driver di unione adattato per file xml/xhtml, solo in alcune directory.

Vedere here per un (molto semplice) driver di unione.

In questo modo, qualsiasi conflitto che permane (poiché lo script del driver di unione non lo risolve) sono problemi di unione legittimi che devono essere risolti.