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 ...

È stato utile?

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.

clean_svn_diff.bash

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top