天天看點

版本控制工具

1. cvs

cvs 無疑是個老資格的工具了,而且大多數的open source軟體都是用cvs進行版本管理的. 分支功能和cvs 的自動合并等都是比較強大的地方.但這東西的指令行操作拒人于千裡之外.通常開發人員腦子裡裝的東西已經夠多了,如果在check in一個版本的時候還要輸入一長串路徑,檔案名...我最讨厭在工作的時候頻繁切換腦中的context,什麼好的idea都給打斷啦. 雖然說有wincvs的 client,但這東西實在不算是先進.

--

2. SubVersion

cvs已經進入了系統維護階段,原來的主力人馬搞了這個SubVersion. 據說改用了DB存儲(據說支援送出過程的事務特性,我想應該就是送出等過程中假如有部分操作失敗,那麼可以完整的rollback整個操作吧..), 另外檔案夾也可以進行版本控制.

還能夠直接對檔案進行改名、删除等操作,這些操作也是history的一部分....等等. 我隻是想要一個輕量級的version control system,這東西的文檔鋪天蓋地,似乎太繁雜了.

不過這個工具能通過WEB進行部分管理,這是我挺感興趣的.但我想如果要通過WEB做到很完整的功能,肯定要通過嵌入ActiveX控件等方法才能做到.但這個東西本身很大部分就不是windows平台的,是以web的功能應該也就很有限了.

面從幾個方面具體介紹Subversion。

Subversion是什麼?Subversion是一個自由/開源版本控制系統,它管理檔案和目錄可以超越時間。一組檔案存放在中心版本庫,這個版本庫很像一個普通的檔案伺服器,隻是它可以記錄每一次檔案和目錄的修改,這便使你可以取得資料以前的版本,進而可以檢查所作的更改。從這個方面看,許多人把版本控制系統當作一種“時間機器”。

Subversion可以通過網絡通路它的版本庫,進而使使用者可以在不同的電腦上使用。一定程度上可以說,允許使用者在各自的地方修改同一份資料是促進協作。進展可能非常的迅速,并沒有一個所有的改變都會取得效果的通道,由于所有的工作都有曆史版本,你不必擔心由于失去某個通道而影響品質,如果存在不正确的改變,隻要取消改變。

一些版本控制系統也是軟體配置管理(SCM)系統,這種系統經過特定的精巧設計來管理源代碼,有許多關于軟體開發的特性—本身了解程式設計語言、或者提供建構程式的工具。然而,Subversion不是這樣一個系統,它是一個通用系統,可以管理任何類型的檔案集,對你這可能是源代碼—對别人,可能是一個貨物清單或者是數字電影。

