Como você vê entradas recentes de log SVN?

194

A digitação svn logcospe uma lista incrivelmente longa e inútil em uma linha de comando. Eu não tenho idéia do porquê esse é o padrão. Se eu quisesse ler (ou mesmo pudesse ler) 300 entradas no terminal, não me importaria de digitar svn log --fullou algo parecido.

Talvez o pessoal do SVN esteja pensando que eu queria alimentar essa saída para outro programa. No entanto, se for esse o caso, faria mais sentido receber a chamada mais detalhada do programa - não o usuário do terminal.

De qualquer forma, como vejo apenas algumas atividades recentes, como as últimas 5 ou 10 entradas, para ver o que mudou?

Xeoncross
fonte
9
Sim, isso realmente deve funcionar como git log,.
Paul Draper

Respostas:

261

limit opção, por exemplo:

svn log --limit 4

svn log -l 4

Apenas as últimas 4 entradas

Bert F
fonte
127

Além do que Bert F disse , muitos comandos, incluindo loga opção -r(ou --revision). A seguir, alguns exemplos práticos usando essa opção para mostrar intervalos de revisões:

Para listar tudo em ordem crescente:

svn log -r 1:HEAD

Para listar tudo em ordem decrescente:

svn log -r HEAD:1

Para listar tudo, desde o décimo terceiro até a base da revisão atualmente em check-out, em ordem crescente:

svn log -r 13:BASE

Para obter tudo entre as datas especificadas:

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

Você pode combinar todas as expressões acima com a --limitopção, para ter um controle bastante granular sobre o que é impresso. Para mais informações sobre essas -rexpressões, consulte svn help logou o capítulo relevante no livro Controle de Versão com Subversion

Daniel Dinnyes
fonte
8
Muito obrigado por essa explicação, @ Daniel Dinnyes - muitas vezes tenho o problema oposto do OP: svn log .pode retornar apenas a primeira revisão para mim (da mesma forma que com svn log --limit 4 .); mas se eu ligar svn log -r HEAD:1 ., finalmente recebo todas as entradas listadas ... Mais uma vez obrigado - vivas!
Sdaau
Isso é melhor, pois svn log mostra apenas o histórico de alterações do caminho atual.
Ninja
41

Eu gosto de usar -vpara o modo detalhado.
Ele fornecerá o ID de confirmação, comentários e todos os arquivos afetados.

svn log -v --limit 4

Exemplo de saída:

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
Jonas Söderström
fonte
2
A opção detalhada é extremamente útil
Jason George
E se a equipe de desenvolvimento é realmente gentil, eles colocam o ID do problema no comentário do svn e você pode facilmente encontrar o problema conectado ao commit.
Jonas Söderström 18/03/2013
11

Canalize a saída através de lessou outro pager:

svn log | less
Greg Hewgill
fonte
1
Se você tiver mais de 23 mil revisões, ainda esperará ~ 20 segundos para ver as primeiras entradas (e quando não estiver usando o registro detalhado). Mas é legal - mostra os mais recentes no topo. E melhor do que a paginação 100 por vez do TortoiseSVN! Quando você quiser voltar mais.
Tomasz Gandor
6

Caso alguém esteja olhando para essa pergunta antiga, um comando útil para ver as alterações desde sua última atualização:

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

LE (obrigado Gary pelo comentário) a
mesma coisa, mas muito mais curta e mais lógica:

svn log -r BASE:HEAD -v

Catalin
fonte
8
ou apenassvn log -r BASE:HEAD -v
Gary
5

Para adicionar ao que os outros disseram, você também pode criar um alias no arquivo .bashrc ou .bash_aliases:

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

ou o que você quiser como padrão

james-geldart
fonte
4

Como você já notou, o svn logcomando executado sem argumentos mostra todas as mensagens de log relacionadas ao URL especificado ou à pasta da cópia de trabalho em que o comando é executado.

Você sempre pode refinar / limitar os svn logresultados:

  • svn log --limit NUM mostrará apenas o primeiro NUM de revisões,
  • svn log --revision REV1(:REV2) mostrará a mensagem de log para a revisão REV1 ou para o intervalo REV1 - REV2,
  • svn log --searchmostrará revisões que correspondem ao padrão de pesquisa especificado (o comando está disponível no Subversion 1.8 e em um cliente mais recente). Você pode pesquisar por
    • autor da revisão (nome do usuário do autor)
    • data em que a revisão foi confirmada,
    • texto do comentário de revisão (mensagem de log),
    • lista de caminhos alterados na revisão.
bahrep
fonte
4

Esta resposta é direcionada a outras perguntas sobre as opções de subcomandos do Subversion. Para cada subcomando disponível (por exemplo, adicionar, log, status ...), você pode simplesmente adicionar a --helpopção para exibir a lista completa de opções disponíveis que você pode usar com seu subcomando, além de exemplos de como usá-las. O seguinte snippet é obtido diretamente da svn log --helpsaída do comando na seção "examples":

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

Mas o svn log ainda está na ordem inversa, ou seja, as entradas mais recentes são exibidas primeiro, saindo da parte superior do meu terminal e desaparecendo. Eu realmente quero ver as últimas entradas, ou seja, a ordem de classificação deve ser cronológica. O único comando que faz isso parece ser, svn log -r 1:HEADmas leva muito tempo em um repositório com cerca de 10000 entradas. Eu vim acima isso:

Exiba as últimas 10 entradas do subversion em ordem cronológica:

svn log -r $(svn log -l 10 | grep '^r[0-9]* ' | tail -1 | cut -f1 -d" "):HEAD
Othmar Wigger
fonte