Поиск репозитория SVN [закрыто]

155

Есть ли хорошее программное обеспечение, которое позволит мне искать в моем репозитории SVN фрагменты кода? Я нашел «FishEye», но его стоимость составляет 1200 и выходит за рамки моего бюджета.

Джон
источник
6
Нужно ли искать в истории репо? Или только голова?
swilliams
4
Существует бесплатная версия FishEye - www.atlassian.com/starter
Дэвид Д и Фрейтас
1
@DavidFreitas сейчас нет бесплатных опций
bahrep
Существует версия FishEye за $ 10: www.atlassian.com/software/starter/overview , @bahrep. Однажды все идет на благотворительность.
Дэвид д С е Фрейтас
1
Появилась новая svn log --searchопция, которая может пригодиться тем, кто ищет простой поиск по истории репозитория.
Бахреп

Ответы:

69

Если вы ищете только имя файла, используйте:

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

Окна:

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

В противном случае проверьте и выполните поиск в файловой системе:

egrep -r _code_ .
phil_w
источник
3
Это может быть не совсем очевидно, но эти команды применимы к любому методу доступа к серверу svn, а не только к файлу: (например, svn: и svn + ssh: также работают)
Алекс Маршалл
2
//, не могли бы вы привести рабочий пример для каждого из них?
Натан Басанезе
1
ОП хотел искать по файлам, а не только по именам файлов. Пример поиска файловой системы не очень полезен.
erict
37

Существует sourceforge.net/projects/svn-search .

Существует также приложение для Windows непосредственно из дома SVN под названием SvnQuery, доступное по адресу http://svnquery.tigris.org.

Эльмар Вебер
источник
1
Я только что скачал это сам - версия 1.2.2.0 в настоящее время доступна. (то есть из беты)
Бретт Ригби
Новый источник Forge URL для поиска SVN: svn-search.sourceforge.net
Роберт Брисита
12

Обновление январь 2020

VisualSVN Server 4.2 поддерживает поиск файлов и папок в веб-интерфейсе. Попробуйте новую функцию в одном из репозиториев демо-сервера !

См. Примечания к выпуску версии 4.2 и загрузите VisualSVN Server 4.2.0 с главной страницы загрузки .

введите описание изображения здесь


Старый ответ

Начиная с Subversion 1.8, вы можете использовать --searchопцию с svn logкомандой . Обратите внимание, что команда не выполняет полнотекстовый поиск внутри репозитория, она учитывает только следующие данные:

  • автор ревизии (svn:author неверсионная собственность),
  • Дата (svn:date неверсионная собственность),
  • текст сообщения журнала (svn:log неверсионное свойство),
  • список измененных путей (то есть путей, затронутых конкретной ревизией).

Вот страница справки об этих новых параметрах поиска:

 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
источник
1
Этот метод работает быстро, но не должен использоваться для поиска наличия файлов. Поскольку эта опция поиска только анализирует список явно измененных путей в каждой ревизии, вы можете создавать копии папок (новая ветвь, созданная из ствола), где присутствует определенный файл, но он не будет отображаться в этом методе.
Питер-Ян Буссхарт
@ Pieter-JanBusschaert Ваш комментарий касается использования команды svn log --search. Смотрите обновленный ответ о новом веб-поиске. У него нет этого ограничения.
bahrep
9
  1. Создайте git-svnзеркало этого хранилища.
  2. Поиск добавленных или удаленных строк внутри git: git log -S'my line of code'или то же самое вgitk

Преимущество заключается в том, что вы можете выполнять много запросов локально, без загрузки сервера и сетевого подключения.

Vi.
источник
8

В этом примере все содержимое хранилища передается в файл, который затем можно быстро найти в редакторе по именам файлов:

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

Это полезно, если репозиторий относительно статичен и вы хотите выполнять быстрый поиск без необходимости многократной загрузки всего с сервера SVN.

