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

84

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

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

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

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

Накилон
источник
Я надеялся, что вы можете ввести команду на стороне клиента, которая будет выполнять поиск на стороне сервера. У этого репозитория SVN, с которым я работаю, ужасное время отклика и скорость передачи по VPN. Увы, это кажется невозможным.
Patrick M

Ответы:

60

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

svn list --depth infinity | grep <filename>

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

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

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

svn log -v | less

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

\<filename><return>
lmop
источник
3
svn list --depth infinity работает хорошо, конечно, в windows у вас не будет grep по умолчанию, я просто скопировал его в текстовый файл и просмотрел его в текстовом редакторе:
Mandrake
5
В Windows PowerShell вы можете использовать ... | select-string <filename>вместо grep.
MarnixKlooster ReinstateMonica
2
В обычной командной строке Windows ... | find "<filename>"также будет работать как замена grep. ПРИМЕЧАНИЕ .
Символы
7
Если файл находится в моей рабочей копии, мне не нужен svn для его поиска. Вы должны добавить, как искать репо, как ответы Антона и Мариоса. Возможно, для вас это очевидно, но именно их ответы зажгли свет для простого старого я.
Ливен Кеерсмэкерс
1
Вы можете svn co --depth empty REPOURL RepoDir, cd RepoDirа svn list --depth infinityзатем получить все пути к файлам с сервера SVN (возможно, создав миллионы строк, если у вас их миллионы).
Иван Акчеуров,
58

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

svn list -R <URL> | grep "<file_pattern>"
Мариос V
источник
6
Отлично. Это работает для черепахи. В windows: svn list -R myurl >> results.txt
live-love
Очень хорошо работает. Также гораздо проще запомнить просто «-R», чем «--depth infinity».
MPV
медленный для больших репозиториев, тогда лучше использовать svn-crawler ниже.
karsten
17

С доступом к самому репо (т.е. на вашей файловой системе хоста 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.

Роберт Айлс
источник
3
+1 за использование "svnlook tree --full-paths <path_to_repo> | grep <filename>". Это самый быстрый способ поиска файлов в репозитории Subversion, который я нашел.
Ник Грили
молниеносный поиск, очень полезно.
Дастин Кук,
12

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

Антон Гоголев
источник
Не забудьте использовать, grepесли вы хотите увидеть 1 файл, особенно если у вас тысячи файлов в репозитории, например OP. Кроме того, есть --incrementalрежим, если вам нужно объединить вывод с более поздним / более ранним выводом XML.
trysis 08
6

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

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

$ svn-crawler <URL> | grep "<file_pattern>"
Дмитрий Павленко
источник
Хороший инструмент. Я тестировал с CentOS7. Мне пришлось добавить libsvn_delta и libsvn_subr в список target_link_libraries в CMakeLists.txt, а также адаптировать LIBAPR_LIBRARY_INCLUDE с «include / apr-1.0» на «include / apr-1».
karsten
4

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

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

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

Энтони Раджа
источник