我有一個有趣的問題,我希望有人能夠幫助我解決。我有一個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