获取SVN中的最新修订号?

Col*_*tin 102 svn

使用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,则版本号将是单个数字.如果工作副本不正常,版本号将更复杂:

4123:4168     mixed revision working copy
4168M         modified working copy
4123S         switched working copy
4123:4168MS   mixed revision, modified, switched working copy
Run Code Online (Sandbox Code Playgroud)

  • svnversion用于本地工作副本,并且不会按照问题中的指定访问Intranet上的存储库. (32认同)
  • 对于那些不熟悉svnversion的人来说,它是标准命令行客户端的一部分,这里是手册页:http://svnbook.red-bean.com/nightly/en/svn.ref.svnversion.re.html. (5认同)
  • 同意,比svn信息好多了 (2认同)

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)

  • `svn info $ url | grep'Last Changed Rev'| awk'{print $ 4; }'` (7认同)
  • @Cobra_Fast,你不需要管道,你可以做`svn info --show-item revision $ url`或`svn info --show-item last-changed-revision $ url`. (7认同)
  • 谢谢!我使用--xml来构建自己的C#工具,帮助我生成AssemblyFileVersion属性.PS:英语不是我的主要语言,我对以前从未听过的"因此"这个词感到困惑.顺便说一下,它的起源很有趣:cf(http://en.wiktionary.org/wiki/thusly); 你是故意使用它(双关语?)还是你通常使用而不是这样? (3认同)
  • 如果有错误,则输出将被定向到stderr.要在输出中捕获stderr,请使用:$ output =`svn info $ url 2>&1`; (2认同)
  • @ cp.engr我相信这只是自SVN v1.9左右以来 - 我在v1.9.5中有它并且它在v1.8.6中不存在 (2认同)

Nic*_*dad 46

svn info -r HEAD

这将为您提供存储库头部的最新版本号.

有一些很好的博客文章关于将subversion数字集成到您的构建脚本中:


Blo*_*ard 36

这应该在Bash中从工作目录中工作.我在安装了unixutils的 Windows中使用它:

svn info |grep Revision: |cut -c11-
Run Code Online (Sandbox Code Playgroud)

  • 传递分隔符而不是字符数最适合本地化内容,例如`svn info | grep修订版| cut -d"" - f 2`将在使用空格分割后返回第二个字符串. (7认同)
  • 此外,这不适用于SVN的本地化版本(在波兰语中,这应该是| cut -c9-). (4认同)
  • 也就是说,顺便说一句,我强烈不喜欢本地化命令行开发人员工具的原因; 零利益,一堆问题.我通常会出于这个原因删除本地化. (2认同)

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报告相对,报告本地).


bah*_*rep 8

  • 从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参考.


Tim*_*Tim 6

我想你在找

svn info -r HEAD
Run Code Online (Sandbox Code Playgroud)

你可以支持那个命令吗?

您可能还需要提供存储库的登录凭据.