我們一直在犯錯誤,如果生活總會給你第二次機會,或者改正錯誤的機會,那不是很棒嗎?幸運的是你使用了Subversion,大多數(shù)情況下,你可以輕松的修改錯誤。
假設(shè)我們的Subversion不能做的很簡單,你犯了一些錯誤,但是刪除了所有發(fā)生過的軌跡,Subversion記錄在某個時間點的版本庫,而且歷史不可變,也是不可以修改。很不幸,這意味著一旦你不小心提交了包含密碼的配置文件,你可以編輯文件并再次提交,但是Subversion保留初的提交,包含密碼。刪除這些東西的辦法是把版本庫dump到一個文件,從dump文件中小心的刪除那些內(nèi)容,然后重新加載版本庫。這不適合膽小者,但是可以做。大多數(shù)Subversion安裝使用提交鉤子在每次提交時發(fā)送修改細節(jié)郵件,這很有價值,即使Subversion讓刪除軌跡變得容易,也無法避免郵件發(fā)送到全世界。
一個Subversion可以簡單修正的常見錯誤是對于刪除的恢復(fù),我恨這一點,但是幾個月以前我不小心將Subclipse版本庫的整個branches目錄刪除了,你可以在這里看到使用ViewVC看到血淋淋的細節(jié),我知道我可以簡單將它找回來。如果你查看以前的鏈接,你可以看到我在修訂版本2981提交了刪除,我需要做的是將其從2980拷貝出來。
svn copy -r2980 http://subclipse.tigris.org/svn/subclipse/branches@2980
http://subclipse.tigris.org/svn/subclipse/branches
這個命令的意思是,”將2980修訂版本的branches目錄拷貝到branches(目前不存在的目錄)”,你需要在第一個URL中添加 @2980,它告訴Subversion的歷史跟蹤規(guī)則找到這個目錄。如果你省略這個參數(shù),Subversion會查看版本庫的HEAD修訂版本,你可以在ViewVC的這里看到提交的結(jié)果,請注意你可以看到項目是從修訂版本2980拷貝而來。
所以是這樣將刪除的東西恢復(fù),如果事情更加細致該如何?你修改了一組文件,但是你不希望有這些修改。你希望從本質(zhì)上”回退提交”,這對于 Subverison非常簡單,你可以通過所謂的”反向合并實現(xiàn)”。本質(zhì)上講,是使用svn merge命令將修訂版本號反轉(zhuǎn)過來,對于命令行用戶,這種情況已經(jīng)在Subversion book中詳細論述,請見回退修改部分,這一小節(jié)也有一些其他的例子,很值得一看。
Subclipse和TortoiseSVN在其圖形界面中提供了更簡單的方法,1月份我在我的個人blog里寫了一個類似的例子,它介紹了使用Subclipse GUI完成這個功能的方法,如果你希望知道如何使用GUI完成這個功能可以看這個帖子。
如果說我希望這個帖子能帶來什么,我希望是增加Subversion對于數(shù)據(jù)安全的信心,繼續(xù)修改并提交,那是Subversion的工作,如果你犯了錯誤,不必擔心,Subversion一直會給你第二次機會。