我希望我的PHP应用程序标有它使用的修订号,但我不想使用 CruiseControl 或更新文件并每次上传。我该怎么办?

有帮助吗?

解决方案

SVN关键字不是一个好的解决方案。正如其他人所指出的,在文件中添加$ Revision $只会影响特定文件,这可能不会长时间改变。

记住<!>“编辑<!>”;在每次提交之前,文件(通过添加或删除空行)是没有意义的。您也可以手动输入修订版。

这样做的一个好方法(我知道)是自动部署过程(这总是一件好事)并使用命令svnversion。这是我的工作:

无论我在哪里需要修改,我都会包含:<?php include 'version.php'; ?>。这个<!> quot; version.php <!> quot;文件只有修订号。此外,它不是存储库的一部分(它被设置为被忽略)。以下是我创建它的方法:

1)在服务器上安装SVN的项目中,我也将其用于部署。获取最新版本到服务器我有一个脚本,其中包括以下内容(它在服务器上运行):

cd /var/www/project
svn update
rm version.php
svnversion > version.php

2)在未安装SVN的项目中,我的部署脚本更复杂:它在本地创建version.php文件,压缩代码,上传并提取它

其他提示

假设您的webroot是subversion树的签出副本,您可以解析/.svn/entries文件并挂出修订号(这里是第4行)......

在PHP中:

$svn = File('.svn/entries');
$svnrev = $svn[3];
unset($svn);

这就是我开始工作的方式。 如果您的服务器设置为允许 shell_exec 并且您已安装SVN,请运行:

$revision = `svnversion`;

$revision = shell_exec('svnversion');

来自这个答案

  

您可以通过添加以下内容来完成此操作   你代码中的任何地方

$Id:$ 
  

所以例如Jeff做了:

<div id="svnrevision">svn revision: $Id:$</div>
  

并在签入时   服务器用当前替换了$ Id:$   修订号。我还找到了此参考资料

     

还有$ Date:$,$ Rev:$,   $修订:$

现在迟到了,但是使用Subversion post-commit钩子。在存储库的hooks文件夹中,创建一个像这样的shell脚本:

#!/bin/bash

REPOS="$1"
REV="$2"

cd /web/root
rm -f /web/root/templates/base.html
/usr/bin/svn update
/bin/sed -i s/REVISION/$REV/ /web/root/templates/base.html

此特定示例假设您的实时站点位于/ web / root中,并且开发代码保存在其他位置。当您提交开发更改时,脚本将删除先前的实时模板(以避免冲突消息),运行更新并将模板中REVISION的实际替换为实际修订号。

有关更多信息,请访问此处

在大多数情况下,服务器上的代码实际上包含<!> quot; Export <!> quot;代码,而不是结帐,因此不包含.svn文件夹。至少那是我经常看到的设置。其他人是否真的将他们的代码签出到网络服务器上?

您可以通过 SVN关键字了解情况。在要显示修订版本的位置添加$ Revision $,但这只会显示特定文件更改的最后修订版本,因此您每次都必须对文件进行更改。如果没有某种外部脚本或提交后挂钩,则无法获取全局修订号。

你也可以这样做:

$status = @shell_exec('svnversion '.realpath(__FILE__));
if ( preg_match('/\d+/', $status, $match) ) {
    echo 'Revision: '.$match[0];
}

最简单的方法是使用Subversion <!>“关键字替换<!>”。有一个指南此处 SVN一书( Subversion版本控制 )。

您基本上只需在文件中的某处添加文本$ Rev $。 然后在存储库中启用关键字。结账时,SVN会将修订号替换为文件。

请参阅我对类似问题的回复 <!> quot;标记QUOT <!>;带修订版的svn导出

如果您在导出时捕获修订号,可以使用:

svn export /path/to/repository | grep ^Exported > revision.txt

要删除除修订号之外的所有内容,您可以通过此sed命令管道:

svn export /path/to/repository | grep ^Exported | sed 's/^[^0-9]\+\([0-9]\+\).*/\1/' > revision.txt
$svn_rev=file_get_contents('/path.to.repository/db/current');

另一种可能性是运行一个执行<!>“Deploy Process <!>”中描述的步骤的cron; (假设它是* nix / FreeBSD服务器)。

如果表现有问题,那么你可以这样做:

exec('svn info /path/to/repository', $output);
$svn_ver = (int) trim(substr($output[4], strpos($output[4], ':')));

这当然取决于您是否已完成结账,以及是否存在svn命令。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top