Поиск в истории подрывной деятельности (полный текст) - PullRequest
127 голосов
/ 04 сентября 2008

Есть ли способ выполнить полнотекстовый поиск в хранилище Subversion, включая всю историю?

Например, я написал функцию, которую использовал где-то, но тогда она была не нужна, поэтому я svn rm'd файлы, но теперь мне нужно найти ее снова, чтобы использовать ее для чего-то другого. Журнал svn, вероятно, говорит что-то вроде «удаленные неиспользованные вещи», и есть множество таких проверок.

Изменить 2016-04-15: Обратите внимание, что здесь задается термин "полнотекстовый поиск", это поиск фактических различий в истории фиксации, а не имен файлов и / или зафиксировать сообщения . Я указываю на это, потому что приведенная выше формулировка автора не очень хорошо отражает это - поскольку в своем примере он мог бы также искать только имя файла и / или сообщение о коммите. Отсюда множество svn log ответов и комментариев.

Ответы [ 16 ]

72 голосов
/ 29 сентября 2010
git svn clone <svn url>
git log -G<some regex>
39 голосов
/ 04 июля 2013

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

svn log --search поиск по автору, дате, тексту сообщения журнала и списку измененных путей.

См. SVNBook | svn log ссылка на командную строку .

23 голосов
/ 28 января 2009

Если вы работаете в Windows, взгляните на SvnQuery . Он поддерживает полнотекстовый индекс локальных или удаленных репозиториев. Каждый документ, когда-либо переданный в репозиторий, индексируется. Вы можете делать Google-подобные запросы из простого веб-интерфейса.

21 голосов
/ 07 января 2010

Я использую небольшой скрипт, но это работает только для одного файла. Конечно, вы можете объединить это с поиском, чтобы включить больше файлов.

#!/bin/bash
for REV in `svn log $1 | grep ^r[0-9] | awk '{print $1}'`; do 
  svn cat $1 -r $REV | grep -q $2
  if [ $? -eq 0 ]; then 
    echo "$REV"
  fi 
done

Если вы действительно хотите искать все, используйте команду svnadmin dump и выполните команду grep.

13 голосов
/ 04 сентября 2008

Лучший способ, который я нашел, это сделать с меньшими затратами:

svn log --verbose | меньше

Как только выводится меньше, вы можете нажать / для поиска, как VIM.

Edit:

По словам автора, он хочет искать не только сообщения и имена файлов. В этом случае вам нужно будет взломать его вместе с чем-то вроде:

svn diff -r0:HEAD | less

Вы также можете заменить grep или что-то еще, чтобы выполнить поиск для вас. Если вы хотите использовать это в подкаталоге хранилища, вам нужно будет использовать svn log, чтобы различить первую ревизию, в которой существовал этот каталог, и использовать эту ревизию вместо 0.

9 голосов
/ 04 сентября 2008

Я искал что-то подобное. Лучшее, что я придумал, это OpenGrok . Я еще не пытался реализовать это, но звучит многообещающе.

7 голосов
/ 14 октября 2015
svn log -v [repository] > somefile.log

для сравнения вы можете использовать --diff вариант

svn log -v --diff [repository] > somefile.log

затем используйте vim или nano или что угодно, и выполните поиск того, что вы ищете Вы найдете это довольно быстро.

Это не фантастический сценарий или что-то автоматизированное. Но это работает.

6 голосов
/ 26 апреля 2010

Хотя и не бесплатно, вы можете взглянуть на Fisheye от Atlassian, тех же самых людей, которые приносят вам JIRA. Он выполняет полнотекстовый поиск по SVN со многими другими полезными функциями.

http://www.atlassian.com/software/fisheye/

4 голосов
/ 24 июня 2010

Я только столкнулся с этой проблемой и

svnadmin dump <repo location> |grep -i <search term>

сделал работу за меня. Вернул ревизию первого вхождения и процитировал искомую строку.

4 голосов
/ 26 октября 2008

Я искал то же самое и нашел это:

http://svn -search.sourceforge.net /

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...