1

我有一个有趣的问题,希望有人能帮我解决。我有一个 subversion 存储库,用于存储一个非常大的 PHP 站点的源代码。以下是有关我的设置的一些重要细节:

  • 该站点的开发版本位于 /var/www/sitename-dev 的服务器上,是通过从存储库执行 svn 签出创建的。
  • 该站点的实时版本位于 /var/www/sitename,并且也是使用 svn checkout 创建的。
  • 在存储库上设置了一个提交后挂钩,它将在每次提交后在开发站点上运行 svn 更新,如果提交日志条目包含特殊的部署关键字,则在实时站点上运行 svn 更新。
  • 以上所有的工作都非常出色,大大提高了我团队的生产力。

该站点的目的是提供一组许多公司需要的核心功能,并让每个购买我们产品的公司都有自己的专门品牌的站点来提供我们的功能。这是使用 Smarty 模板引擎(非常棒)完成的。每个品牌站点共享相同的核心文件(因此修复核心文件中的错误会为每个站点修复它),并具有位于 /resources/site 的模板目录结构。/resources/site 中的每个文件都是必需的,但内容因站点而异。

我想要做的是在站点的管理员部分创建一个表单,它将创建一个新的品牌站点作为现有默认站点的 /resources/site 目录的克隆(在 /var/ 的本地副本中) www),并将其添加到 subversion 存储库 (add/commit)。这将允许我们在下一次 svn 更新后立即开始重做模板。

这是我到目前为止所拥有的:

public function addNewSiteHandle($handleName){
    try{
        $resourceRoot = "/var/www/site";
        echo "Resource Root = ".$resourceRoot."<br />";
        $resourceRoot .= "/resources";
        echo "Resource Root = ".$resourceRoot."<br />";
        $this->recursiveCopy($resourceRoot."/rtx", $resourceRoot."/".$handleName);
        $files = array();
        foreach(scandir($resourceRoot."/".$handleName) as $file){
            if($file != "." && $file != ".." && $file != ".svn"){
                echo "Processing \"$file\"<br />";
                svn_add($resourceRoot."/".$handleName."/".$file, true, true);
                array_push($files, $resourceRoot."/".$handleName."/".$file);
            }
        }
        svn_commit("Handle \"$handleName\" added through the Website.", $files);
    }
    catch(Exception $e){
        error_log($e->getMessage());
    }
}

这抱怨错误:

[2012 年 8 月 15 日星期三 14:31:01] [错误] [客户端 192.168.1.x] PHP 警告:svn_add(): svn 错误发生\n155007(路径不是工作副本目录)'/var/ www/site/resources/testtt43' 不是第 76 行 /var/www/site/Subversion.class.php 中的工作副本\n,参考:http: //b1.festivadev.com/cloneTest.html

我知道该站点是一个工作副本目录,所以我不确定问题是什么。有任何想法吗?

4

1 回答 1

1

您的脚本会复制整个站点目录,包括 .svn 子目录。您不应复制这些 .svn 目录或在复制后递归地从复制的目录中删除它们。之后 SVN 添加和提交应该可以正常工作。

于 2012-08-15T18:57:25.037 回答