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