我们有一个包含数千个文件夹和子文件夹的代码批量存储库,我想在这个存储库下搜索文件名或一些单词。
Root folder
a\
b\
c\
d\
e\
f\ab\
f\ab\cd.txt
我想搜索 cd.txt 但不知道它在 SVN 存储库中的位置,因为我想在 SVN 的根文件夹上执行搜索,我将在其中放置文件名 cd.txt 并运行命令,将签入每个文件夹,并将显示文件详细信息结果....
希望要求很明确。你能帮我解决这个问题吗?
以下对我有用(svn 版本 1.4.6)
svn list -R <URL> | grep "<file_pattern>"
如果文件在您的工作副本中,那么如果您使用的是 svn 1.5:
svn list --depth infinity | grep <filename>
或较早版本的 svn:
find . -name <filename> -not -path '*.svn*'
如果您需要在历史记录中查找文件(已删除或移动):
svn log -v | less
并通过以下方式搜索:
\<filename><return>
通过访问 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。
svn list --depth infinity <your-repo-here>
获取 repo 中的文件列表,然后svn cat
获取内容。您可以将--xml
键添加到list
命令以使解析更简单。
如果您使用的是 TortoiseSVN,如果您愿意逐个项目地查看项目,则可以试试这个 - 对我有用:
不确定使用其他工具过滤搜索结果是否是个好主意,例如svn+grep
. 此类工具在 Windowsgrep
或svn-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)
VisualSVN Server 4.2 支持在 Web 界面中按名称查找文件。在演示服务器上试用新功能。
您可以在https://www.visualsvn.com/server/download/pre-release/下载 VisualSVN Server 4.2.0 。请参阅https://www.visualsvn.com/server/download/上的发行说明。
如果您的远程存储库不是很大,那么一个简单的方法是:您可以进行“签出”以获取本地存储库。如果您在 Windows 机器上使用“搜索”或 Linux 机器使用“查找”命令。