86

我们有一个包含数千个文件夹和子文件夹的代码批量存储库,我想在这个存储库下搜索文件名或一些单词。

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

我想搜索 cd.txt 但不知道它在 SVN 存储库中的位置,因为我想在 SVN 的根文件夹上执行搜索,我将在其中放置文件名 cd.txt 并运行命令,将签入每个文件夹,并将显示文件详细信息结果....

希望要求很明确。你能帮我解决这个问题吗?

4

9 回答 9

62

以下对我有用(svn 版本 1.4.6)

svn list -R <URL> | grep "<file_pattern>"
于 2011-09-20T12:08:19.570 回答
60

如果文件在您的工作副本中,那么如果您使用的是 svn 1.5:

svn list --depth infinity | grep <filename>

或较早版本的 svn:

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

如果您需要在历史记录中查找文件(已删除或移动):

svn log -v | less

并通过以下方式搜索:

\<filename><return>
于 2009-04-01T10:30:28.337 回答
18

通过访问 repo 本身使用(即在您的 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 将在 repo 中提供文件的完整路径(如果找到)

例子:

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 OS。

于 2013-09-02T13:35:42.930 回答
12

svn list --depth infinity <your-repo-here>获取 repo 中的文件列表,然后svn cat获取内容。您可以将--xml键添加到list命令以使解析更简单。

于 2009-04-01T10:24:13.470 回答
6

最近我发布了我的实用程序来列出存储库,这比“svn ls --depth infinity”方法快得多。这是基准。它只是调用 Subversion 内部 API 中可用的函数,但现在可以通过命令行访问。

所以你可以运行

$ svn-crawler <URL> | grep "<file_pattern>"
于 2013-03-18T13:55:04.797 回答
4

如果您使用的是 TortoiseSVN,如果您愿意逐个项目地查看项目,则可以试试这个 - 对我有用:

  1. 在您的存储库顶级 URL 下创建一个空白项目,将其命名为 BLANK
  2. 单击左侧窗格中的 Repo URL
  3. 在右侧窗格中选择您的 BLANK 项目和您想要的项目 - 比如树干
  4. 右键单击以弹出浏览器菜单并选择“比较 URL”,具体取决于您的存储库的大小,加载可能需要一分钟。但是您基本上可以将整个项目列表放在“准备搜索”列表中。
  5. 在搜索过滤器中输入您的文件名或其他字符串
于 2012-11-15T21:54:49.747 回答
0

不确定使用其他工具过滤搜索结果是否是个好主意,例如svn+grep. 此类工具在 Windowsgrepsvn-crawler其他操作系统上可能不可用/不可用,您需要安装/升级它们。

--search您可以使用 1 个带有支持glob模式的标志的单个 svn 命令来解决此任务:

> svn ls -R --search "readme.md"
branches/0.13.x/readme.md
trunk/readme.md

> svn ls -R --search "*.md"
branches/0.13.x/189.md
branches/0.13.x/readme.md
trunk/189.md
trunk/readme.md

更多关于svn ls --search选项:

> svn ls -h                                
list (ls): List directory entries in the repository.
usage: list [TARGET[@REV]...]

  List each TARGET file and the contents of each TARGET directory as
  they exist in the repository.  If TARGET is a working copy path, the
  corresponding repository URL will be used. If specified, REV determines
  in which revision the target is first looked up.

...

Valid options:
  ...
  --search ARG             : use ARG as search pattern (glob syntax, case-
                             and accent-insensitive, may require quotation marks
                             to prevent shell expansion)
于 2022-02-02T04:08:48.163 回答
0

VisualSVN Server 4.2 支持在 Web 界面中按名称查找文件。在演示服务器上试用新功能。

您可以在https://www.visualsvn.com/server/download/pre-release/下载 VisualSVN Server 4.2.0 。请参阅https://www.visualsvn.com/server/download/上的发行说明。

在此处输入图像描述

于 2019-12-30T12:38:32.477 回答
-2

如果您的远程存储库不是很大,那么一个简单的方法是:您可以进行“签出”以获取本地存储库。如果您在 Windows 机器上使用“搜索”或 Linux 机器使用“查找”命令。

于 2016-03-02T07:10:31.540 回答