Контанго
источник
4
Должен отметить, что в моем случае это было необходимо использовать httpв качестве протокола ( svn list -R http://repo/svn/etc).
Чарльз Вуд
отказался, потому что OP хотел искать по файлам, а не по именам файлов. Команда svn list выводит только имена файлов репозитория.
erict
4

Мне нравится TRAC - этот плагин может быть полезен для вашей задачи: http://trac-hacks.org/wiki/RepoSearchPlugin

Кай
источник
это выглядит несколько многообещающе ... но не слишком легко установить, не может подтвердить, работает ли он с Trac + VisualSVN Server.
Кит Роед
4

Отметим, что FishEye (и многие другие продукты Atlassian) имеют версии для начинающих по 10 долларов, что в случае с FishEye дает вам 5 хранилищ и доступ к 10 коммиттерам. В этом случае деньги идут на благотворительность.

www.atlassian.com/starter

Дэвид д С е Фрейтас
источник
Уже нет? Я не вижу бесплатных опций на странице.
13
@bahrep, я обновил ответ, теперь 10 долларов идут на благотворительность, которая фактически «бесплатна», если подумать.
Дэвид д С е Фрейтас
3

Ужасно медленно (и грубо реализовано), но комбинация svn log и svn cat работает, если вы ищете историю отдельных файлов или небольших репозиториев:

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

будет выводить каждый номер ревизии, где файл изменился, и файл. Вы всегда можете поместить каждую ревизию в отдельный файл и затем выполнить поиск изменений.

PS. Массовые отзывы всем, кто показывает мне, как сделать это правильно!

кругозор
источник
3
Просто используйте git-svn. Git имеет встроенный поиск кода в истории коммитов. Но вам нужно будет загрузить всю историю коммитов для использования git-svn.
Ви.
2

Если вы действительно в отчаянии, сделайте дамп репозитория (посмотрите на «svnadmin dump») и затем выполните его. Это не красиво, но вы можете просмотреть результаты поиска, чтобы найти метаданные, которые указывают на файл и ревизию, а затем проверить это для лучшего просмотра.

Конечно, это не очень хорошее решение, но оно бесплатное :). SVN не предоставляет возможности поиска по прошлым проверкам (или даже прошлым файлам журналов, AFAIK).

rmeador
источник
1

Многие репозитории SVN являются «простыми» HTTP-сайтами, поэтому вы можете рассмотреть поиск готового «поискового веб-приложения», которое вы можете указать на корневой каталог SVN, и оно даст вам базовую функциональность. Обновление, вероятно, будет небольшим уловкой, возможно, некоторая проверка SVN в хакерских целях может щекотать индекс, чтобы отменить или переиндексировать изменения по мере продвижения.

Просто мысли вслух.

Уилл Хартунг
источник
1
Это, вероятно, не очень хорошая идея, так как накладные расходы будут огромными. Кроме того, SVN-серверы обычно не являются обычными веб-страницами, а представляют собой репозиторий svn, предоставляемый через webdav.
torkildr
1

theres krugle и koders, но оба дороги. Оба имеют плагины ide для затмения.

Брендон-Ван-Heyzen
источник
2
А как насчет Krugle Basic?
Бард
1

Я начал использовать этот инструмент

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

Он отлично работает, просто не хватает визуального интерфейса, но он быстрый и немного поддерживается

Kuryaki
источник
1
В настоящее время (август 2012 г.) проект, похоже, застопорился ...
anol
В декабре 2012 года они выпустили что-то новое (0.7.1)
sendmoreinfo
2
кажется, исчезли
fbstj
0

// Редактировать: Инструмент уже упоминался в другом ответе, поэтому отдайте все кредиты Куряки.

Только что обнаружен SupoSE, который является инструментом командной строки на основе Java, который сканирует репозиторий для создания индекса и впоследствии может отвечать на определенные виды запросов. Мы все еще оцениваем инструмент, но он выглядит многообещающим. Стоит отметить, что он делает полный индекс всех ревизий, включая файлы исходного кода и распространенные офисные форматы.

Jek
источник