我正在制作一个连接到存储库的PHP工具,下载提交列表并在本地存储它们。但是,由于某些存储库可能很大并且抓取日志会导致等待时间过长和可能的超时/错误,我想使用异步请求下载每个提交消息。
所以,我在修订历史中有一个起点和终点,我可以抓住所有这样的日志:
svn log -r <from_revision>:<to_revision> <REPO_URL>
...我最终可能会得到一个XML文件,这个文件非常庞大,需要很长时间才能下载,需要很长时间和大量资源才能解析,并且需要很长时间才能存储。
如果我知道开始和结束点,我可以创建一个for()循环来逐个获取修订:
svn log -r <revision> ...
但是,由于我不知道给定路径存在哪些特定修订,我将收到错误。我可以让应用程序在更新期间忽略该错误,但它是一个讨厌的黑客,它会发布请求并等待响应无论如何 - 这一点都不好。
所以,我需要这样的东西:
这样我就可以为存储库路径制作一系列有效的修订版本并逐一获取它们。
欢迎提出所有建议,谢谢。
答案 0 :(得分:10)
我认为您最好的选择是执行以下svn log -l 100 0:{$newest} .\
,它将检索给定目录或文件的前100个日志。然后读取返回的最后一个修订号,然后请求下一个100 svn log -l 100 {$last_ret_log}:{$newest} .\
通过这种方式,每次请求都会获得99个新的日志条目,但是你不会得到所有这些条目。
答案 1 :(得分:4)
如果您可以访问Subversion服务器上的存储库树,则可以使用svnlook history
获取修订号列表。
更多详细信息,请访问http://svnbook.red-bean.com/en/1.1/re49.html。
答案 2 :(得分:4)
我一直试图得到类似的结果。 我只想要特定分支的所有修订号。
我发现以下内容非常有用。
svn log <svn_server_path> | grep "^r[0-9]\+ | " | cut -d' ' -f1 | cut -c2- > revisions.csv
这给了我一个包含所有修订号的文件。
希望您或其他人会发现它有用。
我们的仓库有超过25000个修订版,生成此文件需要几秒钟。
答案 3 :(得分: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/
这列出了任何文件的最后一个(头部)修订版。
答案 4 :(得分:1)
svn log url -l limitNumber - r fromReversion:toReversion
如果你想找到下一个较旧的(较小的)版本(版本) 例如
svn log url -l 4 -r someVersion:1
or
svn log url -l 4 -r 99: 3
fromReversion大于toReversion 如果你想找到下一个更新的(更大的)回归(版本)
svn log url -l 4 -r someVersion:head
or
svn log url -l 4 -r 3:99
fromReversion lower than toReversion