官方位置為:http://subversion.tigris.org/svn_1.6_releasenotes.zh.html
本文根據(jù)原文r36726,由Subversion中文站的中文化翻譯小組翻譯,歡迎各位參與翻譯工作,加入地址:http://code.google.com/p/svncndoc/,參與翻譯的志愿者包括rocksun。
Subversion 1.6是所有以前Subversion版本的超集,可以認(rèn)為是當(dāng)前最好的版本。任何1.0.x到1.5.x的bug修正和特性,都存在于1.6中。新的特性最終會(huì)紀(jì)錄在Subversion圖書中(svnbook.red-bean.com)。
本文描述了主要的變更,完整的列表可以看CHANGES的1.6部分。
以前的客戶端和服務(wù)器可以直接與1.6的服務(wù)器和客戶端交互,然而,如果服務(wù)器和客戶端不全是1.6時(shí),一些新的1.6特性將會(huì)不可用。而另外一些特性,在服務(wù)器是舊的,客戶端是新的時(shí),可以運(yùn)行但是效率比較低。
沒有必要轉(zhuǎn)儲(chǔ)并重新加載版本庫(kù),subversion 1.6可以讀取以前創(chuàng)建的版本,升級(jí)只需用最新的庫(kù)和二進(jìn)制程序覆蓋原來的程序。
Subversion會(huì)維護(hù)與先前版本API/ABI的兼容,只會(huì)增加新的特性,而不會(huì)刪除舊的特性。根據(jù)1.0, 1.1, 1.2, 1.3, 1.4或1.5 的API編寫的程序,可以使用1.6的庫(kù)編譯,為1.6編寫的程序不一定能為舊庫(kù)編譯或運(yùn)行。
新特性 | Minimum Client1 | Minimum Server | Minimum Repository | 說明 |
---|---|---|---|---|
FSFS Packing | any | 1.6 | 1.6 | |
Tree Conflicts | 1.6 | 1.6 | any | 可以用1.6以前的服務(wù)器,但是某些類的沖突將不能檢測(cè)到。 |
1提醒:在使用file:// 訪問方法時(shí),Subversion程序同時(shí)是客戶端和服務(wù)器。 |
工作拷貝格式已經(jīng)升級(jí),這意味著1.5和更老的Subversion客戶端不能在Subversion 1.6的工作拷貝上工作,工作拷貝是自動(dòng)升級(jí)的。
類似的,版本庫(kù)文件系統(tǒng)格式也已經(jīng)改變,意味著那些直接訪問庫(kù)的1.5以及舊的版本的工具如svnserve, mod_dav_svn, svnadmin等不能讀取Subversion 1.6的版本庫(kù),但是版本庫(kù)不是自動(dòng)升級(jí)的。
警告:如果一個(gè)Subversion 1.6客戶端遇到了一個(gè)1.6以前的工作拷貝,它會(huì)在接觸到工作拷貝時(shí)自動(dòng)升級(jí)工作拷貝格式,并使舊的Subversion客戶端不能再讀這些工作拷貝了。如果你在機(jī)器上使用多個(gè)版本的Subversion,請(qǐng)確認(rèn)你對(duì)工作拷貝使用的subversion版本,防止意外升級(jí)工作拷貝。(但是這種“自動(dòng)升級(jí)”行為不會(huì)發(fā)生在版本庫(kù)上,只發(fā)生在工作拷貝。)
如果你意外的將工作拷貝從1.5升級(jí)到1.6,并希望降級(jí)到1.5,可以使用change-svn-wc-format.py,詳情看這篇FAQ文章,也可以加--help
運(yùn)行來查看使用指導(dǎo)。
Subversion 1.6服務(wù)器可以與1.5和以前的版本庫(kù)工作,如果不使用svnadmin upgrade
命令,版本庫(kù)不會(huì)自動(dòng)升級(jí)到1.6。這意味僅僅升級(jí)服務(wù)器不能直接得到某些特性,你也需要升級(jí)版本庫(kù)。(我們決定不使用自動(dòng)升級(jí)版本庫(kù),因?yàn)槲覀儾幌M鹲ubversion 1.6偷偷的升級(jí)成1.5不可用的版本庫(kù),這對(duì)于版本庫(kù)管理來說是一件很慎重的事情。)
盡管我們希望盡可能讓命令行程序的的輸出與以前版本保持兼容,但是還是要添加一些信息,這會(huì)破壞一些精確依賴輸出的腳本。
svn proplist --verbose
輸出XXX(r32484): svn proplist --verbose
的輸出已經(jīng)改善。
$ svn proplist --verbose build.conf
Properties on 'build.conf':
svn:eol-style
native
svn:mergeinfo
/trunk/build.conf:1-4800
/branches/a/build.conf:3000-3400
/branches/b/build.conf:3200-3600
$
svn status
的輸出發(fā)生變化svn status
增加了第7列輸出,用來顯示項(xiàng)目是否為目錄樹沖突的犧牲品,另外還增加了一行,顯示目錄樹中沖突的詳細(xì)描述。
$ svn status
M Makefile.in
A C src/error.c
> local add, incoming add upon update
M src/log.c
M C src/path.c
> local edit, incoming delete upon update
D C src/properties.c
> local delete, incoming edit upon merge
M C src/time.c
$
pre-lock
中對(duì)于輸出數(shù)據(jù)處理的變化XXX(r32778)
Subversion 1.6對(duì)于svn:externals的使用增加了許多新的特性。包括:
如果svn:externals的描述指向了一個(gè)文件,這個(gè)文件會(huì)作為版本化條目加入到工作拷貝。
目錄和文件外部定義有一些區(qū)別。
普通版本化文件和外部文件的區(qū)別。
其他事實(shí)。
XXX: Need to document possible incompatibilies (see this thread
可以看Subversion圖書的svn:externals小節(jié)。
Subversion 1.6能夠識(shí)別出一種新的沖突類別,稱為“目錄樹沖突”。這種沖突位于目錄結(jié)構(gòu)級(jí)別,而不是文件內(nèi)容。
包括刪除本地已經(jīng)修改的文件,對(duì)于本地刪除文件的修改。在沖突被標(biāo)示為解決之前,不能提交目錄樹沖突的相關(guān)文件和目錄。
請(qǐng)注意,Subversion一直將重命名處理為“copy+delete”操作,所以文件重命名造成的目錄樹沖突只能被檢測(cè)為文件的添加和刪除,因此,有可能錯(cuò)報(bào)目錄樹的沖突。
為了利用目錄樹沖突檢測(cè),嘗試提交在HEAD修訂中已經(jīng)刪除的文件將會(huì)報(bào)錯(cuò),在Subversion 1.5中,這被認(rèn)為是正常的操作,潛在的導(dǎo)致了沒有變更的修訂版本。
Subversion圖書的tree conflicts小節(jié)。
Subversion 1.6包含了Berkeley DB和FSFS后端的改進(jìn),主要為了改進(jìn)存儲(chǔ)空間,可以顯著產(chǎn)生更小的版本庫(kù),這些變更包括:
當(dāng)使用多個(gè)分支,并在其間合并時(shí),經(jīng)常會(huì)有一些文件的行的歷史包含相同的內(nèi)容,在過去,Subversion會(huì)按照前一個(gè)版本的增量保存這些文件。Subversion 1.6會(huì)使用文件系統(tǒng)中已有的表示來處理重復(fù)的存儲(chǔ)。根據(jù)版本庫(kù)的大小,以及分支和合并的程度,這樣可以節(jié)省20%的Berkeley DB版本庫(kù),或者15%的FSFS版本庫(kù)空間。
Subversion 1.5為FSFS版本庫(kù)引入了將修訂版本文件和修訂屬性文件的碎片(sharded)存放到多個(gè)目錄。Subversion 1.6將這個(gè)概念進(jìn)一步深入,允許完全粉碎的目錄打包成一個(gè)文件。通過減少文件系統(tǒng)內(nèi)部的碎塊,打包的FSFS版本庫(kù)顯著的節(jié)省了空間,特別是如果包含了很多小的提交。使用一組碎片一個(gè)文件的方法,也可以讓Subversion減少磁盤I/O的開銷,充分挖掘操作系統(tǒng)緩存。
為了打包,可以對(duì)版本庫(kù)運(yùn)行svnadmin pack
,一旦打包,將沒有回到未打包狀態(tài)的方法,只能通過Subversion 1.6或以后的服務(wù)器使用。
XXX: Memcached可以為FSFS版本庫(kù)緩存數(shù)據(jù)。
額外的構(gòu)建依賴:APR-Util ≥1.3 || ( APR-Util < 1.3 && APR_Memcache )
XXX
Subversion 1.6為Subversion API引入了新的python綁定,新的綁定可以充分利用ctypes庫(kù)提供的標(biāo)準(zhǔn)API,提供標(biāo)準(zhǔn)Subversion結(jié)構(gòu)的面向?qū)ο蟮慕涌冢@個(gè)綁定相比于原來的基于SWIG的綁定有以下優(yōu)勢(shì):
構(gòu)建ctypes綁定會(huì)產(chǎn)生兩種訪問Subversion的方式。第一種是標(biāo)準(zhǔn)API的直接python轉(zhuǎn)移,ctypes提供了一些基本的類型轉(zhuǎn)化,并允許象在C代碼中一樣調(diào)用Subversion功能。新的綁定也引入了一組python類來實(shí)現(xiàn)Subversion特性的高級(jí)訪問,這些類充分利用了python的特性,并盡可能的隱藏了C實(shí)現(xiàn),使得不熟悉C API的python程序員可以簡(jiǎn)便的使用Subversion。
dc, mc, tc選項(xiàng)。
這是一個(gè)使用命令行客戶端的例子:
$ svn up
U Makefile.in
Conflict discovered in 'configure.ac'.
Select: (p) postpone, (df) diff-full, (e) edit,
(mc) mine-conflict, (tc) theirs-conflict,
(s) show all options: s
(e) edit - change merged file in an editor
(df) diff-full - show all changes made to merged file
(r) resolved - accept merged version of file
(dc) display-conflict - show all conflicts (ignoring merged version)
(mc) mine-conflict - accept my version for all conflicts (same)
(tc) theirs-conflict - accept their version for all conflicts (same)
(mf) mine-full - accept my version of entire file (even non-conflicts)
(tf) theirs-full - accept their version of entire file (same)
(p) postpone - mark the conflict to be resolved later
(l) launch - launch external tool to resolve conflict
(s) show all - show this list
Select: (p) postpone, (df) diff-full, (e) edit,
(mc) mine-conflict, (tc) theirs-conflict,
(s) show all options: mc
G configure.ac
Updated to revision 36666.
$
在Subversion 1.6,svn update
的--set-depth
參數(shù)有了新的值—exclude,這個(gè)值告訴Subversion忽略工作拷貝中的目標(biāo),立刻起作用,直到以后再通知改變。在Subversion 1.6之前,一個(gè)目錄很難從工作拷貝刪除。如果不是借助Subversion命令刪除一個(gè)目錄,它會(huì)在下一次svn update
回來。如果通過svn delete
刪除這個(gè)目錄,它會(huì)一直在本地被標(biāo)示為修改。(當(dāng)然,如果你不小心提交了則另當(dāng)別論。)1.6中新的排他機(jī)制修正了這些問題。
請(qǐng)注意,如果你排除了一個(gè)版本化的目錄,其中包含了未版本化或本地有修改的文件,Subversion會(huì)優(yōu)雅的處理這種情形,所有的文件都不能安全的刪除,Subversion會(huì)保留他們,當(dāng)然也包括所有中間目錄。
看這篇博文。
XXX
mod_dav_svn現(xiàn)在支持一個(gè)新的公共URI語(yǔ)法來檢查較早版本的文件和目錄。這樣可以讓用戶無(wú)需Subversion客戶端就可以訪問歷史,并讓第三方工具更加簡(jiǎn)單(例如代碼評(píng)審服務(wù)),直接與版本庫(kù)交互而無(wú)需svn庫(kù)。
http://host/repos/path?[p=PEG][&r=REV]
新的語(yǔ)法與svn命令行客戶端的語(yǔ)法類似。簡(jiǎn)單的http://host/repos/path請(qǐng)求獲取路徑上的HEAD修訂版本,而添加“p”查詢參數(shù),可以指明另外的peg修訂版本,例如:
http://host/repos/path?p=38
...這與在命令行指明“path@38”類似。添加“r”查詢參數(shù)則類似于命令行中的“-r”選項(xiàng),讓版本庫(kù)從peg修訂版本回溯到較早的操作修訂版本:
http://host/repos/path?p=38&r=20
同命令行一樣,peg修訂版本缺省與HEAD相同,而操作修訂版本則默認(rèn)與peg修訂版本相同。在線圖書這個(gè)小節(jié)詳細(xì)介紹了這些東西。
在命令行客戶端有太多改進(jìn)和新選項(xiàng)可以在這里列出來,除了本文已經(jīng)提到的部分,下面是一些被認(rèn)為是重要的,但是完整的列表請(qǐng)看CHANGES文件。
svn log
命令可以在一次調(diào)用中接受多個(gè)修訂版本參數(shù),-c和-r選項(xiàng)都支持。
$ svn log -r36169 -r36171 http://svn.collab.net/repos/svn/
------------------------------------------------------------------------
r36169 | sussman | 2009-02-26 14:46:44 -0800 (Thu, 26 Feb 2009) | 1 line
...log message omitted...
------------------------------------------------------------------------
r36171 | joeswatosh | 2009-02-26 22:05:28 -0800 (Thu, 26 Feb 2009) | 20 lines
...log message omitted...
$ svn log -c36169,36171 http://svn.collab.net/repos/svn/
------------------------------------------------------------------------
r36169 | sussman | 2009-02-26 14:46:44 -0800 (Thu, 26 Feb 2009) | 1 line
...log message omitted...
------------------------------------------------------------------------
r36171 | joeswatosh | 2009-02-26 22:05:28 -0800 (Thu, 26 Feb 2009) | 20 lines
...log message omitted...
添加到svn
和svnsync
的選項(xiàng),這樣非交互式的操作也可以在未經(jīng)過權(quán)威信任的自簽名憑證下工作。
$ svn log -r36364 https://svn.collab.net/repos/svn/trunk --trust-server-cert --non-interactive沒有這個(gè)選項(xiàng):
------------------------------------------------------------------------
r36364 | stylesen | 2009-03-06 13:11:20 +0530 (Fri, 06 Mar 2009) | 3 lines
...log message omitted...
------------------------------------------------------------------------
$ svn log -r36364 https://svn.collab.net/repos/svn/trunk
Error validating server certificate for 'https://svn.collab.net':
- The certificate is not issued by a trusted authority. Use the
fingerprint to validate the certificate manually!
Certificate information:
- Hostname: svn.collab.net
- Valid: from Sep 24 22:01:07 2007 GMT until Sep 23 22:01:07 2011 GMT
- Issuer: sv, CollabNet, Brisbane, California, US
(hostname@collab.net)
- Fingerprint:
AA:5B:74:B1:E2:7F:38:B3:2B:C2:B1:60:6E:01:BB:F5:7C:37:98:46
(R)eject, accept (t)emporarily or accept (p)ermanently? t
------------------------------------------------------------------------
r36364 | stylesen | 2009-03-06 13:11:20 +0530 (Fri, 06 Mar 2009) | 3 lines
...log message omitted...
------------------------------------------------------------------------
pre-lock鉤子現(xiàn)在可以通過標(biāo)準(zhǔn)輸出指明鎖定令牌字符串;詳細(xì)請(qǐng)看r32778。注意,當(dāng)鉤子用了這個(gè)特性,必須確保鎖定令牌在版本庫(kù)范圍是唯一的。
Subversion 1.6有許多新的修正的API需要列出來,一般的API信息可以看Subversion API,如果你使用Subversion API開發(fā)第三方的客戶端程序,你可能需要看接口的頭文件來查看發(fā)生的變更。
一個(gè)常見的API變更是以前接受的recurse參數(shù),現(xiàn)在升級(jí)為接受depth參數(shù),為了接納新的稀疏檢出特性。
語(yǔ)言綁定幾乎已經(jīng)根據(jù)新API更新,盡管可能有些會(huì)有滯后。
大量bug被修正,細(xì)節(jié)請(qǐng)看CHANGES的1.6.0部分。
Subversion 1.4.x線不再支持,這不是意味著1.4的安裝已經(jīng)要完蛋了;如果它工作良好,滿足了你的需要,那很好。“不再支持”的意思是我們不再接受1.4.x版本的bug報(bào)告,也不會(huì)發(fā)布任何1.4.x的bug修正版本,除非有絕對(duì)安全隱患或數(shù)據(jù)丟失的bug。
我們現(xiàn)在需要SQLite來構(gòu)建服務(wù)器和客戶端,我們推薦3.6.11或更新的版本,但是3.4.0已經(jīng)足夠。如果它位于tarball的根下,Subversion會(huì)嘗試使用SQLite amalgamation,否則Subversion會(huì)在系統(tǒng)的常見位置尋找SQLite。你也可以通過傳遞給configure
命令--with-sqlite
來指明SQLite庫(kù)或amalgamation的位置。
聯(lián)系客服