SVN使用教程


        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用戶名和密碼爲安全郵箱和安全密碼,不是微博賬號和微博密碼!

與標準SVN的區別

  爲了保持與SAE兼容,使用svn方式部署代碼到SAE有如下限制:

    1、文件名或目錄名不允許含有以下字符:",*,?,<,>,|,另外文件或文件名的開始與結束也不允             許有空格。

    2、上傳單個文件大小不超過20M

    3、單個目錄下的文 件個數不能超過2000個

    4、每個應用代碼總大小不超過100M

    5、單個版本代碼總大小不超過50M

    6、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 SVN

使用TortoiseSVN客戶端

        在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++集成svn插件

  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 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部署

    EditPlus依賴於Tortoise SVN(TSVN),必須先安裝。

    使用最簡單,見圖22所示:

當編輯SVN工作目錄裏的文件時,File --> TSVN即出現相應可操作的菜單。

Linux/Mac SVN

倉庫地址

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客戶端

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"

配置應用(appconfig)

        在應用版本根目錄下,如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換成自己的應用名即可登陸查看代碼。

      在線編輯器 可在管理面板>>代碼管理>>編輯代碼 打開

SVN for SAE的限制條件

      爲了保持與SAE兼容,使用svn方式部署代碼到SAE有如下限制:

      1、文件名或目錄名不允許含有以下字符:",*,?,<,>,|,另外文件或文件名的開始與結束也不允許有空格。

      2、上傳單個文件大小不超過4M

      3、單個目錄下的文 件個數不能超過400個

      4、每個應用代碼總大小不超過100M

      5、單個版本代碼總大小不超過50M

      6、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
文件部署失敗
內部原因,請聯繫[email protected]

常用svn命令說明

    1、從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]

    2、向SVN倉庫提交代碼:

           # svn commit -m "here is message"

    3、將本地文件添加到工作拷貝:

           # svn add something

           注:如果something爲文件,svn會將這個文件添加到工作拷貝;如果something是目錄,svn會將目錄及裏面的文件全添加到工作                      拷貝。something也可以是通配符*,這樣會忽略已經添加過的文件。

    4、從工作拷貝中刪除一個文件:

           # svn delete something

           注:如果something爲文件,svn會將這個文件從工作拷貝中刪除;如果something是目錄,svn會將目錄及裏面的文件全部從工作                      拷貝中刪除。

    5、直接從SVN倉庫中刪除文件:

           # svn delete -m "delete something" https://svn.sinaapp.com/appname/appversion/something

           注:可以從SVN倉庫中直接刪除單個文件或單個目錄甚至某個版本。

    6、將一個本地項目導入到SVN倉庫:

           導入應用的某個版本:

           # svn import localdir https://svn.sinaapp.com/appname/appversion

           注:要確保目前應用的appversion不衝突。

    7、查看工作拷貝中的文件或目錄狀態:

           # svn status [something]

    8、更新自己的工作拷貝:

           # svn update

           注:從SVN倉庫下載最新版本,此命令會導致本地沒有提交的更改丟失,建議使用此命令前先查看一下本地拷貝狀態(svn status).

    9、取消對代碼修改

           取消對代碼的修改分爲兩種情況。

第一種情況:改動沒有被提交(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

    10、查看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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章