0

我遇到了问题,我必须在 10 年的大量 svn 历史中搜索特定类型的文件(*.xxx)。我对svn的工作原理不是很熟悉。一开始,搜索当前状态下的所有存储库就足够了,而不是历史深度。我认为,这样的事情应该是可能的,因为 TortoiseSVN Repobrowser 能够像普通文件浏览器一样查看当前状态的文件。我发现了各种其他关于同一问题的问答线程,但我似乎都假设他们都可以访问 svn 服务器。

此外,我尝试了一些在这些线程中引用的工具,但它们似乎都不符合我的需求。例如,“SvnQuery 1.2.2.0”和“SVN Search 1.3.0.”。两者都要求我指定 SVN 存储库的本地路径。但是我认为存储库位于服务器上,而客户端只是得到了工作副本?!但我可能错了...

另一个(次要)问题是:是否可以显示特定用户一年前的所有签入/提交?(再次只是通过客户端访问。)目前,我只需执行以下命令:

TortoiseProc.exe /command:log /path:"https://svn:9880/SvnRoot"

在此之后,我点击“Next 100”按钮,直到找到我要搜索的内容;或者我的手指烂掉了。

有人能帮我吗?

此致,

迈克尔

4

3 回答 3

0

搜索当前状态下的所有存储库就足够了,而不是历史深度

您要查找的命令是svn ls -R %REPO%. 这将列出存储库中的所有文件,以及-R递归方式。从那里,您可以通过后缀仅过滤掉您感兴趣的存储库中的文件。

是否可以显示特定用户一年前的所有签入/提交?(同样只是通过客户端访问。

您要查找的命令是svn log -r{20120130}`:HEAD %REPO%。这将列出自 2012 年 1 月 30 日至今的所有历史记录。

从那里,您可以过滤掉特定用户的整个日志。

如果您是 Subversion 新手,请查看在线 Subversion 手册。这是我见过的最好的开源项目手册之一。此外,命令行 Subversion 工具有很多内置帮助:

$ svn help
usage: svn <subcommand> [options] [args]
Subversion command-line client, version 1.7.5.
Type 'svn help <subcommand>' for help on a specific subcommand.
Type 'svn --version' to see the program version and RA modules
 or 'svn --version --quiet' to see just the version number.

Most subcommands take file and/or directory arguments, recursing
on the directories.  If no arguments are supplied to such a
command, it recurses on the current directory (inclusive) by default.

Available subcommands:
   add
   blame (praise, annotate, ann)
   cat
   changelist (cl)
   checkout (co)
   cleanup
   commit (ci)
   ...

从那里,您可以获得特定命令的帮助。这些中的任何一个都可以工作:

$ svn help checkout
$ svn checkout --help

TortoiseSVN 带有 Subversion 命令行客户端。检查C:\Program Files\TortoiseSVN\bin(或在您的系统上安装 TortoiseSVN 的位置)。我相信它甚至可以PATH正确设置您执行 svn。

您可以在 PC 上使用 PowerShell,或者下载 Python 或 Perl。这些语言允许您更好地操作各种命令的命令行输出svn,Perl 和 Python 具有 Subversion 模块,可以直接通过 API 访问 Subversion。

然而,对于大多数 Subversion 报告,我倾向于使用 BASH shell 和 Unix 实用程序,因为我通常可以直接从命令行执行此操作而无需大惊小怪。如果您熟悉 Unix 实用程序并且在 PC 上,请尝试 Cygwin,它将为您提供 BASH shell 和大多数标准 Unix/GNU 实用程序。

于 2013-01-30T15:20:12.713 回答
0

如果您有命令行客户端和 PowerShell,则可以执行以下操作以获取特定用户的所有日志条目:

[xml]$log = svn log --xml --verbose https://svn:9880/SvnRoot/;
$log.log.logentry|where-object {$_.author -eq "USERNAME"};

我确信有一种方法可以使它成为单线,但它现在还没有来找我。

如果要限制修订范围或日期,请参阅svn log的帮助

于 2013-01-30T14:02:31.413 回答
0

请参阅我的(类似)问题的答案,它显示了如何使用 -l 开关转储日志(以获得超过默认值 100)以及 svnquery: How to search SVN repository for a file when I'm not sure where我放的?

于 2013-01-29T14:35:47.277 回答