使用PHP,Perl或Python(最好是PHP),我需要一种方法来查询SVN数据库并找出发送给SVN的最新修订号.除此之外我不需要任何其他东西.它需要是非密集型的(所以我每隔5分钟就做一次cron工作; SVN的性能不应该受到影响).
SVN位于我的Intranet上,但不是我的特定计算机.
我安装了SVN,但没有为PHP/Perl/Python安装绑定.我正在运行Windows XP,但我更喜欢独立于平台的解决方案,它也适用于Linux.如果您有一个仅限Linux(或仅限XP)的解决方案,那也会有所帮助.
sth*_*sth 129
如果你想分析一个本地工作副本,那么最好的工具是svnversionSubversion附带的,并产生类似的输出968:1000M.文件说:
如果工作副本是单个修订版,未修改,未切换且具有与TRAIL_URL参数匹配的URL,则版本号将是单个数字.如果工作副本不正常,版本号将更复杂:
Run Code Online (Sandbox Code Playgroud)4123:4168 mixed revision working copy 4168M modified working copy 4123S switched working copy 4123:4168MS mixed revision, modified, switched working copy
Dan*_*ore 66
<?php
$url = 'your repository here';
$output = `svn info $url`;
echo "<pre>$output</pre>";
?>
Run Code Online (Sandbox Code Playgroud)
您可以像这样获取XML输出:
$output = `svn info $url --xml`;
Run Code Online (Sandbox Code Playgroud)
如果有错误,则输出将被定向到stderr.要在输出中捕获stderr,请使用:
$output = `svn info $url 2>&1`;
Run Code Online (Sandbox Code Playgroud)
Blo*_*ard 36
这应该在Bash中从工作目录中工作.我在安装了unixutils的 Windows中使用它:
svn info |grep Revision: |cut -c11-
Run Code Online (Sandbox Code Playgroud)
Mag*_*tus 33
以下应该有效:
svnlook youngest <repo-path>
Run Code Online (Sandbox Code Playgroud)
它返回一个修订号.
der*_*unk 14
要在远程存储库中获得最新版本("头部修订版")编号,请使用以下命令:
svn info -r 'HEAD' | grep Revision | egrep -o "[0-9]+"
Run Code Online (Sandbox Code Playgroud)
输出例如:
35669
Run Code Online (Sandbox Code Playgroud)
sda*_*aau 12
获取最新修订号的说明:
说我已经cd修改了子目录(MyProjectDir).然后,如果我打电话svnversion:
$ svnversion .
323:340
Run Code Online (Sandbox Code Playgroud)
......我得到了" 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)
Run Code Online (Sandbox Code Playgroud)
...我得到" 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
...
Run Code Online (Sandbox Code Playgroud)
...(删除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)
Run Code Online (Sandbox Code Playgroud)
有趣的是 - svn info仍然引用当前的子目录(MyProjectDir),但是,在线路径报告为MyProjectDir(.与本地案例相对) - 并且报告的在线修订是最高的(340- 与最低的323报告相对,报告本地).
从Subversion 1.9开始,您可以使用选项--show-item来获取svn info命令输出字段之一的值.此命令仅显示修订号:
svn info --show-item=revision <URL-to-repository>
Run Code Online (Sandbox Code Playgroud)使用--xml选项获取svn info的XMLed输出,并使用PowerShell获取修订号.这是一个简单的例子:
[xml]$svninfo = svn info <REPOSITORY-URL> --xml -r HEAD
$latestrevnum = $svninfo.info.entry.revision
$latestrevnum
Run Code Online (Sandbox Code Playgroud)使用VisualSVN Server 3.4或更高版本,您可以通过运行以下命令获取存储库中的修订数:
$repo = Get-SvnRepository <REPOSITORY-NAME>
$repo.Revisions
有关更多信息,请参阅Get-SvnRepositoryPowerShell cmdlet参考.