Поиск в SVN-репозитории по имени файла - PullRequest
78 голосов
/ 01 апреля 2009

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

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

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

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

Ответы [ 7 ]

56 голосов
/ 01 апреля 2009

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

svn list --depth infinity | grep <filename>

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

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

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

svn log -v | less

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

\<filename><return>
54 голосов
/ 20 сентября 2011

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

svn list -R <URL> | grep "<file_pattern>"
17 голосов
/ 02 сентября 2013

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

12 голосов
/ 01 апреля 2009

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

6 голосов
/ 18 марта 2013

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

Так что вы можете запустить

$ svn-crawler <URL> | grep "<file_pattern>"
4 голосов
/ 16 ноября 2012

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

  1. Создайте пустой проект под URL верхнего уровня вашего хранилища, назовите его BLANK
  2. Нажмите на ссылку Repo на левой панели
  3. В правой части окна выберите свой BLANK проект и желаемый проект - скажем, ствол
  4. Щелкните правой кнопкой мыши, чтобы открыть меню браузера, и выберите «Сравнить URL-адреса», в зависимости от размера репо загрузка может занять минуту. Но вы в основном получаете весь список своих проектов в виде списка, готового к поиску.
  5. Введите имя вашего файла или другую строку в поисковом фильтре
0 голосов
/ 02 марта 2016

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

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