Risoluzione automatica in SVN per file CSV

0

Situazione

Siamo una grande squadra di sviluppatori, che utilizza SVN per il controllo del codice sorgente sul nostro progetto. Uno dei nostri file, FileTracker.cvs, è molto grande: contiene metadati relativi a quasi tutti i file nel nostro repository. Il formato di FileTracker.cvs è che ogni riga rappresenta un file e ogni colonna rappresenta una parte dei metadati relativi a quel file. Una delle colonne, chiamate tracce "risolte" se abbiamo elaborato quel file; può essere vero o falso.

Problema

Poiché utilizziamo un singolo file, FileTracker.cvs, per monitorare lo stato di quasi tutti gli altri file, diventa un bottleck per i conflitti. Cioè, molte persone finiscono per modificarlo regolarmente. Poiché SVN funziona a livello di file, ogni volta che due persone modificano il file e si impegnano, si verifica un conflitto, anche se le modifiche si verificano molto probabilmente su linee diverse.

Soluzione desiderata

Vorremmo che una soluzione per unire automaticamente i conflitti in questo file, idealmente che si agganci perfettamente in SVN. Diciamo che abbiamo un conflitto tra due versioni del file, Left e Right, e vogliamo unire in un file chiamato result. Quindi vogliamo solo implementare la seguente logica:

Per ogni riga a sinistra:

  • Se non è in conflitto con right, la riga in Result è la stessa
  • Se è in conflitto con right e la colonna "resolved" è vera, accetta la linea da sinistra nel risultato
  • Altrimenti, accetta la linea da destra nel risultato

Alla fine, vogliamo che tutte le modifiche di resolved = true vengano mantenute, e non ci interessa tanto il resto dei dati.

Tutte le specifiche

Usiamo la SVN della tartaruga e, in misura minore, Eclipse. Il nostro sistema operativo è Windows 7.

    
posta Colm Bhandal 17.09.2016 - 15:28
fonte

1 risposta

4

La prima cosa che mi chiedo è se davvero hai bisogno di un tale file FileTracker.cvs ? Non hai menzionato i metadati che memorizzi lì, ma sono davvero informazioni che devono essere mantenute manualmente e non possono essere derivate automaticamente dal file stesso o dal repository SVN? Il problema maggiore che vedo con la tua attuale soluzione non è che tutte le informazioni siano conservate in un unico file, ma che contengano molte informazioni ridondanti - vale a dire i nomi dei file stessi. Bisogna assicurarsi che l'elenco dei nomi di file in quell'elenco corrisponda esattamente all'elenco di tutti i file nel progetto, senza errori di battitura, nessun file dimenticato, nessun file temporaneo o di backup che giace nella struttura delle cartelle, ma non appartiene a il progetto. Posso immaginare che questo potrebbe essere un po 'incline agli errori.

Ma supponiamo che tu abbia davvero bisogno di quel file e che contenga informazioni che devono essere modificate manualmente. Quindi la prossima cosa che chiederei è se è davvero pratico mettere queste informazioni in un enorme file centrale. Se hai un grande team di sviluppatori, immagino tu abbia anche un numero enorme di file e cartelle. Forse è sufficiente mantenere i metadati in un file FileTrackerLocal.cvs per cartella, contenente solo l'elenco dei file in quella specifica cartella? Ciò ridurrebbe il numero di collisioni di fusione a una frequenza molto più piccola. Se hai bisogno di quel% di% centrale per motivi tecnici, puoi creare un semplice script che lo generi dai file locali su richiesta, il che rende inutile mantenere quel file ulteriormente nel repository SVN.

Infine, come ultima risorsa, potresti incorporare il proprio strumento di unione nella catena di strumenti SVN . Questo può essere uno script o un programma che verifica se FileTracker.cvs è il file da unire. Se lo è, puoi applicare il tuo algoritmo di fusione, altrimenti, delegherà la richiesta di unione a uno strumento standard.

    
risposta data 17.09.2016 - 16:41
fonte

Leggi altre domande sui tag