Come vedi le voci di registro SVN recenti?


194

La digitazione svn loggenera un elenco incredibilmente lungo e inutile su una riga di comando. Non ho idea del perché sia ​​l'impostazione predefinita. Se volessi leggere (o anche solo leggere) 300 voci sul terminale, non mi dispiacerebbe digitare svn log --fullo qualcosa di simile.

Forse i ragazzi SVN stanno pensando che volevo alimentare quell'output a un altro programma. Tuttavia, in tal caso, sarebbe più sensato avere la chiamata più dettagliata per il programma, non per l'utente terminale.

Ad ogni modo, come posso vedere solo alcune attività recenti come le ultime 5 o 10 voci per vedere cosa è cambiato?


9
Sì, in realtà dovrebbe funzionare come, um, git log.
Paul Draper,

Risposte:


262

limit opzione, ad es .:

svn log --limit 4

svn log -l 4

Solo le ultime 4 voci


127

Oltre a quello che ha detto Bert F , molti comandi, incluso logl' opzione -r(o --revision). Di seguito sono riportati alcuni esempi pratici che utilizzano questa opzione per mostrare intervalli di revisioni:

Per elencare tutto in ordine crescente:

svn log -r 1:HEAD

Per elencare tutto in ordine decrescente:

svn log -r HEAD:1

Per elencare tutto, dal tredicesimo alla base della revisione attualmente estratta in ordine crescente:

svn log -r 13:BASE

Per ottenere tutto tra le date indicate:

svn log -r {2011-02-02}:{2011-02-03}

È possibile combinare tutte le espressioni sopra con l' --limitopzione, in modo da avere un controllo abbastanza granulare su ciò che viene stampato. Per ulteriori informazioni su queste -respressioni, consultare svn help logo il capitolo pertinente nel libro Controllo versione con Subversion


8
Mille grazie per questa spiegazione, @Daniel Dinnyes - Ho spesso il problema opposto rispetto all'OP: svn log .può restituirmi solo la prima revisione (anche con svn log --limit 4 .); ma se chiamo svn log -r HEAD:1 ., finalmente ottengo tutte le voci elencate ... Grazie ancora - saluti!
sdaau,

Questo è meglio, poiché svn log mostra solo la cronologia delle modifiche del percorso corrente.
Ninja,

41

Mi piace usare -vper la modalità dettagliata.
Ti darà l'id di commit, i commenti e tutti i file interessati.

svn log -v --limit 4

Esempio di output:

I added some migrations and deleted a test xml file
------------------------------------------------------------------------
r58687 | mr_x | 2012-04-02 15:31:31 +0200 (Mon, 02 Apr 2012) | 1 line Changed
paths: 
A /trunk/java/App/src/database/support    
A /trunk/java/App/src/database/support/MIGRATE    
A /trunk/java/App/src/database/support/MIGRATE/remove_device.sql
D /trunk/java/App/src/code/test.xml

2
L'opzione dettagliata è estremamente utile
Jason George

E se il team di sviluppo è davvero gentile, inseriscono l'ID problema nel commento svn e puoi facilmente trovare il problema collegato al commit.
Jonas Söderström,

11

Instradare l'output attraverso lesso altri cercapersone:

svn log | less

1
Se hai revisioni> 23k, attendi ancora ~ 20 secondi per vedere le prime voci (e quando non usi il registro dettagliato). Ma è bello - mostra i più recenti in alto. E meglio del cercapersone 100 alla volta di TortoiseSVN! Quando vuoi tornare più indietro.
Tomasz Gandor,

6

Nel caso in cui qualcuno stia guardando questa vecchia domanda, un comodo comando per vedere le modifiche dall'ultimo aggiornamento:

svn log -r $(svn info | grep Revision | cut -f 2 -d ' '):HEAD -v

LE (grazie Gary per il commento)
stessa cosa, ma molto più breve e più logico:

svn log -r BASE:HEAD -v


8
o semplicementesvn log -r BASE:HEAD -v
Gary,

5

Per aggiungere ciò che altri hanno detto, puoi anche creare un alias nel tuo file .bashrc o .bash_aliases:

alias svnlog='svn log -l 30 | less'

o quello che vuoi come predefinito


4

Come hai già notato, il svn logcomando eseguito senza argomenti mostra tutti i messaggi di registro relativi all'URL specificato o alla cartella della copia di lavoro in cui si esegue il comando.

Puoi sempre affinare / limitare i svn logrisultati:

  • svn log --limit NUM mostrerà solo il primo NUM di revisioni,
  • svn log --revision REV1(:REV2) mostrerà il messaggio di registro per la revisione REV1 o per l'intervallo REV1 - REV2,
  • svn log --searchmostrerà le revisioni che corrispondono al modello di ricerca specificato (il comando è disponibile in Subversion 1.8 e client più recenti). Puoi cercare per
    • autore della revisione (es. nome utente committenti),
    • data di inizio della revisione,
    • testo del commento di revisione (messaggio di registro),
    • elenco di percorsi modificati in revisione.

4

Questa risposta è rivolta ad ulteriori domande riguardanti le opzioni dei sottocomandi Subversion. Per ogni sottocomando disponibile (ovvero aggiungi, registro, stato ...), puoi semplicemente aggiungere l' --helpopzione per visualizzare l'elenco completo delle opzioni disponibili che puoi utilizzare con il tuo sottocomando, nonché esempi su come usarli. Il frammento seguente viene preso direttamente svn log --helpdall'output del comando nella sezione "esempi":

Show the latest 5 log messages for the current working copy
directory and display paths changed in each commit:
  svn log -l 5 -v

3

Ma svn log è ancora in ordine inverso, cioè le voci più recenti vengono emesse per prime, scorrendo dalla parte superiore del mio terminale e sparendo. Voglio davvero vedere le ultime voci, ovvero l'ordinamento deve essere cronologico. L'unico comando che fa questo sembra essere svn log -r 1:HEADma che impiega troppo tempo in un repository con circa 10000 voci. Ho pensato a questo:

Visualizza le ultime 10 voci di sovversione in ordine cronologico:

svn log -r $(svn log -l 10 | grep '^r[0-9]* ' | tail -1 | cut -f1 -d" "):HEAD
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.