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.


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

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.

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.


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.


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

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


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!


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


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.


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



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.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.