【16】回滾到指定的版本
通過前面對svn revert命令的學習,我們已經知道了如何回滾尚未提交的本地變更。但是如果變更已經提交,成為版本庫的某個版本,這時還能夠再回滾嗎?前面的實驗已經知道svn update命令不會對已經發生修改的本地資源進行update操作,以免覆蓋本地尚未提交的修改。那么對于當前沒有發生修改的本地資源,通過svn update能否回滾到指定的歷史版本呢?
通常要回滾到某個指定的歷史版本,我們需要知道兩件事:
A.要回滾到的那個版本的版本號
B.要回滾到的那個版本當時所做的修改
現在假設我們對ECoupon下的read-from-local.txt文件進行了修改,增加了“modify by user qlinpen”這句話,并提交到版本庫。之后我們想回滾到某個指定的歷史版本。實驗如下:
C:\>svn commit E:\Temp\ECoupon -m "update read-from-local.txt file"
Sending E:\Temp\ECoupon\read-from-wc.txt
Transmitting file data .
Committed revision 19.

C:\>svn update E:\Temp\ECoupon
At revision 19.
好,現在在開始回滾之前,我需要知道在我提交變更之后,是否有其他人對該文件進行了修改,以及修改的時間。這時我們可以通過svn log命令方便地查看版本的變更歷史。該命令的用法:
svn log [PATH]、svn log URL[PATH...]、svnl og URL[@REV] [PATH...]
默認情況下如果svn log不加任何參數,會顯示當前目錄下所有資源的變更歷史,我們可以通過PATH,URL來限定顯示范圍,還可以通過URL PATH來顯示某個URL下的某個(些)文件的變更歷史,甚至還可以指定版本號,版本范圍。
下面我們逐個來看svn log的使用:
●svn log PATH
C:\>svn log E:\Temp\ECoupon\read-from-wc.txt
------------------------------------------------------------------------
r19 | qlinpen | 2009-12-09 16:08:59 +0800 (星期三, 09 十二月 2009) | 1 line

update read-from-local.txt file
------------------------------------------------------------------------
r18 | qlinpen | 2009-12-08 23:11:45 +0800 (星期二, 08 十二月 2009) | 1 line

commit after update
------------------------------------------------------------------------
●svn log URL [PATH...]
C:\>svn log http://localhost:8000/svn/Workspace/Ericsson/ECoupon/read-from-wc.txt
------------------------------------------------------------------------
r19 | qlinpen | 2009-12-09 16:08:59 +0800 (星期三, 09 十二月 2009) | 1 line

update read-from-local.txt file
------------------------------------------------------------------------
r18 | qlinpen | 2009-12-08 23:11:45 +0800 (星期二, 08 十二月 2009) | 1 line

commit after update
------------------------------------------------------------------------

C:\>svn log http://localhost:8000/svn/Workspace/Ericsson ECoupon/read-from-wc.txt
------------------------------------------------------------------------
r19 | qlinpen | 2009-12-09 16:08:59 +0800 (星期三, 09 十二月 2009) | 1 line

update read-from-local.txt file
------------------------------------------------------------------------
r18 | qlinpen | 2009-12-08 23:11:45 +0800 (星期二, 08 十二月 2009) | 1 line

commit after update
------------------------------------------------------------------------
●svn log URL[@REV] [PATH]
C:\>svn log -r 18:HEAD E:\Temp\ECoupon\read-from-wc.txt
------------------------------------------------------------------------
r18 | qlinpen | 2009-12-08 23:11:45 +0800 (星期二, 08 十二月 2009) | 1 line

commit after update
------------------------------------------------------------------------
r19 | qlinpen | 2009-12-09 16:08:59 +0800 (星期三, 09 十二月 2009) | 1 line

update read-from-local.txt file
------------------------------------------------------------------------

C:\>svn log -r 18:19 http://localhost:8000/svn/Workspace/Ericsson/ECoupon/read-from-wc.txt
------------------------------------------------------------------------
r18 | qlinpen | 2009-12-08 23:11:45 +0800 (星期二, 08 十二月 2009) | 1 line

commit after update
------------------------------------------------------------------------
r19 | qlinpen | 2009-12-09 16:08:59 +0800 (星期三, 09 十二月 2009) | 1 line

update read-from-local.txt file
------------------------------------------------------------------------

C:\>svn log E:\Temp\ECoupon\read-from-wc.txt@18
------------------------------------------------------------------------
r18 | qlinpen | 2009-12-08 23:11:45 +0800 (星期二, 08 十二月 2009) | 1 line

commit after update
------------------------------------------------------------------------

C:\>svn log http://localhost:8000/svn/Workspace/Ericsson/ECoupon/read-from-wc.txt@18
------------------------------------------------------------------------
r18 | qlinpen | 2009-12-08 23:11:45 +0800 (星期二, 08 十二月 2009) | 1 line

commit after update
------------------------------------------------------------------------
以上各種svn log的用法看似復雜,實際上離不開兩樣東西:
A.資源路徑:本地路徑(PATH)或遠程路徑(URL/URL PATH)
B.版本號或版本范圍:-r 18:HEAD或者@19
當我們知道了資源的版本變更歷史后,我們就可以著手進行回滾到歷史版本的操作了。
-------------------------------------------------------------
生活就像打牌,不是要抓一手好牌,而是要盡力打好一手爛牌。
posted on 2009-12-09 16:01
Paul Lin 閱讀(314)
評論(0) 編輯 收藏 所屬分類:
項目管理