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