版本控制是管理數(shù)據(jù)變更的一種技術(shù)。對(duì)于程序員來(lái)說(shuō),它已經(jīng)成為不可或缺的工具,因?yàn)樗麄兘?jīng)常修改軟件代碼,產(chǎn)生部分的變更,然后第二天再取消所有的變更。想象有一群程序員同時(shí)工作的情況你能理解,為什么需要一個(gè)良好的系統(tǒng)來(lái)管理可能出現(xiàn)的混亂。
Subversion 是一個(gè)開(kāi)源的版本控制系?, 也是說(shuō) Subversion 管理著隨時(shí)間改變的數(shù)據(jù)。 這些數(shù)據(jù)放置在一個(gè)中央資料檔案庫(kù) (repository) 中。 這個(gè)檔案庫(kù)很像一個(gè)普通的文件服務(wù)器, 不過(guò)它會(huì)記住每一次文件的變動(dòng)。 這樣你可以把檔案恢復(fù)到舊的版本, 或是瀏覽文件的變動(dòng)歷史。 許多人會(huì)把版本控制系?想像成某種 “時(shí)光機(jī)器”。
某些版本控制系?也是 SCM(software configuration management) 系統(tǒng)。 這些系?是特?設(shè)計(jì)來(lái)管理大量代碼的, 而且具有許多專門針對(duì)軟件開(kāi)發(fā)的功能,像通俗易懂的程序語(yǔ)言, 或是提供編譯軟件的工作。 不過(guò) Subversion 并不是這樣的系統(tǒng); 它是一個(gè)通用的系統(tǒng), 可用來(lái)管理任何類型的文件, 其中包括了程序源碼。
早在2000年,CollabNet, Inc.(http://www.collab.net)開(kāi)始召集開(kāi)發(fā)人員開(kāi)發(fā)CVS的替代品。CollabNet 提供一套名為SourceCast協(xié)同工作套件,其中的一部分組件是版本控制。雖然SourceCast使用CVS作為其初的版本控制系統(tǒng),但是CVS的種種限制從一開(kāi)始處處可見(jiàn),后CollabNet明白必須要找到一個(gè)更好的解決方案。不幸的是,至少在免費(fèi)license中,因?yàn)闆](méi)有更好的選擇,CVS已經(jīng)廣泛成為了開(kāi)源世界中事實(shí)上的標(biāo)準(zhǔn)。所以CollabNet決定開(kāi)發(fā)一個(gè)新的版本控制系統(tǒng),保留CVS的基本特性但去處CVS的bug和不好的特性。
在2000年2月,他們聯(lián)系《使用CVS開(kāi)發(fā)開(kāi)源項(xiàng)目》(Open Source Development with CVS)(Coriolis, 1999)的作者Karl Fogel,并征求了他是否愿意在這個(gè)新的項(xiàng)目中擔(dān)任一個(gè)角色。巧合的是,當(dāng)時(shí)Karl已經(jīng)和他的朋友Jim Blandy討論了一個(gè)關(guān)于新的版本控制系統(tǒng)的設(shè)計(jì)。在1995年,這兩人成立了Cyclic Software,一個(gè)提供CVS的商業(yè)支持的軟件公司。雖然他們經(jīng)營(yíng)商業(yè)服務(wù),但是仍然在每天都在工作中使用CVS。使用CVS的挫折感使得Jim認(rèn)真思考更好的方法來(lái)管理數(shù)據(jù),不但確定名字為“Subversion”,而且完成了Subversion檔案庫(kù)的基礎(chǔ)設(shè)計(jì)。
當(dāng)CollabNet的電話到來(lái)時(shí),Karl立即答應(yīng)了加入項(xiàng)目中,而且Jim讓他的雇主RedHat Software同意讓他在這個(gè)項(xiàng)目中不定期工作。CollabNet雇用了Karl和Ben Collins-Sussman,并在5月開(kāi)始了詳細(xì)設(shè)計(jì)工作。在得到了來(lái)自CollabNet的Brian Behlendorf、Jason Robbins和Greg Stein(當(dāng)時(shí)是一名活躍在WebDAV/DeltaV規(guī)范過(guò)程的自由程序員)很多創(chuàng)意的幫助下,Subversion很快地引起了一個(gè)活躍開(kāi)發(fā)者社區(qū)的注意。它找出并歡迎很多同樣在CVS上受到挫折的社員能來(lái)為這個(gè)項(xiàng)目做點(diǎn)什么。
Subversion 初的設(shè)計(jì)Team定下了幾個(gè)簡(jiǎn)單的目標(biāo)。 它必須在功能上可取代 CVS,也是說(shuō), 所有 CVS 可做到的事, 它都要能夠作到。 在修正明顯的瑕疵的同時(shí), 還要保留相同的開(kāi)發(fā)模式。 還有, Subversion 應(yīng)該要和 CVS 很相像, 任何 CVS 使用者只要花費(fèi)少許的力氣, 可以很快地上手。
經(jīng)過(guò)十四個(gè)月的編碼后, Subversion 于2001年8月31日開(kāi)始實(shí)現(xiàn) “自行管理”。 也是說(shuō), 開(kāi)發(fā)人員不再使用 CVS 來(lái)管理 Subversion 的代碼, 而以 Subversion 自己來(lái)管理。
從啟動(dòng)這個(gè)項(xiàng)目到現(xiàn)在,雖然CollabNet提供了大部分的資金(它付出幾位全職 Subversion 開(kāi)發(fā)人員的薪水), 但這還是個(gè)開(kāi)源項(xiàng)目, 由一組松散透明的規(guī)則所約定。 CollabNet 擁有代碼的版權(quán)完全符合 Debian Free Software Guidelines。 換句話說(shuō), 每個(gè)人都可以隨意地免費(fèi)下載、修改、以及重新發(fā)布 Subversion; 完全不需要經(jīng)過(guò) CollabNet, 或是任何人的允許。