Pesquisa no Repositório SVN [fechada]

155

Existe algum software bom que me permita pesquisar trechos de código no meu repositório SVN? Encontrei 'FishEye', mas o custo é de 1.200 e está bem fora do meu orçamento.

John
fonte
6
Você precisa pesquisar o histórico do repositório? Ou apenas a cabeça?
31580
4
Existe uma versão gratuita do FishEye - www.atlassian.com/starter
David d C e Freitas
1
@DavidFreitas agora não há opções gratuitas
bahrep
Existe uma versão de US $ 10 do FishEye: www.atlassian.com/software/starter/overview , @bahrep. Uma vez desligado, tudo passa para a caridade.
David d C e Freitas
1
Há uma nova svn log --searchopção, que pode ser útil para quem procura uma pesquisa simples no histórico do repositório.
bahrep

Respostas:

69

Se você estiver pesquisando apenas o nome do arquivo, use:

svn list -R file:///subversion/repository | grep filename

Janelas:

svn list -R file:///subversion/repository | findstr filename

Caso contrário, faça o checkout e faça a pesquisa no sistema de arquivos:

egrep -r _code_ .
phil_w
fonte
3
Pode não ser inteiramente óbvio, mas estes comandos aplicam-se a qualquer método de acessar um servidor svn, e não apenas de arquivos: (por exemplo, svn: e svn + ssh: também trabalho)
Alex Marshall
2
//, você se importaria em fornecer um exemplo prático para cada um deles?
Nathan Basanese
1
O OP queria pesquisar os arquivos, não apenas os nomes de arquivos. exemplo de pesquisa de sistema de arquivos não muito útil.
erict
12

Atualização janeiro de 2020

O VisualSVN Server 4.2 oferece suporte à localização de arquivos e pastas na interface da web. Experimente o novo recurso em um dos repositórios do servidor de demonstração !

Consulte as Notas da versão versão 4.2 e faça o download do VisualSVN Server 4.2.0 na página principal de download .

insira a descrição da imagem aqui


Resposta antiga

Começando com o Subversion 1.8, você pode usar --searcha opção com svn logo comando . Observe que o comando não realiza pesquisa de texto completo dentro de um repositório, mas considera apenas os seguintes dados:

  • autor da revisão ( svn:authorpropriedade não versionada),
  • data ( svn:datepropriedade não versionada),
  • texto da mensagem de log ( svn:logpropriedade não versionada),
  • lista de caminhos alterados (isto é, caminhos afetados pela revisão específica).

Aqui está a página de ajuda sobre essas novas opções de pesquisa:

 If the --search option is used, log messages are displayed only if the
 provided search pattern matches any of the author, date, log message
 text (unless --quiet is used), or, if the --verbose option is also
 provided, a changed path.
 The search pattern may include "glob syntax" wildcards:
     ?      matches any single character
     *      matches a sequence of arbitrary characters
     [abc]  matches any of the characters listed inside the brackets
 If multiple --search options are provided, a log message is shown if
 it matches any of the provided search patterns. If the --search-and
 option is used, that option's argument is combined with the pattern
 from the previous --search or --search-and option, and a log message
 is shown only if it matches the combined search pattern.
 If --limit is used in combination with --search, --limit restricts the
 number of log messages searched, rather than restricting the output
 to a particular number of matching log messages.
bahrep
fonte
1
Este método funciona rápido, mas não deve ser usado para procurar a presença de arquivos. Como essa opção de pesquisa analisa apenas a lista de caminhos alterados explicitamente em cada revisão, você pode criar cópias de pastas (nova ramificação criada a partir do tronco) onde um determinado arquivo estiver presente, mas não será listado por esse método.
Pieter-Jan Busschaert 27/03/19
@ Pieter-JanBusschaert, seu comentário é sobre o uso do comando svn log --search. Veja a resposta atualizada sobre a nova pesquisa baseada em webui. Não tem essa limitação.
bahrep 11/01
9
  1. Crie git-svnespelho desse repositório.
  2. Procure por cadeias adicionadas ou removidas no git: git log -S'my line of code'ou o mesmo emgitk

A vantagem é que você pode fazer muitas pesquisas localmente, sem carregar o servidor e a conexão de rede.

Vi.
fonte
8

Este exemplo canaliza o conteúdo completo do repositório para um arquivo, que você pode procurar rapidamente por nomes de arquivos em um editor:

svn list -R svn://svn > filelist.txt

