SAE自2011-7-10日起,將全面支持SVN代碼部署,用戶不只能夠經過任何SVN客戶端部署代碼,並且SAE現有的代碼部署方式也已經對接應用的SVN倉庫,即便不使用SVN客戶端部署代碼,也保證了代碼版本。
如:經過在線代碼編輯器(http://sdk.tools.sinaapp.com)等方式對代碼的修改、部署等操做也會像svn commit同樣,產生一個新版本。經過SVN客戶端svn update能夠獲取最近的更新,也能夠經過svn客戶端回滾代碼。
SVN倉庫地址: https://svn.sinaapp.com/your_app_name (您能夠經過此地址直接訪問)
如:應用域名是 test.sinaapp.com,那麼SVN倉庫地址是:https://svn.sinaapp.com/test
SVN用戶名: SAE安全郵箱
SVN密碼: SAE安全密碼(如已啓用微盾動態密碼,則此處填寫「安全密碼」+「微盾動態密碼」)
注:SVN用戶名和密碼爲安全郵箱和安全密碼,不是微博帳號和微博密碼!
爲了保持與SAE兼容,使用svn方式部署代碼到SAE有以下限制:
一、文件名或目錄名不容許含有如下字符:",*,?,<,>,|,另外文件或文件名的開始與結束也不允 許有空格。
二、上傳單個文件大小不超過20M
三、單個目錄下的文 件個數不能超過2000個
四、每一個應用代碼總大小不超過100M
五、單個版本代碼總大小不超過50M
六、appname目錄下只容許存在10個之內的版本,而且版本號必須爲正整數。(也就是說appname下面只容許出現10個之內的正整數 目錄名,不容許有非目錄的存在)
SAE代碼部署分爲三步:
建立應用
登錄SAE在線管理平臺,「建立新應用」(http://sae.sina.com.cn/?m=myapp&a=create)時,若是建立成功,系統會自動爲該應用建立一個SVN倉庫。假設新建立的應用名爲newapp,那麼倉庫地址爲:
https://svn.sinaapp.com/newapp/
此時,能夠經過本地SVN客戶端檢出(checkout)該應用的本地工做目錄。
部署代碼
SAE提供了不一樣的代碼部署方式,能夠分爲兩類:
一是經過SVN客戶端部署,這是SAE推薦的代碼部署方法。
另外一個是經過非SVN客戶端部署,即在線代碼在線編輯器和推薦應用安裝。
這兩類代碼部署方法都會更新應用的SVN倉庫版本,但必須注意的是非SVN客戶端部署方式沒法提供版本管理功能,只能看到最新版本的代碼,也沒法回滾代碼。
所以,強烈建議僅使用SVN客戶端方式部署代碼,若是同時使用非SVN客戶端方式部署,爲避免代碼版本衝突,請及時在本地SVN工做目錄下執行svn update操做,保證本地工做目錄與線上代碼保持一致。
驗證
代碼更新後,經過svn update或直接經過瀏覽器訪問應用查看代碼是否已經更新到線上。
TortoiseSVN下載:http://tortoisesvn.net/downloads.html
Subversion中文站: http://www.subversion.org.cn/
在Windows下推薦使用烏龜(Tortoise)SVN客戶端。 TortoiseSVN 是 Subversion 版本控制系統的一個免費開源客戶端,能夠超越時間的管理文件和目錄。文件保存在中央版本庫(即SAE中央SVN倉庫),除了能記住文件和目錄的每次修改以 外,版本庫很是像普通的文件服務器。你能夠將文件恢復到過去的版本,而且能夠經過檢查歷史知道數據作了哪些修改,誰作的修改。這就是爲何許多人將 Subversion 和版本控制系統看做一種「時間機器」。
TortoiseSVN下載:http://tortoisesvn.net/downloads.html
又不是在linux下,安裝就很少說了 :)
下面詳細介紹使用TortoiseSVN向SAE部署代碼。
第一步,如圖1,建立一個新文件夾做爲本地工做目錄(Working directory),可使用應用名爲文件夾名。如,爲個人應用devcenter建立本地工做目錄。
第二步,從SAE的SVN倉庫檢出(checkout)一個應用的所有版本代碼,如圖2,右鍵-->點擊「SVN Checkout」
在彈出頁面中填寫倉庫路徑便可,這裏是:https://svn.sinaapp.com/devcenter/,其它默認參數便可,如圖3:
Reversion處,「HEAD revision」是指最新版,也能夠指定Revision爲任意一個版本。
點擊「OK」,出現下載界面,如圖4:
若是一切順利,devcenter應用全部版本代碼將會所有出如今剛剛建立的devcenter文件夾下,如圖5:
在本地使用你喜歡的編輯器,編輯任意文件,保存後該文件圖標將會出現紅色感嘆號,如圖6所示:
看,剛剛修改過的index.php變色了。下面須要提交(commit)最近的更新。在index.php文件上擊右鍵,出現菜單 ,
選擇「SVN commit」,如圖7:
而後填寫關於本次更新的日誌(log message),這是必填項,不然commit會失敗。如圖8:
當您看到如圖9所示,代表剛纔的修改已經成功提交,而且前該devcenter項目的SVN版本號加1,變成30.
在 SVN工做目錄下,對於文件修改,完成後只須要commit就ok了,但對於新增文件,或者從其它目錄複製進來的文件或文件夾,須要在commit以前需 要作一步add操做,即將文件或文件夾添加到svn工做目錄中來,不然SVN客戶端不認它。具體操做很簡單,如圖10:
而後再如圖7所示,右鍵commit 便可。
更多Tortoise SVN使用幫助,請參閱:http://www.subversion.org.cn/tsvndoc/
Notepad++ 是一款Windows環境下很受歡迎的免費開源的代碼編輯器,有很豐富的第三方插件。
下面介紹Notepad++的svn插件的安裝及使用。
如圖12,點擊Plugin --> Plugin Manager --> Show Plugin Manager
打開後,在「Available」頁找到「Subversion」,而後點擊「Install」,如圖13所示:
安裝成功後會在Plugins菜單下出現"Subversion"子菜單。
打開以前checkout下來的任一文件,如devcenter/1/index.php,編輯完成後,點擊Plugins --> Subversion --> Commit File(或使用 快捷鍵Ctrl+Alt+A)
出現熟悉的一頁,如圖14所示:
對,這就是烏龜SVN的Commit頁面,輸入Log Message,點擊「OK」便可提交。
UltraEdit Studio(注意不是UltraEdit,UltraEdit不能與SVN整合)配置稍微複雜些。
第一步,SVN倉庫帳號設置,如圖15所示:
而後填寫倉庫信息,如圖16所示:
完成後,建立Project,如圖17所示:
填寫project名b.prj後,出現如圖18所示"Project Settings",點擊「Add Folder」,出現「NewFolder」,將"Group"前的勾去掉,而後點擊「Browse」,在「Browse for Folder」頁找到以前checkout出現的本地工做目錄。
點擊「OK」後出現提示,如圖19所示:
代表UEStudio自動識別出了選擇的代碼目錄是一個SVN工做目錄,並詢問是否整合,點擊「Yes」,出現如圖20所示:
大功告成,"Close"以後便可以編輯代碼,並隨時commit修改。如圖21所示:
EditPlus依賴於Tortoise SVN(TSVN),必須先安裝。
使用最簡單,見圖22所示:
當編輯SVN工做目錄裏的文件時,File --> TSVN即出現相應可操做的菜單。
https://svn.sinaapp.com/appname/
爲了傳輸安全,SAE要求統一使用https方式部署代碼;
登錄SAE在線管理平臺(http://sae.sina.com.cn),建立應用,成功後您便可以檢出該應用代碼。
例如,您剛剛建立了應用newapp,在本地執行:
svn checkout https://svn.sinaapp.com/newapp
第一次checkout時須要驗證,用戶名/密碼爲您的SAE安全郵箱和安全密碼(非微博登錄帳號密碼,如已啓用微盾動態密碼,則此處填寫「安全密碼」+「微盾動態密碼」)。
假如,爲newapp應用建立版本1
目前提供兩種方式:
svn checkout https://svn.sinaapp.com/newapp #此處須要認證,用戶名/密碼爲您的SAE安全郵箱和安全密碼(如已啓用微盾動態密碼,則此處填寫「安全密碼」+「微盾動態密碼」)
cd newapp
mkdir 1
svn add 1
svn commit -m"add version 1 for newapp"
在SAE在線管理平臺「代碼管理」處建立版本便可。但爲了不與本地倉庫衝突,務必在本地工做目錄下執行:svn update ,將最近的更新拉到本地來。
更新代碼前本地必須有一個工做目錄(Working Directory),建立工做目錄很簡單,只須要檢出(checkout)代碼倉庫便可。如,對於已經建立好的應用newapp,在本地執行:
svn checkout https://svn.sinaapp.com/newapp
輸入安全帳號和安全密碼,即完成本地工做目錄的建立。
須要增長某個文件或文件夾,如部署wordpress到版本1。
svn checkout https://svn.sinaapp.com/newapp
cd newapp/1
cp -rf /path/to/wordpress/* ./
svn add ./*
svn commit -m"add wordpress"
假如須要修改newapp應用版本1根目錄下某個文件,如index.php,完整的操做流程以下:
svn checkout https://svn.sinaapp.com/newapp #若是已經checkout過了,不須要從新checkout。
cd newapp/1
vim index.php #這裏編輯代碼
svn commit -m "edit index.php"
在應用版本根目錄下,如newapp/1下,建立文件config.yaml(語法參見:http://sae.sina.com.cn/?m=devcenter&catId=193),而後經過svn commit便可完成應用配置。
如,如今須要更新應用newapp的默認版本3的appconfig,操做以下:
svn checkout https://svn.sinaapp.com/newapp #若是已經checkout過了,不須要從新checkout。
cd newapp/3
vim config.yaml #這裏按照config.yaml語法編輯便可。
svn commit -m "update config.yaml"
注意:config.yaml不會被部署到用戶的代碼目錄,但會被存儲在服務端SVN倉庫中。所以下次能夠被checkout出來,但不會被用戶訪問到。
SVN能夠在線閱讀應用代碼,地址即SVN倉庫地址:https://svn.sinaapp.com/appname/
將appname換成本身的應用名便可登錄查看代碼。
在線編輯器 可在管理面板>>代碼管理>>編輯代碼 打開
爲了保持與SAE兼容,使用svn方式部署代碼到SAE有以下限制:
一、文件名或目錄名不容許含有如下字符:",*,?,<,>,|,另外文件或文件名的開始與結束也不容許有空格。
二、上傳單個文件大小不超過4M
三、單個目錄下的文 件個數不能超過400個
四、每一個應用代碼總大小不超過100M
五、單個版本代碼總大小不超過50M
六、appname目錄下只容許存在10個之內的版本,而且版本號必須爲正整數。(也就是說appname下面只容許出現10個之內的正整數 目錄名,不容許有非目錄的存在)
錯誤提示
錯誤緣由
解決方法
The change log need some words(not null)
提交時沒有添加log message
提交時加上log message便可
The log message is a pathname (was -F intended?); use '--force-log' to override
log message 與路徑名稱相同
修改log message
Error file xxx in not allowed in root directory!
working copy的根目錄下不容許有名爲xxx的文件(只能是正整數版本目錄)
刪除該文件或者移到到版本目錄下
directory xxx/ is not allowed in root directory! Only positive integer dirs are allowed!
working copy的根目錄下不容許有名爲xxx的目錄(只能是正整數版本目錄)
刪除該目錄或者移到版本目錄下
Too many versions!(less than 10 is permited)
版本目錄多於10個,最多不超過10個
刪除剛剛建立的版本目錄便可。
Too many files: XXX (less than 2000 is allowed).
XXX目錄下文件的數量超過2000
刪除XXX目錄下的文件,使其總數降至2000如下
dir APPNAME/dir(size:xxxx) is too large less than xxx
該應用下代碼(不包括.svn目錄)總大小超過100M,或某個版本總大小超過50M
刪除沒必要要的代碼再嘗試提交
File XXX is too large!(less than 4M)
單個文件大小超過4M
刪除重試
相似Repository UUID '305daf1b-94be-48ee-a4b9-f4bcd36320de' doesn't match expected UUID '44e2f7a2-1b69-4710-974a-b6edef0fdc12'
服務器端倉庫被刪除重建,客戶端對原倉庫進行操做致使。
從新checkout出一份代碼便可
add vers xxx faild
文件部署失敗
內部緣由,請聯繫saesupport@sina.cn。
一、從SVN倉庫中檢索出代碼到工做拷貝:
# svn checkout https://svn.sinaapp.com/appname [workcopy]
其中workcopy是可選的,若是不寫workcopy,SVN會默認將appname作爲workcopy。
若是隻檢索某個版本:
# svn checkout https://svn.sinaapp.com/appname/appversion [workcopy]
只檢索某個版本的某個目錄:
# svn checkout https://svn.sinaapp.com/appname/appversion/folder [workcopy]
二、向SVN倉庫提交代碼:
# svn commit -m "here is message"
三、將本地文件添加到工做拷貝:
# svn add something
注:若是something爲文件,svn會將這個文件添加到工做拷貝;若是something是目錄,svn會將目錄及裏面的文件全添加到工做 拷貝。something也能夠是通配符*,這樣會忽略已經添加過的文件。
四、從工做拷貝中刪除一個文件:
# svn delete something
注:若是something爲文件,svn會將這個文件從工做拷貝中刪除;若是something是目錄,svn會將目錄及裏面的文件所有從工做 拷貝中刪除。
五、直接從SVN倉庫中刪除文件:
# svn delete -m "delete something" https://svn.sinaapp.com/appname/appversion/something
注:能夠從SVN倉庫中直接刪除單個文件或單個目錄甚至某個版本。
六、將一個本地項目導入到SVN倉庫:
導入應用的某個版本:
# svn import localdir https://svn.sinaapp.com/appname/appversion
注:要確保目前應用的appversion不衝突。
七、查看工做拷貝中的文件或目錄狀態:
# svn status [something]
八、更新本身的工做拷貝:
# svn update
注:從SVN倉庫下載最新版本,此命令會致使本地沒有提交的更改丟失,建議使用此命令前先查看一下本地拷貝狀態(svn status).
九、取消對代碼修改
取消對代碼的修改分爲兩種狀況。
第一種狀況:改動沒有被提交(commit)。
這種狀況下,使用svn revert就能取消以前的修改。
svn revert用法以下:
# svn revert [-R] something
其中something能夠是(目錄或文件的)相對路徑也能夠是絕對路徑。
當something爲單個文件時,直接svn revert something就好了;當something爲目錄時,須要加上參數-R(Recursive,遞歸),不然 只會將something這個目錄的改動。
在這種狀況下也可使用svn update命令來取消對以前的修改,但不建議使用。由於svn update會去鏈接倉庫服務器,耗費時間。
注意:svn revert自己有固有的危險,由於它的目的是放棄未提交的修改。一旦你選擇了恢復,Subversion沒有方法找回未提交的修 改。
第二種狀況:改動已經被提交(commit)。這種狀況下,用svn merge命令來進行回滾。
回滾的操做過程以下:
1) 保證咱們拿到的是最新代碼:
svn update
假設最新版本號是28。
2) 而後找出要回滾的確切版本號:
svn log [something]
假設根據svn log日誌查出要回滾的版本號是25,此處的something能夠是文件、目錄或整個項目
若是想要更詳細的瞭解狀況,可使用svn diff -r 28:25 [something]
3) 回滾到版本號25:
svn merge -r 28:25 something
爲了保險起見,再次確認回滾的結果:
svn diff [something]
發現正確無誤,提交。
4) 提交回滾:
svn commit -m "Revert revision from r28 to r25,because of ..."
提交後版本變成了29。
將以上操做總結爲三條以下:
a. svn update,svn log,找到最新版本(latest revision)
b. 找到本身想要回滾的版本號(rollbak revision)
c. 用svn merge來回滾: svn merge -r : something
十、查看SVN倉庫日誌信息:
# svn log [workcopy]
查看全部本地的歷史日誌,若是workcopy爲某文件,那麼就是查看某個文件的日誌信息。
查看SVN倉庫全部文件的日誌信息:
# svn log https://svn.sinaapp.com/appname/
這個命令會查看全部修改過的日誌。
注:SAE提供的SVN服務徹底支持標準SVN的全部命令,更詳細的使用說明請查閱SVN官方幫助文檔。
SVN命令幫助文檔:http://www.subversion.org.cn/svnbook/1.4/svn.ref.html
中文徹底幫助文檔:http://svnbook.red-bean.com/index.zh.html