Пошук у сховищі SVN [закрито]


155

Чи є якесь хороше програмне забезпечення, яке дозволить мені шукати фрагменти коду через мій сховище SVN? Я знайшов "FishEye", але вартість становить 1200 і набагато перевищує мій бюджет.


6
Чи потрібно шукати історію репо? Або просто голова?
swilliams

4
Є безкоштовна версія програми FishEye - www.atlassian.com/starter
David d C e Freitas

1
@DavidFreitas зараз немає вільних варіантів
bahrep

Існує версія FishEye на $ 10: www.atlassian.com/software/starter/overview , @bahrep. Після відключення все надходить на благодійність.
David d C e Freitas

1
Існує нова svn log --searchопція, яка може бути корисною для тих, хто шукає простий пошук історії сховищ.
bahrep

Відповіді:


69

Якщо ви шукаєте лише ім'я файлу, використовуйте:

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

Windows:

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

Інакше оформити пошук та виконати пошук файлової системи:

egrep -r _code_ .

3
Це може бути не зовсім очевидно, але ці команди застосовуються до будь-якого методу доступу до сервера svn, а не лише до файлу: (наприклад, svn: і svn + ssh: також працюють)
Alex Marshall

2
// Ви б не хотіли запропонувати робочий приклад для кожного з них?
Натан Басанес

1
ОП хотіла шукати файли, а не лише імена файлів. Приклад пошуку файлової системи не дуже usefule.
обмежитись

37

Є sourceforge.net/projects/svn-search .

Також є програма Windows безпосередньо з дому SVN під назвою SvnQuery, доступна на веб-сайті http://svnquery.tigris.org


1
Я щойно завантажив це - версія 1.2.2.0 наразі доступна. (тобто з Beta)
Бретт Рігбі

Нова джерела Forge URL для SVN Пошук: svn-search.sourceforge.net
Robert Brisita

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.

1
Цей метод працює швидко, але його не слід використовувати для пошуку наявності файлів. Оскільки цей параметр пошуку розбирає лише список явно змінених контурів у кожній редакції, ви можете створити копії папок (нова гілка, створена зі стовбура), де є певний файл, але цей метод не буде перерахований.
Пітер-Ян Бусшаерт

@ Pieter-JanBusschaert ваш коментар стосується використання команди svn log --search. Дивіться оновлену відповідь про новий пошук на базі webui. Це обмеження не має.
bahrep


9
  1. Створіть git-svn дзеркало цього сховища.
  2. Шукайте додані або вилучені рядки всередині git: git log -S'my line of code'або ж уgitk

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


8

Цей приклад передає повний вміст сховища у файл, який ви зможете швидко шукати назви файлів у редакторі:

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

Це корисно, якщо сховище відносно статичне і ви хочете робити швидкий пошук без необхідності повторного завантаження всього з SVN-сервера.


4
Слід зазначити, що в моєму випадку потрібно було використовувати httpяк протокол ( svn list -R http://repo/svn/etc).
Чарлз Вуд

знижено, тому що ОП хотів шукати файли, а не імена файлів. Команда svn list лише скидає назви файлів сховища.
обмежитись

4

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


це виглядає дещо перспективно ... але не надто просто простий в установці, не можу підтвердити, чи працює він із Trac + VisualSVN Server.
Кіт Род

4

Зауважте лише, що FishEye (та багато інших продуктів Atlassian) мають $ 10 Starter Edition, що у випадку FishEye надає 5 сховищ та доступ до 10 комітетів. У цьому випадку гроші йдуть на благодійність.

www.atlassian.com/starter


Більше не? Я не бачу вільних варіантів на сторінці.
bahrep

@bahrep, я оновив відповідь, зараз це 10 доларів, які надходять на благодійність, що ефективно "безкоштовно", якщо ви подумаєте про це.
David d C e Freitas

3

Болісно повільний (і грубо реалізований), але комбінація журналу svn та 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).


1

Багато репортажів SVN - це просто "HTTP-сайти", тож ви можете поглянути на пошуковий додаток "веб-сканування", який можна вказати на корінь SVN, і це дасть вам основну функціональність. Оновити це, ймовірно, буде трохи хитрощами, можливо, деякі перевірки SVN в хакерстві можуть позначати індекс, щоб відкинути або перевстановити зміни в процесі роботи.

Просто думаючи вголос.


1
Це, мабуть, не гарна ідея, оскільки накладні витрати були б величезними. Також SVN-сервери, як правило, не є звичайними веб-сторінками, а svn repo, відкриті через webdav.
torkildr


1

Я почав використовувати цей інструмент

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

Він прекрасно працює лише без візуального інтерфейсу, але швидко і дещо підтримується


1
На сьогодні (серпень 2012 року) проект, схоже,
затих

У грудні 2012 року вони випустили щось нове (0.7.1)
sendmoreinfo

2
здається, зникли
fbstj

0

// Редагувати: Інструмент вже згадувався в іншій відповіді, тому надайте всі кредити Курякі.

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.