Subversion版本升級兼容性以及合并跟蹤相關問題報道 上篇
通過本文學習,你可以了解更多Subversion版本升級兼容以及合并跟蹤等相關問題,Subversion1.5是以前Subversion發布版本的超集,可以認為是當前“***的”版本。包含所有1.0.x到1.4.x的,以及以前版本沒有的修正和特性。所有的新特性將會寫入Subversionbook,見svnbook.red-bean.com。
兼容性問題以前的客戶端和服務器可以直接與1.5的服務器和客戶端交互,然而,如果服務器和客戶端不全是1.5時,一些新的1.5特性(例如合并跟蹤)將會不可用,而另外一些特性如稀疏檢出,在服務器是舊的,客戶端是新的時,可以運行但是效率比較低。沒有必要轉儲并重新加載版本庫,subversion1.5可以讀取以前創建的版本,升級只需用***的庫和二進制程序覆蓋原來的程序。
Subversion會維護與先前版本API/ABI的兼容,只會增加新的特性,而不會刪除舊的特性。根據1.0,1.1,1.2,1.3或1.4的API編寫的程序,可以使用1.5的庫編譯,為1.5編寫的程序不必為舊庫編譯或運行。工作拷貝和版本庫格式更改工作拷貝格式已經升級,這意味著1.4和更老的Subversion客戶端不能與Subversion1.5的工作拷貝上工作,工作拷貝是自動升級的。類似的,版本庫格式也已經改變,意味著直接訪問庫的1.4以及舊的版本的程序如svnserve,mod_dav_svn,svnadmin等不能讀取Subversion1.5的版本庫,但是版本庫是不能自動升級的。
工作拷貝升級警告:如果一個Subversion1.5客戶端遇到了一個1.5以前的工作拷貝,它會在接觸到工作拷貝時自動升級工作拷貝格式,并使舊的Subversion客戶端不能再讀這些工作拷貝了。如果你在機器上使用多個版本的Subversion,請確認你對工作拷貝是用的Subversion版本,防止意外升級工作拷貝。(但是這種自動升級行為不會發生在版本庫上,只發生在工作拷。)如果你意外的將工作拷貝從1.4升級到1.5,并希望降級到1.4,可以使用change-svn-wc-format.py,詳情看這篇文章,也可以以–help運行來查看使用指導。
版本庫升級Subversion1.5服務器可以與1.4和以前的版本庫工作,如果不使用svnadminupgrade命令,版本庫不會自動升級到1.5。這意味僅僅升級服務器不能直接得到某些特性,你也需要升級版本庫。(我們決定不使用自動升級版本庫是因為我們不希望subversion1.5偷偷的升級成1.4不可用的版本庫。)在運行svnadminupgrade之后,你或許希望對版本庫運行svn-populate-node-origins-index程序。Subversion1.5為每個版本庫維護了一個節點起源的索引,為了得到一些信息,偶爾構建這個索引。但是對于包含許多修訂的老版本庫,***一次創建這個索引,使用前面說道的工具,而不會因為自己構建這個索引而影響查詢的性能,更多細節見issue#3024。
命令行輸出的變更盡管我們希望盡可能讓命令行程序的的輸出與以前版本保持兼容,但是還是要添加一些信息,這會破壞一些精確依賴輸出的腳本。不幸的是,我們不能列出1.5輸出的所有改變,但有一條可以確定的是沖突標記的行結束符號會和文件的eol-style匹配。SASL和svn://的兼容性所有1.x的客戶端,包含或不包含CyrusSASL支持的,都可以通過在CyrusSASL沒有開啟時認證正常。注意CRAM-MD5和ANONYMOUS機制是Subversion內置的,所以即使CyrusSASL插件不在,我們也可以使用。沒有CyrusSASL支持的1.x客戶端不能通過開啟CyrusSASL,允許CRAM-MD5和ANONYMOUS機制的1.5+的subversion服務器認證,包含CyrusSASL支持的1.5+客戶端可以通過開啟SASL功能的1.5+服務器認證,只要保證服務器支持的某個機制客戶端也支持。
自定義revprops現在需要通過pre-commit鉤子的檢驗Subversion每個修訂版本都有一組關聯的修訂版本屬性;除了標準的日志信息,作者和日志,可以設置任意的用戶定義的屬性。這些屬性本身不是版本化的,所以不能恢復修改的內容。因此,如果我們沒有設置pre-revprop-change,我們就不能修改提交修訂版本的revprops。在Subversion1.5之前,我們只能在提交時提供這三個標準的revprops;管理員使用鉤子來控制這三個標準修訂版本屬性的內容,需要在pre-commit和pre-revprop-change檢查,但是對于自定義的屬性,只有pre-revprop-change是相關的。
Subversion1.5版本添加了svncommit包含–with-revprop選項,允許用戶在提交時為修訂版本指定屬性,因此在Subversion1.5允許在沒有pre-revprop-change鉤子時設置修訂版本屬性,pre-commit可以在提交之前檢查事務修訂版本屬性(就像許多服務器已經使用pre-commit來檢查正確格式化的log)。這意味著如果你以前依賴pre-revprop-changeto鉤子控制對于修訂版本屬性的修改(不僅僅你是跟蹤它們的歷史),那你先現在也需要在pre-commit添加類似的控制。
新特性合并跟蹤(基礎)(客戶端和服務器)合并跟蹤的意思是Subversion版本保持哪些變更從哪里合并過來,這減輕了維護分支的負擔,也給了用戶一個方式來查詢合并的變更—或需要合并的內容—在不同的開發線上。
【編輯推薦】