第一種情況:當代碼還未提交時
# svn revert [-R] somefile
當somefile爲單個文件時,直接svn revert somefile就行了;
當somefile爲目錄時,需要加上參數-R(Recursive,遞歸),否則只會將somefile這個目錄改動。
注意:svn revert本身有固有的危險,因爲它的目的是放棄未提交的修改。一旦你選擇了恢復,Subversion沒有方法找回未提交的修改。
第二種情況:改動已經被提交
假設最新版本號是28。
2、然後找出要回滾的確切版本號:
svn log [somefile]
如果log很多,可以使用參數--limit
svn log --limit 10 [somefile]
如果想要更詳細的瞭解情況,可以使用
svn diff -r 28:25 [somefile]
3、回滾到版本號25:
提交後版本變成了29。
注意:雖然 svn up -r 25 somefile 也可以使文件回滾,但是當提交時由於不是最新版本而無法提交,還需要先更新,拷貝,再提交,所以不建議使用。
補充:
svn忽略文件或文件夾
svn propset svn:ignore '*' template_c/
三、switch的理解
switch用於在同一個版本庫內不同分支之間的切換
relocate用於版本庫訪問地址變更時,重新定位版本庫
比如,由於SVN服務器更換到另一臺主機上,這是SVN服務器的地址改變了,那麼各客戶端就無法連接SVN服務器了,這時各客戶端就需要執行relocate,將本地工作區的連接到新的服務器上去
而如果同一個版本庫內,如果有多個分支,比如你現在正在trunk上開發,但需要切換到某個分支上開發,那麼你可以用switch來進行這個切換操作,這時SVN會比較trunk和這個分支之間的差異,將差異部分傳送到你的本地工作區,而不用將整個分支傳送給你,從而避免巨量數據的傳輸。switch操作之後,你所進行的update、commit操作都變成了針對那個分支,當你在分支上的工作完成後,還可以再次switch回trunk。
switch還有另外一些用途,比如希望讓分支中的某個文件夾保持和trunk同步,因爲有人正在trunk的這個文件夾中進行開發,在分支中想用到開發的最新成果,那麼就可以在分支的這個文件夾上設置swtich到trunk,這時update整個分支的話,就會把trunk上的這個文件夾取下來了。但是,當然你如果修改了這個文件夾的內容,commit後也是提交到了主幹而不是提交到了分支。