Programmi di controllo della versione per file XML - strumento di unione / diff

5

Il mio ambiente di programmazione / lingua (gamemaker) fornisce i file sorgente come "file XML". Ogni risorsa ha il proprio file XML. Dove le proprietà (il codice è una proprietà) sono memorizzate all'interno dei tag xml.

Esiste un controllo del codice sorgente in grado di gestirli? Con le collisioni di sovversione non sembrano essere gestite correttamente: quando avviene una collisione, sovversione interrompe la struttura XML. Che a sua volta interrompe il Gamemaker durante l'aggiornamento.

EDIT (la modifica qui come commenti non sembra gestire le newline: P), un esempio di un file sorgente che è stato "distrutto" da subversion:

<object>
  <spriteName>sprBall</spriteName>
  <solid>0</solid>
  <visible>-1</visible>
  <depth>0</depth>
  <persistent>0</persistent>
<<<<<<< .mine
  <parentName>self</parentName>
=======
  <parentName>objExplosion</parentName>
>>>>>>> .r16
  <maskName>&lt;undefined&gt;</maskName>
  <events/>
</object>

EDIT2: a causa della mancanza di esperienza con questi strumenti, ho fatto la domanda sbagliata. Quindi ecco una formulazione migliore:

Nell'esempio sopra un xml-file-reader si bloccherà durante il tentativo di leggere il file. Tuttavia, la risoluzione manuale del conflitto è "difficile". (E in casi estremi impossibile). "" non dice nulla di per sé. - Come la prima domanda diventa "nome genitore di cosa?" - Un oggetto? - quale oggetto? In questo caso lo si può vedere rapidamente. Tuttavia, se il file xml raggiunge 100+ linee con 6-7 livelli di tag, diventa un disastro guardandoci sopra. Soprattutto perché molti tag non hanno lo stesso nome dell'IDE.

Ciò che speravo di avere è che il conflitto venga modificato in modo che una libreria di lettura xml possa leggerlo. - Ad esempio, la modifica .r16 viene visualizzata in un commento (o sottotag./attributo).

<parentName>self 
<!--.r16: objExplosion--></parentName>

Da quel momento in poi posso programmare uno strumento per aiutare ad analizzare il conflitto. - Posso usare una delle tante librerie xml per scrivere una semplice applicazione visualizzando l'albero.

Bene, sono solo sorpreso che questo non sia stato un problema per nessun altro: /.

    
posta paul23 23.12.2011 - 11:10
fonte

5 risposte

9

Sembra che tu stia dicendo che un file con conflitti irrisolti interrompe Gamemaker.

Bene, mi aspetterei che indipendentemente dal tipo di file o sistema. Devi risolvere tutti i conflitti prima di costruire. Non c'è modo che avere un file contrassegnato con conflitti non risolti possa mantenere valida la struttura di quel file.

Se si trattasse di un file sorgente C # o Java, mi sarei aspettato di ottenere errori del compilatore se avessi provato a creare il progetto con il file in questo stato.

    
risposta data 23.12.2011 - 11:30
fonte
1

Git ha il concetto di driver di unione personalizzati proprio per questo scopo. Ti permetterebbe di unire file xml usando il tuo algoritmo invece del default riga per riga. Tuttavia, a mia conoscenza nessuno ha scritto uno per xml e reso disponibile al pubblico. Non so abbastanza su Subversion per sapere se al momento consente i driver di unione personalizzati, ma dato che è open source puoi aggiungerlo tu stesso. Ad ogni modo, sembra che ci sia un sacco di lavoro su uno strumento a meno che la fusione di xml non sia uno scarso maggiore di produttività.

    
risposta data 23.12.2011 - 18:23
fonte
0

SemanticDesign produce una linea di strumenti sensibili alla lingua . Forse potresti essere interessato a controllarli.

In breve, come ha detto Badger, l'XML è un file di testo come qualsiasi altro, salvo la struttura, e il normale VCS dovrebbe funzionare.

    
risposta data 23.12.2011 - 13:10
fonte
0

Non penso che tu trovi nessun VCS, che funzionerà in base alle tue esigenze al momento (automagicamente).

Poiché tutti gli strumenti SCM (e diff-merge dietro la scena) funzionano con una stringa come oggetto minimo di dati, quando si desidera elaborare * -entity (multi-sting) come oggetto integrale. Devi lavorarci a mano

MODIFICA per il tuo EDIT2

Non riesco a ricordare come risolvere i conflitti di fusione facile in CLI SVN, ma, se è possibile utilizzare una qualsiasi (buona) fusione con interfaccia grafica compatibile, che è iniziata con l'apparire di non chiaro Unisci, avrai meno problemi anche con l'unione classica basata sulla linea: vedi conflitti nel contesto

    
risposta data 23.12.2011 - 11:41
fonte
0

Penso che tu abbia solo bisogno di uno strumento di fusione migliore. Non salvare mai un file con quei contrassegni di unione svn in essi, risolvi prima i conflitti e salva solo documenti XML validi.

Abbiamo usato i file XML per la configurazione della nostra applicazione e questi sono stati archiviati nel repository Mercurial insieme al codice sorgente dell'applicazione.

Usando kdiff3 con TortoiseHG non ho mai avuto un problema che non si potesse risolvere guardando entrambi i rami di un'unione e il loro antenato comune.

    
risposta data 04.01.2012 - 19:01
fonte

Leggi altre domande sui tag