Rimuovi svn inutili: proprietà mergeinfo


Answers

Ecco un modo per cancellare tutte le proprietà di svn sottotree: mergeinfo. Eseguilo all'interno della root del tuo repository:

svn propget svn:mergeinfo --depth=infinity 
    | grep -v "^/"
    | grep -v "^\."   
    | cut -d- -f1 
    | xargs svn propdel svn:mergeinfo

Tutto in una riga per copiare / incollare facilmente:

svn propget svn:mergeinfo --depth=infinity | grep -v "^/" | grep -v "^\." | cut -d- -f1 | xargs svn propdel svn:mergeinfo

Per vedere in anteprima quali file avranno effetto prima di eseguirlo, cambia l'ultimo "propdel" in "propget" o rimuovi del tutto l'ultimo pipe di xargs.

Question

Quando unisco le cose nel mio repository Subversion vuole aggiungere / modificare un sacco di proprietà svn:mergeinfo in file che sono totalmente estranei alle cose che voglio unire.

Domande su questo comportamento sono state fatte prima qui su :

Da quanto ho capito dagli argomenti sopra menzionati sembra che molti file nel mio repository abbiano proprietà svn:mergeinfo esplicite su di loro, quando non dovrebbero. Il consiglio è di ridurre la quantità e solo mettere quelle proprietà su file / cartelle rilevanti.

Quindi ora la mia domanda: come posso rimuovere facilmente quelle proprietà non necessarie? Sto usando TortoiseSVN, ma sono riluttante a controllare / correggere manualmente centinaia di file. C'è un modo più semplice per rimuovere quelle svn:mergeinfo inutili svn:mergeinfo proprietà svn:mergeinfo ?

PS Non sto cercando codice API SVN C ++.




Se si è certi di voler rimuovere in massa le proprietà di mergeinfo, è possibile utilizzare il seguente script BASH.

FILES=`svn status |grep "^ M      " |sed s/" M      "// |tr '\n', ' '`
svn revert $FILES

Ottiene un elenco di file modificati, li filtra solo per unire solo le modifiche diinfoinfo, rimuove tutto tranne il percorso del file effettivo, converte i percorsi one-per-line in un elenco delimitato da spazi e le chiamate vengono ripristinate in tale elenco.




Siccome non sono fiducioso con la svn:merge-info cieca svn:merge-info eliminazione delle proprietà di svn:merge-info , ho implementato uno strumento per analizzare la situazione corrente su una copia di lavoro e rimuovere il maggior numero possibile di revisioni di unione dalle proprietà di merge-info non-root. Dopo ulteriori controlli e controlli umani, è possibile eseguire le modifiche sulla copia di lavoro.

Eccolo: svn-clean-mergeinfo

Non esitare a segnalare qualsiasi problema relativo al suo utilizzo per migliorarlo.

Subversion 1.10 introduce un nuovo strumento dedicato a tale attività: svn-mergeinfo-normalizer




Per fare cambiamenti in una struttura di directory, questo sarebbe (solo "ricerca" non DOS):

find . -path "*/.svn" -prune -or -exec svn propdel svn:mergeinfo '{}' \;

Eseguendo un client 1.6.12 connesso a un server 1.5, ho un problema simile; c'è una sottodirectory nel progetto che ha bisogno del proprio svn: mergeinfo, ma avere 121 voci di questo tipo (incluse 5 directory sotto ./var con "svn: ignore *") sembra in qualche modo inappropriato. Quindi, sarebbe bello avere uno script (es. Python) che sia in grado di rimuovere le informazioni di fusione ovvie e di parlare di altre differenze ...