14

我正在制作一个连接到存储库、下载提交列表并将它们存储在本地的 PHP 工具。但是,由于某些存储库可能很大并且获取它们的日志会导致等待时间长和可能的超时/错误,我想使用异步请求下载每个提交消息。

所以,我在修订历史中有一个起点和终点,我可以像这样抓取所有日志:

svn log -r <from_revision>:<to_revision> <REPO_URL>

...我最终可能会得到一个非常大的 XML 文件,以至于下载需要很长时间,需要很长时间和大量资源来解析,并且需要很长时间来存储。

如果我知道起点和终点,我可以创建一个 for() 循环来逐一获取修订:

svn log -r <revision> ...

但是,由于我不知道给定路径存在哪些特定修订,我会收到一个错误。我可以让应用程序在更新期间忽略该错误,但这是一个令人讨厌的黑客攻击,它会发布请求并等待响应 - 这一点都不好。

所以,我需要这样的东西:

  • “给我这条路径的修订号列表”,或者:
  • “给我这条路径的修订号列表,介于和

这样我就可以为存储库路径制作一组有效的修订版本并一个接一个地获取它们。

欢迎所有建议,在此先感谢。

4

5 回答 5

10

I think your best bet would be to do the following svn log -l 100 0:{$newest} .\ that will retrieve the first 100 logs for a given directory or file. then read the last revision number returned, then request the next 100 svn log -l 100 {$last_ret_log}:{$newest} .\

that way you get 99 new log entries with each request but you wont get all of them.

于 2009-10-27T21:11:21.217 回答
4

If you have access to the repository tree on your Subversion server, then you can use svnlook history to get a list of revision numbers.

More details can be found at http://svnbook.red-bean.com/en/1.1/re49.html.

于 2009-10-27T21:13:50.247 回答
4

I have just been trying to get a similar result. I just want all the revision numbers for a particular branch.

我发现以下内容很有帮助。

svn log <svn_server_path> | grep "^r[0-9]\+ | " | cut -d' ' -f1 | cut -c2- > revisions.csv

这给了我一个文件,其中所有的修订号都在不同的行上。

希望您或其他人会发现它有帮助。

我们的 repo 有超过 25000 次修订,生成这个文件需要几秒钟。

于 2015-04-07T09:31:56.927 回答
2

你可能想看看svn list。所以为了你的目的:


$ svn list --verbose file:///var/svn/repos
     16 sally         28361 Jan 16 23:18 README.txt
     27 sally             0 Jan 18 15:27 INSTALL
     24 harry               Jan 18 11:27 examples/

这列出了任何文件的最后(头)修订。

于 2009-10-27T21:08:08.167 回答
1
svn log url -l limitNumber - r fromReversion:toReversion

if U want to find the next older(smaller) reversion( version ) for example

   svn log url -l 4 -r someVersion:1
 or
   svn log url -l 4 -r 99: 3

fromReversion greater than toReversion if U want to find the next newer(bigger) reversion( version )

  svn log url -l 4 -r someVersion:head
or   
  svn log url -l 4 -r 3:99
   fromReversion lower than toReversion
于 2013-05-13T03:51:42.033 回答