Isso é útil se o repositório for relativamente estático e você desejar fazer pesquisas rápidas sem precisar carregar repetidamente tudo do servidor SVN.

Contango
fonte
4
Devo observar que, no meu caso, era necessário usar httpcomo protocolo ( svn list -R http://repo/svn/etc).
Charles Wood
com voto negativo, porque o OP queria pesquisar nos arquivos, não nos nomes dos arquivos. O comando svn list apenas despeja os nomes de arquivos do repositório.
erict
4

Eu gosto do TRAC - este plugin pode ser útil para sua tarefa: http://trac-hacks.org/wiki/RepoSearchPlugin

Kai
fonte
isso parece um pouco promissor ... mas não muito fácil de instalar, não é possível confirmar se funciona com o Trac + VisualSVN Server.
Kit Roed
4

Apenas uma observação, o FishEye (e muitos outros produtos da Atlassian) têm edições iniciais de US $ 10, que no caso do FishEye oferecem 5 repositórios e acesso para até 10 usuários. O dinheiro vai para caridade neste caso.

www.atlassian.com/starter

David d C e Freitas
fonte
Não mais? Não vejo opções gratuitas na página.
bahrep
@ Bahrep, eu atualizei a resposta, agora são US $ 10 que vão para instituições de caridade que são efetivamente "gratuitas" se você pensar sobre isso.
David d C e Freitas
3

Muito lento (e implementado de maneira grosseira), mas uma combinação de svn log e svn cat funciona se você estiver pesquisando o histórico de arquivos únicos ou de pequenos repositórios:

svn log filetosearch |
    grep '^r' |
    cut -f1 -d' ' |
    xargs -i bash -c "echo '{}'; svn cat filetosearch -'{}'" 

produzirá cada número de revisão em que o arquivo foi alterado e o arquivo. Você sempre pode colocar cada revisão em um arquivo diferente e depois aguardar as alterações.

PS. Votos maciços para qualquer pessoa que me mostre como fazer isso corretamente!

Ken
fonte
3
Apenas use git-svn. O Git incorporou a pesquisa de código no histórico de consolidação. Mas você precisará fazer o download de todo o histórico de consolidação para usar git-svn.
Vi.
2

Se você estiver realmente desesperado, faça um despejo do repositório (veja "svnadmin dump") e depois faça o grep. Não é bonito, mas você pode procurar os resultados da pesquisa para encontrar os metadados que indicam o arquivo e a revisão e, em seguida, verificar para ver melhor.

Não é uma boa solução, com certeza, mas é gratuita :) O SVN não oferece nenhum recurso para pesquisar checkins anteriores (ou mesmo arquivos de log antigos, AFAIK).

rmeador
fonte
1

Muitos repositórios SVN são "simplesmente" sites HTTP, portanto, você pode considerar olhar para algum aplicativo de pesquisa "rastreamento da Web" disponível na prateleira que possa apontar para a raiz do SVN e fornecerá funcionalidade básica. Atualizá-lo provavelmente será um pouco complicado, talvez um hackeamento de SVN no hackery possa agregar o índice para descartar ou reindexar as alterações à medida que você avança.

Apenas pensando em voz alta.

Will Hartung
fonte
1
Provavelmente, essa não é uma boa ideia, pois a sobrecarga envolvida seria enorme. Além disso, os servidores SVN geralmente não são páginas da Web comuns, mas um repositório svn exposto através do webdav.
torkildr
1

há krugle e koders, mas ambos são caros. Ambos têm plugins ide para eclipse.

Brendon-Van-Heyzen
fonte
2
E o Krugle Basic?
Bård
1

Comecei a usar esta ferramenta

http://www.supose.org/wiki/supose

Funciona bem, sem uma interface visual, mas é rápido e um pouco mantido

Kuryaki
fonte
1
Hoje (agosto de 2012) o projeto parece ter parado ...
anol
Em dezembro de 2012, eles lançaram algo novo (0.7.1)
sendmoreinfo
2
parece ter desaparecido #
1912 fbstj
0

// Edit: A ferramenta já foi mencionada em outra resposta, portanto, dê todos os créditos ao Kuryaki.

Acabei de encontrar o SupoSE, que é uma ferramenta de linha de comando baseada em java que varre um repositório para criar um índice e depois é capaz de responder a certos tipos de consultas. Ainda estamos avaliando a ferramenta, mas ela parece promissora. Vale ressaltar que ele faz um índice completo de todas as revisões, incluindo arquivos de código-fonte e formatos comuns de escritório.

jek
fonte