如何获得PHP中的Subversion版本号?
我想让我的PHP应用程序标有它使用的修订号,但是我不想使用CruiseControl或者更新文件并每次都上传它。我该怎么办?
解决方案
假设webroot是子版本树的已检出副本,则可以解析/.svn/entries文件并挂钩修订版本号(此处为第4行)...
在PHP中:
$svn = File('.svn/entries'); $svnrev = $svn[3]; unset($svn);
从这个答案:
You can do it by adding the following anywhere in your code
$Id:$
So for example Jeff did:
<div id="svnrevision">svn revision: $Id:$</div>
and when checked in the server replaced $Id:$ with the current revision number. I also found this reference. There is also $Date:$, $Rev:$, $Revision:$
在大多数情况下,服务器上的代码实际上将包含代码的"导出",而不是签出,因此不包含.svn文件夹。至少这是我最常看到的设置。其他人实际上是否将他们的代码签出到Web服务器上?
最简单的方法是使用Subversion"关键字替换"。 SVN书(带有Subversion的版本控制)中提供了指南。
基本上,我们只需要在文件中的某处添加文本$ Rev $。
然后在存储库中启用关键字。结帐时,SVN会将修订号替换到文件中。
我们可以通过SVN关键字获得更接近的结果。在要显示修订的位置添加$ Revision $,但这只会显示特定文件已更改的最后一个修订,因此我们每次都必须对文件进行更改。没有某种外部脚本或者提交后挂钩,就不可能获得全局修订号。
SVN关键字不是一个好的解决方案。正如其他人指出的那样,在文件中添加$ Revision $仅会影响特定文件,该文件可能不会长时间更改。
记住在每次提交之前"编辑"文件(通过添加或者删除空白行)是没有意义的。我们也可以手动输入修订。
做到这一点的一种好方法(我知道)是有一个自动部署过程(这总是一件好事)并使用命令svnversion。这是我的工作:
每当需要修订的地方,我都会包含:<?php include'version.php'; ?>
。此" version.php"文件仅具有修订号。此外,它不是存储库的一部分(将被忽略)。这是我创建它的方法:
1)在服务器上安装了SVN的项目中,我也将其用于部署。将最新版本获取到服务器上我有一个脚本,该脚本除其他功能外还可以执行以下操作(该脚本在服务器上运行):
cd /var/www/project svn update rm version.php svnversion > version.php
2)在未安装SVN的项目中,我的部署脚本更加复杂:它会在本地创建version.php文件,将代码压缩,上传并解压缩
这样做的另一种可能性是运行cron来执行"部署过程"中描述的步骤(假设它是* nix / FreeBSD服务器)。
我们也可以这样做:
$status = @shell_exec('svnversion '.realpath(__FILE__)); if ( preg_match('/\d+/', $status, $match) ) { echo 'Revision: '.$match[0]; }
请参阅我对类似问题" Mark" svn导出并进行修订的答复。
如果在导出时捕获修订版本号,则可以使用:
svn export /path/to/repository | grep ^Exported > revision.txt
要剥离除修订号以外的所有内容,可以通过以下sed命令将其通过管道传送:
svn export /path/to/repository | grep ^Exported | sed 's/^[^0-9]\+\([0-9]\+\).*//' > revision.txt