1、Subversion 1.4有什么新東西? - svnsync,一個(gè)全新的版本庫(kù)鏡像工具
- 大型工作副本的性能提升
- 支持Berkeley 4.4及其“自動(dòng)恢復(fù)”特性
- 采用二進(jìn)制增量算法提高空間性能
- 增加全新的命令開關(guān),提高易用性
- 改進(jìn)的API
- 修正了40多個(gè)bug
詳細(xì)內(nèi)容見下文。
Subversion 1.4在之前版本的基礎(chǔ)上提供了更多功能,我們認(rèn)為它是目前“最好”的一個(gè)版本。1.4版本繼續(xù)支持1.0.x、1.1.x、1.2.x和1.3.x中的全部功能,此外,1.4還包含了很多新的特性并修復(fù)了之前版本中發(fā)現(xiàn)的bug。1.4版本的新特性將會(huì)在1.4版本的free Subversion book中詳細(xì)描述,參見svnbook.red-bean.com。 2、兼容性 舊版本的客戶端和服務(wù)器端軟件能夠直接與1.4版本的服務(wù)器端和客戶端軟件交互。然而,某些1.4版本中新增的特性只有在客戶端和服務(wù)器端軟件皆為最新版本時(shí)才可用。Subversion 1.4能夠直接訪問舊版本創(chuàng)建的版本庫(kù),因此無(wú)需導(dǎo)出導(dǎo)入原有的版本庫(kù)資源。如要升級(jí)至新版本,只需將新版本的庫(kù)文件和可執(zhí)行文件直接覆蓋舊版本文件即可。 Subversion 1.4保持了與舊版本間的API/ABI兼容,僅僅在原來(lái)的基礎(chǔ)上增加了新的功能。使用1.0、1.1、1.2、1.3版本API編寫的程序同樣能夠在1.4版本的程序庫(kù)上編譯運(yùn)行。然而,基于1.4版本編寫的程序無(wú)法保證能夠在之前的版本上編譯或運(yùn)行。 2.1、工作副本及版本庫(kù)的格式變化 由于針對(duì)工作副本庫(kù)的某些改進(jìn)和bug修復(fù)的需要,工作副本格式的版本號(hào)增加了。這也意味著,1.4版本之前的各個(gè)版本客戶端軟件將無(wú)法操作Subversion 1.4生成的工作副本。同樣,版本庫(kù)格式也有了變化,也就意味著1.4版本之前需要直接訪問版本庫(kù)的Subversion工具(如svnserve、mod_dav_svn、svnadmin)無(wú)法讀取Subversion 1.4創(chuàng)建的版本庫(kù)的內(nèi)容。
警告:如果Subversion 1.4客戶端軟件遇到舊版本的工作副本,將會(huì)自動(dòng)將其升級(jí)至新版本工作副本格式,這將會(huì)導(dǎo)致就版本Subversion客戶端軟件無(wú)法訪問此工作副本。如果你需要同時(shí)使用多個(gè)版本的Subversion,那么要特別小心對(duì)于工作副本的訪問,以避免無(wú)意中將工作副本格式升級(jí)。新的版本庫(kù)格式不具備類似的“自動(dòng)升級(jí)”的功能。
2.2、命令行輸出的變化
盡管Subversion的開發(fā)者們盡力保持各個(gè)版本間命令行程序輸出的兼容性,但是有時(shí)必須要添加一些必要的新信息。這可能會(huì)影響到依賴于輸出格式的腳本程序。在1.4版本中,輸出內(nèi)容的變化如下: ·文件沖突標(biāo)記匹配文件定義的eol風(fēng)格。 3、新特性
3.1、svnsync(某些功能需要1.4版本的服務(wù)器端軟件支持) 標(biāo)準(zhǔn)發(fā)布包中包含了一個(gè)全新的工具--svnsync。這個(gè)工具能夠?qū)⒁粋€(gè)版本庫(kù)的歷史信息復(fù)制到另一個(gè)版本庫(kù)中。這種復(fù)制操作可以一次完成,也能夠以增量的方式進(jìn)行(反復(fù)執(zhí)行“sync”即可)。此工具基于抽象網(wǎng)絡(luò)(RA)API開發(fā),因此,本地版本庫(kù)和遠(yuǎn)程版本庫(kù)都可以作為源版本庫(kù)和目的版本庫(kù)。
兼容性問題:因?yàn)閷?dǎo)入操作是通過傳統(tǒng)的網(wǎng)絡(luò)提交方式實(shí)現(xiàn)的,因此此工具能夠向任何版本服務(wù)器上的目的版本庫(kù)中導(dǎo)入信息。但是,需進(jìn)行導(dǎo)出操作的源版本庫(kù)必須搭建在1.4版本(或更新的)的服務(wù)器上。
此工具的使用方法很快將在Subversion book中予以描述,目前,svnsync help命令可以給出足夠的使用信息;svnsync的子命令并不多,并且?guī)椭到y(tǒng)中也有完整的描述。 3.2、工作副本性能提升(客戶端) Subversion客戶端軟件在管理工作副本的方法上有了本質(zhì)的改進(jìn)。.svn/entries文件不再是XML格式,并且客戶端軟件在管理和儲(chǔ)存屬性元數(shù)據(jù)的方法上更加智能化。
以上改變的結(jié)果是,性能得到了本質(zhì)上的提升。新的工作副本格式使得客戶端軟件能夠更快的搜索工作副本、檢測(cè)文件變更、管理屬性元數(shù)據(jù)和處理大文件。由于不再需要那么多inode,工作副本占用的磁盤空間也減少了。此外,許多于合并、復(fù)制操作相關(guān)的、長(zhǎng)期無(wú)法解決的bug也得以修復(fù)。
警告:Subversion 1.4版本客戶端軟件會(huì)自動(dòng)將舊版本的工作副本升級(jí)至新版本,并且不會(huì)給出警告信息。升級(jí)操作會(huì)導(dǎo)致工作副本無(wú)法被舊版本客戶端工具訪問。參見上文中,“工作副本格式變化”。 3.3、BerkeleyDB 4.4和自動(dòng)恢復(fù)(服務(wù)器端) 之前版本Subversion的一個(gè)通病是服務(wù)器端軟件的崩潰可能會(huì)導(dǎo)致基于BerkeleyDB的版本庫(kù)處于一種不可用的“楔住”的狀態(tài),需要管理員手工干預(yù)和修復(fù)。(注意:這并非源于BerkeleyDB自身的bug,而是由于Subversion對(duì)其非正規(guī)的操作方式!)
現(xiàn)在Subversion 1.4能夠在支持“自動(dòng)恢復(fù)”功能的BerkeleyDB 4.4的基礎(chǔ)上編譯。如果Subversion服務(wù)器端軟件進(jìn)行崩潰并導(dǎo)致版本庫(kù)處于不穩(wěn)定狀態(tài),則下一個(gè)試圖訪問版本庫(kù)的進(jìn)程會(huì)注意到這個(gè)問題,它會(huì)奪取此版本庫(kù)的獨(dú)占控制權(quán),并自動(dòng)恢復(fù)它。理論上來(lái)說(shuō)(我們的測(cè)試也能夠證明),這個(gè)新功能使基于BerkeleyDB的版本庫(kù)與基于FSFS的版本庫(kù)具有同樣的防楔能力。
警告:雖然,升級(jí)至最新的Berkeley DB不需要導(dǎo)出導(dǎo)入版本庫(kù),但是依照Berkeley DB的升級(jí)指南進(jìn)行必要的更改仍然是需要的,這樣可以保證版本庫(kù)能夠被最新版本的庫(kù)訪問。Berkeley DB環(huán)境參數(shù)的升級(jí)參見http://sleepycat.com/docs/ref/upgrade/process.html。 3.4、二進(jìn)制增量編碼改進(jìn)(客戶端和服務(wù)器端) Subversion使用xdelta算法計(jì)算字節(jié)串之間的區(qū)別。此算法的輸出以一個(gè)名為“svndiff”的特定格式儲(chǔ)存。svndiff數(shù)據(jù)就是版本庫(kù)中儲(chǔ)存的關(guān)于文件不同版本間差別的數(shù)據(jù),svndiff數(shù)據(jù)也在客戶端和服務(wù)器端之間傳輸(比如更新和提交時(shí))。
在Subversion 1.4中,svndiff格式在占用磁盤空間上有了較大改進(jìn)--在某些情況下可以比普通文本文件節(jié)省50%的空間。因此,如果你選擇重新導(dǎo)出導(dǎo)入版本庫(kù),新版本庫(kù)應(yīng)該比原來(lái)的版本庫(kù)占用更少的磁盤空間(注意要使用svnadmin 1.4版本的svnadmin工具創(chuàng)建新的版本庫(kù))。此外,如果客戶端和服務(wù)器端軟件均為1.4版,網(wǎng)絡(luò)傳輸?shù)膬?nèi)容也會(huì)更少,速度也會(huì)更快。
警告:svnadmin 1.4創(chuàng)建的版本庫(kù)無(wú)法被舊版的Subversion庫(kù)和工具訪問。為了獲得更小的數(shù)據(jù)格式,你必須重新導(dǎo)出導(dǎo)入版本庫(kù)中的數(shù)據(jù)。如果未使用svnadmin 1.4創(chuàng)建新的版本庫(kù),則其還將保持舊格式(體積大),并且能夠被舊版的subversion工具訪問。 3.5、新的子命令開關(guān) Subversion的新版本增加了一些新的命令行客戶端軟件的開關(guān)和選項(xiàng)。它們是:
svn blame --force 顯示blame的輸出,即使文件是二進(jìn)制格式的。 svn merge/blame -x 合并和blame命令現(xiàn)在可以傳遞參數(shù)給外部diff3程序。 svn diff/merge -c/--change 現(xiàn)在可以通過-c N來(lái)查看或合并一個(gè)單獨(dú)的修正,以代替之前復(fù)雜的 -r N-1:N。 svn diff --summarize 僅顯示有變化的文件,顯示的格式與“svn status”相同。此選項(xiàng)可以直接從版本庫(kù)中獲取變化信息,而“svn status”僅能從工作副本中獲取本地變化。 svn diff -x [-u | -b | -w | --ignore-eol-style] Subversion內(nèi)部的diff引擎現(xiàn)在在計(jì)算變化時(shí)能夠忽略白空格和eol風(fēng)格的變化。 4、改進(jìn)和bug修正 4.1、svnserve作為Windows服務(wù)(服務(wù)器端) svnserve服務(wù)器現(xiàn)在可以作為Windows服務(wù)程序運(yùn)行了。這使得svnserve可以在系統(tǒng)啟動(dòng)時(shí)自動(dòng)運(yùn)行,不需要用戶登錄也不需要外部服務(wù)“包裝”程序。設(shè)置svnserve服務(wù)的信息參見http://svn.collab.net/repos/svn/ ... windows-service.txt。 4.2、OS X Keychain支持(客戶端) 在OS X上,svn客戶端軟件現(xiàn)在可以緩存Keychain中的密碼而不再是~/.subversion/auth/。 4.3、API改進(jìn)(客戶端和服務(wù)器端) 如果使用Subversion API開發(fā)第三方客戶端程序,可以關(guān)注一些新的API: ·RA重放API(在svnsync中用到),提供了一次獲得所有與某些修訂版本相關(guān)的數(shù)據(jù)。 ·許多API修正至新版本。 4.4、其它bug修正(客戶端和服務(wù)器端)
迄今為止,共修正bug40余處。細(xì)節(jié)參見http://svn.collab.net/repos/svn/trunk/CHANGES。
5、Subversion 1.2.x系列停止支持
Subversion 1.2.x產(chǎn)品線將不再獲得支持。這并不意味著1.2版本難堪重負(fù)。如果它工作得很好,并且能夠滿足要求,那么無(wú)需更多擔(dān)心。“不再獲得支持”只是說(shuō)我們將停止接受和處理任何與1.2.x版本有關(guān)的bug報(bào)告,并且不再提供任何bug修正版本,除非是導(dǎo)致數(shù)據(jù)丟失的最危急安全的bug。
翻譯:leasun 原文參見:http://subversion.tigris.org/svn_1.4_releasenotes.html |