PHP,Subversion和克隆然后提交目录结构

时间:2012-08-15 18:34:46

标签: php svn commit

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

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

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

我希望能够在网站的管理员部分创建一个表单,该表单将创建一个新的品牌网站,作为现有默认网站的/ resources / site目录的克隆(在本地副本中) / var / www),并将其添加到subversion存储库(添加/提交)。这将允许我们在下一次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());
    }
}

这抱怨错误:

  

[Wed Aug 15 14:31:01 2012] [错误] [client 192.168.1.x] PHP警告:   svn_add():发生svn错误\ n155007(路径不是工作副本   目录)'/ var / www / site / resources / testtt43'不起作用   在第76行的/var/www/site/Subversion.class.php中复制\ n,   referer:http://b1.festivadev.com/cloneTest.html

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

1 个答案:

答案 0 :(得分:1)

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