使用PHP,Perl或Python(最好是PHP),我需要一种方法来查询SVN数据库并找出发送给SVN的最新修订号.除此之外我不需要任何其他东西.它需要是非密集型的(所以我每隔5分钟就做一次cron工作; SVN的性能不应该受到影响).
SVN位于我的Intranet上,但不是我的特定计算机.
我安装了SVN,但没有为PHP/Perl/Python安装绑定.我正在运行Windows XP,但我更喜欢独立于平台的解决方案,它也适用于Linux.如果您有一个仅限Linux(或仅限XP)的解决方案,那也会有所帮助.
如果你想分析一个本地工作副本,那么最好的工具是svnversion
Subversion附带的,并产生类似的输出968:1000M
.文件说:
如果工作副本是单个修订版,未修改,未切换且具有与TRAIL_URL参数匹配的URL,则版本号将是单个数字.如果工作副本不正常,版本号将更复杂:
4123:4168 mixed revision working copy 4168M modified working copy 4123S switched working copy 4123:4168MS mixed revision, modified, switched working copy
$output
";
?>
您可以像这样获取XML输出:
$output = `svn info $url --xml`;
如果有错误,则输出将被定向到stderr.要在输出中捕获stderr,请使用:
$output = `svn info $url 2>&1`;
svn info -r HEAD
这将为您提供存储库头部的最新版本号.
有一些很好的博客文章关于将subversion数字集成到您的构建脚本中:
在Ant中进行Subversion修订
在Xcode中自动构建子版本
这应该在Bash中从工作目录中工作.我在安装了unixutils的 Windows中使用它:
svn info |grep Revision: |cut -c11-
以下应该有效:
svnlook youngest
它返回一个修订号.
要在远程存储库中获得最新版本("头部修订版")编号,请使用以下命令:
svn info -r 'HEAD' | grep Revision | egrep -o "[0-9]+"
输出例如:
35669
获取最新修订号的说明:
说我已经cd
修改了子目录(MyProjectDir
).然后,如果我打电话svnversion
:
$ svnversion . 323:340
......我得到了" 323:340
",我猜这意味着:" 你们这里有物品,从修订版323到340 ".
然后,如果我打电话svn info
:
$ svn info Path: . URL: svn+ssh://server.com/path/to/MyProject/MyProjectDir Repository Root: svn+ssh://server.com/path/to/MyProject Repository UUID: 0000ffff-ffff-... Revision: 323 Node Kind: directory Schedule: normal Last Changed Author: USER Last Changed Rev: 323 Last Changed Date: 2011-11-09 18:34:34 +0000 (Wed, 09 Nov 2011)
...我得到" 323
"作为修订版 - 这实际上是报告者的最低版本svnversion
!
然后我们可以svn info
在递归模式下使用从本地目录获取更多信息:
> svn info -R | grep 'Path\|Revision' Path: . Revision: 323 Path: file1.txt Revision: 333 Path: file2.txt Revision: 327 Path: file3.txt Revision: 323 Path: subdirA Revision: 328 Path: subdirA/file1.txt Revision: 339 Path: subdirA/file1.txt Revision: 340 Path: file1.txt Revision: 323 ...
...(删除grep
以查看更多详细信息).
最后,当我们想要检查在线存储库的最新版本(在本例中为@ server.com
)时该怎么办?然后我们再次发布svn info
,但是-r HEAD
(注意-R
之前的资本选项和-r
现在的小写)之间的区别:
> svn info -r 'HEAD' USER@server.com's password: Path: MyProjectDir URL: svn+ssh://server.com/path/to/MyProject/MyProjectDir Repository Root: svn+ssh://server.com/path/to/MyProject Repository UUID: 0000ffff-ffff-... Revision: 340 Node Kind: directory Last Changed Author: USER Last Changed Rev: 340 Last Changed Date: 2011-11-11 01:53:50 +0000 (Fri, 11 Nov 2011)
有趣的是 - svn info
仍然引用当前的子目录(MyProjectDir
),但是,在线路径报告为MyProjectDir
(.
与本地案例相对) - 并且报告的在线修订是最高的(340
- 与最低的323
报告相对,报告本地).
从Subversion 1.9开始,您可以使用选项--show-item来获取svn info
命令输出字段之一的值.此命令仅显示修订号:
svn info --show-item=revision
使用--xml
选项获取svn info的XMLed输出,并使用PowerShell获取修订号.这是一个简单的例子:
[xml]$svninfo = svn info--xml -r HEAD $latestrevnum = $svninfo.info.entry.revision $latestrevnum
使用VisualSVN Server 3.4或更高版本,您可以通过运行以下命令获取存储库中的修订数:
$repo = Get-SvnRepository
$repo.Revisions
有关更多信息,请参阅Get-SvnRepository
PowerShell cmdlet参考.
我想你在找
svn info -r HEAD
你可以支持那个命令吗?
您可能还需要提供存储库的登录凭据.