Subversion的曆史早在2000年,CollabNet, Inc. ([url]http://www.collab.net[/url]) 開始尋找CVS替代産品的開發人員,CollabNet提供了一個協作軟體套件SourceCast,它的一個元件是版本控制系統。盡管 SourceCast在初始時使用CVS作為其版本控制系統,但是CVS的局限性在一開始就很明顯,CollabNet知道遲早要找到一個更好的替代品。遺憾的是,CVS成為了開源世界事實上的标準,因為沒有更好的産品,至少是沒有可以自由使用的。是以CollabNet決定寫一個新的版本控制系統,建立在CVS思想之上的,但是修正其錯誤和不合理的特性。

2000年2月,他們聯系Open Source Development with CVS(Coriolis, 1999)的作者Karl Fogel,并且詢問他是否希望為這個新項目工作,巧合的是,當時Karl正在與朋友Jim Blandy讨論設計一個新的版本控制系統。在1995年,他們兩個曾經開辦一個提供CVS支援的公司Cyclic Software,盡管他們最終賣掉了公司,但還是天天使用CVS進行日常工作,在使用CVS時的挫折最終促使他們認真地去考慮如何管理标記版本的資料,而且他們當時不僅僅提出了“Subversion”這個名字,并且做出了Subversion版本庫的基礎設計。是以當CollabNet提出邀請的時候,Karl馬上同意為這個項目工作,同時Jim也得到了他的雇主,RedHat軟體贊助他到這個項目并提供了一個寬松的時間。CollabNet雇傭了 Karl和Ben Collins Sussman,詳細的設計從三月開始,在Behlendorf 、CollabNet、Jason Robbins 和 Greg Stein(當時是一個獨立開發者,活躍在WebDAV/DeltaV系統規範階段)的恰當激勵的幫助下,Subversion很快吸引了許多活躍的開發者,結果是許多有CVS經驗的人們很樂于有機會為這個項目做些事情。

最初的設計小組固定在簡單的目标上,他們不想在版本控制方法學中開墾×××地,他們隻是希望修正CVS,他們決定Subversion比對CVS的特性,保留相同的開發模型,但不複制CVS明顯的缺陷。盡管它不需要成為CVS的繼任者,它也應該與CVS保持足夠的相似性,使得CVS使用者可以輕松的做出轉換。

經過14個月的編碼,2001年8月31日,Subversion自己能夠“成為服務”了,開發者停止使用CVS儲存Subversion的代碼,而使用Subversion本身。

當CollabNet開始這個項目的時候,曾經資助了大量的工作(它為全職的Subversion開發者提供薪水), Subversion像許多開源項目一樣,被一些激勵知識界精英的寬松透明的規則支配着。CollabNet的版權許可證完全符合Debian的自由軟體方針,也就是說,任何人可以自由的下載下傳,修改和重新釋出,不需要經過CollabNet或其他人的允許。

Subversion的特性當讨論Subversion為版本控制領域帶來的特性的時候,通過學習它在CVS基礎上所作的改進會是比較有效的方法。如果你不熟悉CVS,你會不太明白所有的特性,如果你根本就不熟悉版本控制,你會瞪着眼無所适從,你最好首先閱讀一下有關版本控制的其他介紹。

Subversion提供:

版本化的目錄

CVS隻記錄單個檔案的曆史,但是Subversion實作了一個可以跟蹤目錄樹更改的“虛拟”版本化檔案系統,檔案和目錄都是有版本的。

真實的版本曆史

因為CVS隻記錄單個檔案的版本,對于拷貝和改名—這些檔案經常發生的操作,會改變一個目錄的内容—在CVS中并不支援。在CVS裡你也不可以用一個完全不同的檔案覆寫原來的同名檔案而又不繼承原來檔案的曆史。通過Subversion,你可以對檔案或是目錄進行增加、拷貝和改名操作,也可以新增一個具有幹淨曆史的檔案。

原子送出

一系列的改動,要麼全部送出到版本庫,要麼一個也不送出,這樣可以讓使用者建構一個所要送出修改的邏輯塊,防止部分修改送出到版本庫。

版本化的中繼資料

每一個檔案或目錄都有一套屬性—鍵和它們的值,你可以建立并存儲任何鍵/值對,屬性也是随時間的流逝而納入版本控制的,很像檔案的内容。

可選的網絡層

Subversion在版本庫通路方面有一個抽象概念,利于人們去實作新的網絡機制,Subversion可以作為一個擴充子產品與 Apache結合,這給了Subversion在穩定性和互動性方面很大的好處,可以直接使用伺服器的特性—認證、授權和傳輸壓縮等等。也有一個輕型的,單獨運作的 Subversion服務,這個服務使用自己的協定可以輕松的用SSH封裝。

一緻的資料操作

Subversion表示檔案是建立在二進制檔案差別算法基礎上的,對于文本(可讀)和二進制(不可讀)檔案具備一緻的操作方式,兩種類型的檔案都壓縮存放在版本庫中,差別資訊是在網絡上雙向傳遞的。

有效率的分支和标簽

分支與标簽的代價不與工程的大小成比例,Subversion建立分支與标簽時隻是拷貝整個工程,使用了一種類似于硬連結的機制,因而這類操作通常隻會花費很少并且相對固定的時間。

可修改性

Subversion沒有曆史負擔,它由一系列良好的共享C庫實作,具有定義良好的API,這使得Subversion非常容易維護,可以輕易的用其他語言操作。

Subversion的架構俯視Subersion的設計,可以看出,一端是儲存你所有納入版本控制的資料的Subversion版本庫,在另一端是你的Subvesion用戶端程式,管理着所有納入版本控制資料的本地影射(叫做“工作拷貝”),在這兩極之間是各種各樣的版本庫通路(RA)層,一些使用電腦網絡通過網絡伺服器通路版本庫,一些則繞過網絡伺服器直接通路版本庫。

下一篇: 版本控制CVS

繼續閱讀