我有一个有趣的问题,我希望有人能够帮助我解决。我有一个subversion版本库,我用它来存储一个非常大的PHP站点的源代码。以下是有关我的设置是重要的一些细节:PHP,Subversion和克隆,然后提交一个目录结构
- 开发人员版OT了现场家住位于/ var /网络/网站名称-dev的服务器上,并通过从资源库做一个svn签创建。
- 该网站的现场版本位于/ var/www/sitename,并且也是使用svn checkout创建的。
- 存储库上有一个post-commit挂钩,每次提交后将在dev站点上运行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] [error] [client 192.168.1.x] PHP Warning: svn_add(): svn error(s) occured\n155007 (Path is not a working copy directory) '/var/www/site/resources/testtt43' is not a working copy\n in /var/www/site/Subversion.class.php on line 76, referer: http://b1.festivadev.com/cloneTest.html
我知道该网站是一个工作拷贝,所以我不知道是什么问题是。有任何想法吗?
我相信你是对的。我使用了正则表达式* \。svn。*来过滤掉我的复制函数中所有与Subversion相关的文件,并且我也只将/ resources/site目录添加到了SVN(带有递归标志),这似乎很有帮助。 – 2012-08-15 20:03:48