Esiste un filtro di esclusione dei metadati per il comando DIFF SVN?
-
03-07-2019 - |
Domanda
Uso SVN come sistema di controllo del codice sorgente e mi chiedo come confrontare le directory ignorando eventuali differenze di metadati. C'è un modo per dire a svn diff
di confrontare solo il contenuto effettivo e ignorare i metadati?
Intendo metadati come proprietà SVN, ecc. che non influiscono sul contenuto del file. Supponiamo che il file X abbia una proprietà aggiuntiva nel ramo B rispetto al trunk T. Sfortunatamente verrà mostrato in 'svn diff T B' anche se il contenuto effettivo del file X è lo stesso.
Cerco qualcosa del genere:
svn diff https://example.org/tags/v1 https://example.org/tags/v2 -x -ignore-metadata --summarize
Aggiornamento: ho parzialmente risolto questo problema diffondendo direttamente sul filesystem invece di utilizzare gli strumenti SVN. Vedi la mia risposta di seguito ...
Soluzione 5
Sembra che non ci sia modo di farlo usando gli strumenti integrati di svn. Come l'ho risolto: Esporta entrambi gli alberi e diffondili direttamente sul filesystem usando il tuo strumento diff preferito. Questo è in qualche modo l'unico modo per farlo: /
Altri suggerimenti
È possibile passare l'output di svn diff tramite 'filterdiff --clean' per rimuovere eventuali righe estranee, comprese le modifiche alle proprietà.
Se si utilizza l'opzione --summarize
, le modifiche alle proprietà vengono indicate nella seconda anziché nella prima colonna.
cioè.,
M URL -- indicates content change
M URL -- property change
MM URL -- content and property change
È un po 'più facile da grep. Immagino che potresti avere un processo in due fasi se desideri un diff completo: prima usa il riepilogo per trovare i file con modifica del contenuto, quindi diff.
Bel consiglio di JosephWatkins.
Ecco il comando per gli utenti grep-junior:
svn diff A B --summarize | grep '^. '
Il grep cerca uno spazio come secondo carattere sulla linea.
Trovato questo durante la ricerca attraverso i documenti di aiuto svn
svn diff --patch-compatible
È lo stesso che correre
svn diff --show-copies-as-adds --ignore-properties
Ecco un singolo comando che fa tutto questo. Supponi di voler trovare tutte le differenze (non di proprietà) per tutti i file nella directory attualmente tra la revisione 54833 e 57215. Questo comando dovrebbe farlo:
svn diff -r 54833:57215 --summarize | egrep -v '^ |^D|^A' | awk '{ print $2 }' | xargs svn diff -r 54833:57215
NB: differisce solo i file modificati, non i file aggiunti o eliminati.
Usa svn diff --ignore-properties
. Questo è il metodo integrato di Subversion per fare solo la differenza del contenuto. Ignora qualsiasi modifica alle proprietà degli oggetti.
Ho scritto uno script per farlo, dopo che non sono riuscito a trovarne uno online.
Lo script rimuove i dati in base a una matrice di espressioni regolari immesse nella parte superiore dello script. Attualmente è impostato per filtrare le modifiche alle proprietà, ma può rimuovere qualsiasi modifica che corrisponda a una serie di espressioni regolari.
Esegui semplicemente il pipe dell'output di svn diff
allo script, dopo aver impostato lo script. Ho inserito i filtri nello script anziché i parametri perché eseguo sempre gli stessi filtri.
L'ho rilasciato come GPLv2.
Non ne sono sicuro, ma un semplice 'svn diff | grep -iv " cose da ignorare " ' sarebbe una soluzione alternativa.
Puoi impostare la proprietà svn: ignore su file e directory che si desidera che svn diff ignori.