【问题标题】:PHP, Subversion, and Cloning then Committing a Directory StructurePHP、Subversion 和克隆然后提交目录结构
【发布时间】:2012-08-12 02:04:41
【问题描述】:

我有一个有趣的问题,希望有人能帮我解决。我有一个 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

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

【问题讨论】:

    标签: php svn commit


    【解决方案1】:

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

    【讨论】:

    • 我相信你是对的。我使用正则表达式 .*\.svn.* 在我的复制功能中过滤掉所有与颠覆相关的文件,并且我也只将 /resources/site 目录添加到 SVN(带有递归标志),这似乎很有帮助。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-01
    • 2011-09-22
    • 1970-01-01
    • 2011-08-12
    相关资源
    最近更新 更多