我们有一个包含数千个文件夹和子文件夹的代码的批量存储库,我想在此存储库下搜索文件名或一些单词。
Root folder
a\
b\
c\
d\
e\
f\ab\
f\ab\cd.txt
我想搜索cd.txt但不知道它在SVN Repository中的位置,因为我想在SVN的根文件夹上执行搜索,我将把文件名cd.txt放在运行命令中,将检入每个文件夹并显示文件详细信息结果....
希望要求很明确。你能帮我解决这个问题吗?
答案 0 :(得分:56)
如果文件在您的工作副本中,那么如果您使用的是svn 1.5:
svn list --depth infinity | grep <filename>
或svn的早期版本:
find . -name <filename> -not -path '*.svn*'
如果您需要在历史记录中找到该文件(已删除或已移动):
svn log -v | less
并使用以下方法搜索:
\<filename><return>
答案 1 :(得分:54)
以下适用于我(svn版本1.4.6)
svn list -R <URL> | grep "<file_pattern>"
答案 2 :(得分:17)
访问repo本身使用(即在你的svn主机文件系统上)
svnlook tree [path_to_repo] | grep [file_name]
或搜索所有repos(如果您有多个repos设置)。
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。
答案 3 :(得分:12)
svn list --depth infinity <your-repo-here>
获取repo中的文件列表,然后svn cat
获取内容。您可以将--xml
键添加到list
命令,以使解析更简单。
答案 4 :(得分:6)
最近我发布了我的utility来列出存储库,这比“svn ls --depth infinity”方法要快得多。这是benchmarks。它只调用Subversion内部API中可用的函数,但现在可以通过命令行访问。
所以你可以运行
$ svn-crawler <URL> | grep "<file_pattern>"
答案 5 :(得分:4)
如果你正在使用TortoiseSVN,你可以尝试这个,如果你愿意看项目项目 - 对我有用:
答案 6 :(得分:0)
VisualSVN Server 4.2(现已预发行;可作为4.2.0 RC1使用)支持在Web界面中按名称查找文件。在demo server上尝试新功能。
您可以从https://www.visualsvn.com/server/download/pre-release/下载VisualSVN Server 4.2.0 RC1。
答案 7 :(得分:-1)
如果您的远程存储库不是很大,那么一个简单的方法是: 您可以执行“结帐”以获取本地存储库。如果您在Windows机器中使用“搜索”或Linux机器使用“查找”命令。