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