Найдите в репозитории SVN имя файла

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

Root folder
    a\
    b\
    c\
    d\
    e\
    f\ab\
    f\ab\cd.txt

Я хочу найти cd.txt, но не знаю, где он находится в репозитории SVN, для этого я хочу выполнить поиск в корневой папке SVN, где я помещаю имя файла cd.txt и запускаю команду, проверю каждую папку и отобразит результат с подробными сведениями о файле ....

Требование надежды ясно. Не могли бы вы помочь мне в этом.


person Community    schedule 01.04.2009    source источник
comment
Я надеялся, что вы можете ввести команду на стороне клиента, которая будет выполнять поиск на стороне сервера. У этого репозитория SVN, с которым я работаю, ужасное время отклика и скорость передачи по VPN. Увы, это кажется невозможным.   -  person Patrick M    schedule 04.02.2014


Ответы (8)


Для меня работает следующее (svn версия 1.4.6)

svn list -R <URL> | grep "<file_pattern>"
person Marios V    schedule 20.09.2011
comment
Здорово. Это работает для черепахи. В windows: svn list -R myurl ›› results.txt - person live-love; 06.08.2013
comment
Работает действительно хорошо. Также намного проще запомнить просто -R, чем --depth infinity. - person MPV; 14.08.2013
comment
медленный для больших репозиториев, тогда лучше использовать svn-crawler ниже. - person karsten; 27.09.2018

Если файл находится в вашей рабочей копии, то при использовании svn 1.5:

svn list --depth infinity | grep <filename>

или более ранняя версия svn:

find . -name <filename> -not -path '*.svn*'

Если вам нужно найти файл в истории (удален или перемещен):

svn log -v | less

и найдите его с помощью:

\<filename><return>
person lmop    schedule 01.04.2009
comment
svn list --depth infinity работает хорошо, в Windows, конечно, у вас не будет grep по умолчанию, я просто скопировал его в текстовый файл и просмотрел его с помощью текстового редактора: - person Mandrake; 10.03.2011
comment
В Windows PowerShell вы можете использовать ... | select-string <filename> вместо grep. - person MarnixKlooster ReinstateMonica; 21.03.2012
comment
В обычной командной строке Windows ... | find "<filename>" также будет работать как замена grep. ПРИМЕЧАНИЕ: обязательные символы вокруг имени файла. - person Raystorm; 28.11.2012
comment
Если файл находится в моей рабочей копии, мне не нужен svn для его поиска. Вы должны добавить, как искать репо, как ответы Антона и Мариоса. Возможно, для вас это очевидно, но именно их ответы зажгли свет для простого старого я. - person Lieven Keersmaekers; 09.01.2013
comment
Вы можете svn co --depth empty REPOURL RepoDir, cd RepoDir и svn list --depth infinity, а затем получить все пути к файлам с сервера SVN (возможно, создав миллионы строк, если у вас их миллионы). - person Ivan Akcheurov; 14.03.2015

С доступом к самому репо (то есть в вашей файловой системе хоста svn)

svnlook tree [path_to_repo] | grep [file_name]  

или выполнить поиск по всем репозиториям (если у вас настроено несколько репозиториев).

for i in \`ls [path_to_repos_dir]`; do echo $i; svnlook tree [path_to_repos_dir]/$i | grep -i [file_or_folder_name]; done 

опция --full-paths предоставит полный путь в репо к файлу (если он найден)

пример:

for i in `ls /u01/svn-1.6.17/repos`; do echo $i; svnlook tree --full-paths /u01/svn- 1.6.17/repos/$i | grep -i somefile.txt; done

перенаправить вывод в файл, если требуется статическая копия.
предполагает использование ОС nix.

person Robert Iles    schedule 02.09.2013
comment
+1 за использование svnlook tree --full-paths ‹path_to_repo› | grep ‹filename›. Это самый быстрый способ поиска файлов в репозитории Subversion, который я нашел. - person Nick Grealy; 04.09.2013
comment
молниеносный поиск, очень полезно. - person Dustin Cook; 08.01.2016

svn list --depth infinity <your-repo-here>, чтобы получить список файлов в репо, а затем svn cat, чтобы получить содержимое. Вы можете добавить ключ --xml к команде list, чтобы немного упростить синтаксический анализ.

person Anton Gogolev    schedule 01.04.2009
comment
Не забудьте использовать grep, если вы хотите увидеть 1 файл, особенно если у вас тысячи файлов в репозитории, например OP. Кроме того, есть режим --incremental, если вам нужно объединить вывод с более поздним / более ранним выводом XML. - person trysis; 08.06.2016

Недавно я опубликовал свою утилиту для вывода списка репозиториев, это намного быстрее, чем "svn ls --depth бесконечность "подхода. Вот контрольные показатели. Он просто вызывает функцию, которая доступна во внутреннем API Subversion, но теперь доступна через командную строку.

Так что ты можешь бежать

$ svn-crawler <URL> | grep "<file_pattern>"
person Dmitry Pavlenko    schedule 18.03.2013
comment
Хороший инструмент. Я тестировал CentOS7. Мне пришлось добавить libsvn_delta и libsvn_subr в список target_link_libraries в CMakeLists.txt, а также адаптировать LIBAPR_LIBRARY_INCLUDE из include / apr-1.0 для включения / apr-1. - person karsten; 27.09.2018

Если вы используете TortoiseSVN, вы можете попробовать это, ЕСЛИ вы хотите посмотреть Project by Project - у меня работает:

  1. Создайте пустой проект под URL-адресом верхнего уровня репозитория, назовите его ПУСТОЙ
  2. Щелкните URL-адрес репо на левой панели.
  3. На правой панели выберите свой ПУСТОЙ проект и желаемый проект - скажем, ствол.
  4. Щелкните правой кнопкой мыши, чтобы открыть меню браузера и выбрать «Сравнить URL-адреса», в зависимости от размера вашего репо загрузка может занять минуту. Но в основном вы получаете весь список проектов в виде списка, «готового к поиску».
  5. Введите имя файла или другую строку в поисковом фильтре.
person dci_dave    schedule 15.11.2012

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

Вы можете загрузить VisualSVN Server 4.2.0 со страницы https://www.visualsvn.com/server/download/pre-release/. См. Примечания к выпуску на странице https://www.visualsvn.com/server/download/. .

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

person bahrep    schedule 30.12.2019

Если ваш удаленный репозиторий невелик, то простой способ: вы можете выполнить «проверку», чтобы получить локальный репозиторий. Если вы работаете на компьютере с Windows, используйте команду «Поиск», а на компьютере с Linux - команду «Найти».

person Antony Raja    schedule 02.03.2016