2012-02-08 12 views
35

Ho bisogno di ottenere l'elenco dei file modificati tra due revisioni in SVN.Ottieni i file modificati dalla riga di comando SVN tra due revisioni

ho usato il seguente comando:

svn diff -r 5001:6001 --summarize https://svn.blah.com/../ > output.txt 

Per qualche ragione, i file modificati sulla revisione 5001 non sono popolati nel file di testo di output.

Qual è il comando esatto per estrarre l'elenco di file tra le due revisioni (comprese da e a revisioni, ovvero la revisione 5001 e la revisione 6001)?

+1

Hai provato '-r 5000: 6001'? –

+0

sì, ho provato -r 5000: 6001 include i file modificati su r 5001 ma non 5000 .... Ciò significa che devo sempre decrementare di un numero di revisione – Madhan

+0

Sì. È così che funziona. –

risposta

52

Provare invece svn diff -r 5000:6001. Per capire questo, considera quanto segue: come sarebbe l'output di svn diff -r 100:100? Non mostrerebbe cambiamenti, perché le revisioni sono le stesse. Per vedere le modifiche per la revisione 100, dobbiamo usare -r 99:100.

+1

quando ho provato svn diff -r 100: 100 output è nullo – Madhan

+6

Destra - poiché non c'è differenza tra 100 e 100 - sono identici. Per definizione. Quindi, se vuoi sapere la differenza nel tuo 5001: 6001 incluso di 5001, devi fare un -r 5000: 6001. –

8

Prova svn log -r 5000:6001 -v per ottenere l'elenco dei file. Questo dà l'elenco dei file categorizzati dalla revisione n. Quindi, si può avere un'idea migliore su quali file sono andati in quella revisione a colpo d'occhio.

+0

Avevo bisogno di un elenco dei file che erano cambiati tra due revisioni arbitrarie e questo ha funzionato per me, mentre il diff -r suggerimento, con --summarize o non elencato tutti i file nel repository. Forse mi manca qualcosa? –

+0

Prestare attenzione all'output di questo quando ci sono revisioni provenienti da fusioni. Prova oggi un problema in cui l'output è simile a /branch/abc/new_file.js (da trunk/new_file.js: 12344). Nella mia esperienza, è sempre meglio usare --xml se stai pianificando di consumare questi dati come input di qualcos'altro. – MattSaw

8

La risposta di Dirk-Willem van Gulik è perfetta se si desiderano tutte le modifiche. Tuttavia, se si desidera solo l'elenco dei file modificati aggiungere --summarize interruttore al comando,

svn diff -r 13447:HEAD 
6

svn diff -r v1:v2 --summarize | awk '{print $2}' > filelist.txt

Spiegazione:

svn diff -r v1:v2 --summarize vi dà lo stato e il nome del file separati da un carattere di tabulazione. È necessario selezionare la stringa dopo il carattere di tabulazione - il secondo campo. È possibile farlo usando awk e reindirizzare l'output in filelist.txt

-1
svn diff -r 5001:6001 ...local path hier ... > output.txt 
+1

Puoi aggiungere qualche spiegazione sul motivo per cui questo risolve il problema dell'utente? – Chrismas007

Problemi correlati