版本控制
维基百科,自由的百科全书
版本控制(Revision control)是一種軟體工程技巧,藉以在開發的過程中,確保由不同人所編輯的同一檔案都得到更新。
版本控制透過文档控制(documentation control)記錄程序各個模組的改動,並為每次改動編上序號。这种方法是维护工程图的标准做法,它伴随着工程图从图的诞生一直到图的定型。 一种简单的版本控制形式如下:赋给图的初版一个版本等级“A”。当做了第一次改变后,版本等级改为“B”,以此类推。最簡單的例子是,最初的版本指定為“1”,當做了改變之後,版本編號增加為“2”,以此類推。
目录 |
[编辑] 概述
工程版本控制是從追蹤藍圖訂正情形的程序而來。版本控制提供任何工程項目的設計者,將設計回復到之前任一狀態的選擇權。這種選擇權在開發進入死胡同時特別重要。軟體工程的版本控制也是像這樣追蹤源碼,軟體設計師也常會利用版本控制來維護文件以及設定檔等等的更動,並且提供控制這些更動的控制權的程序。理論上所有的資訊紀錄都可以加上版本控制,但是在現在的實務中,除了軟體開發的流程,其它的領域中很少有使用較複雜的版本控制技巧與工具(雖然可能為其帶來許多好處),目前已有人開始用版本控制軟體來管理CAD電子檔案,電路板設計,來補足本來由人手工執行的傳統版本控制。
在軟體開發的過程中,同時許多不同的開發版本在不同的地方被修改的情況是極有可能發生的,而軟體設計師也需同時保持更新。程式錯誤或是其他的問題可能只有在某一特定版本中(因為在開發的過程中修正了某些問題,或引進了其它的問題)。所以為了要找出還有修正錯誤,可以取得還有執行不同版本的程式來找出問題是出在那一個版本中是很重要的。有時候一個程式同時有兩個版本在開發也是有必要的,例如在一個版本中,程式錯誤已經被修正,但是沒有新的功能;而在另一個版本裡,新的功能正在開發中。
在最簡單的情況下,軟體設計師可以自己保留一個程式的許多不同版本,並且為它們做適當的編號。這種簡單的方法已被用在很多大型的軟體專案中。這是一個方法可以達到目的,但是不夠有效率,這樣得同時要維護很多幾乎一樣的程式碼備份;且軟體設計師需要有強大的自我修養,而且這個方法常常會導致錯誤的發生。因此,一個可以把這些版本控制的過程都自動化的系統就被開發出來了。
[编辑] 壓縮
大部份的版本控制軟體使用資料壓縮,只有保存各版本間不同的地方。這個方法使得儲存許多不同版本檔案的空間利用更加有效率。
[编辑] 軟體版本控制
開發與部署軟體時常會需要將同一軟體的不同版本部署到不同位置,由此軟體的眾多開發者分頭工作。軟體的錯誤與議題常常只出現在某些版本。因此,軟體除錯者為了確認錯誤的位置並加以修正必需能取得並且運行軟體的不同版本來決定問題的位置。
另一方面,開發與部署軟體時也常需要同時開發一個軟體的兩個版本。(例如:一個沒錯也沒新功能的和一個有新功能也有錯的版本)
最簡單的版本控制就是保留軟體不同版本的數份copy,並且適當編號。許多大型開發案都是使用這種簡單技巧。雖然這種方法能用,但是很沒效率。一是因為保存的數份copy幾乎完全一樣,也因為這種方法要高度依靠開發者的自我紀律,而常導致錯誤。因此開發了將部份或全部版本控制工作自動化的版本控制系統。
大部分的版本控制軟體採用差分編碼:只保留檔案相繼版本之間的差異。如此可以更有效的儲存數個版本的檔案。
傳統上版本控制系統都是採用集中模式:所有版本控制的工作在一個伺服器進行。2000年後,TeamWare,BitKeeper,和GNU開始用分散式系統。在分散式系統中開發者直接在各自的在地檔案庫工作,而各個檔案庫有另一個分開的步驟分享改變的情形。這個方式讓開發者不靠網路也能工作,也讓開發者有充分的版本控制能力,而不需經中央權威許可。Linux內核的發明人林納斯·托瓦茲就是分散式版本控制系統的支持者。
大部分的軟體開發案,會有好幾個開發人員同時工作。如果兩個人員同時要改變同一個檔案,而沒有管理存取權限,很可能會覆寫彼此的工作。大部分的控制系統在兩種方法中擇一解決:採用中央式系統,由中央權威管理存取權限,或是像分散式系統容許多個單位同時進行,包括同時更動同一檔案。
中央式系統由中央權威管理存取權限,「鎖上」檔案庫中的檔案,一次只讓一個開發者工作。
分散式系統容許多個開發者同時更動同一檔案,並且提供稍後合併各個改變的功能。分散式系統仍然可以有檔案上鎖功能。
檔案上鎖功能帶來的功效與副作用一直受爭議。檔案上鎖功能能提供一些保護給高難度的合併(例如大幅更改大檔案或檔案群的許多部份)。但其他開發者可以繞過版本控制系統改變檔案(這本身就是很大的問題)。
有些系統還會管理誰能改變程式的哪個部位,像是由提供某一個人控制權來審查哪些改變可以過關。有些進步的版本控制工具提供更多功能,可和其他工具,例如開發環境整合。
維基百科用的MediaWiki也有版本控制的功能。
[编辑] 字彙
- 檔案庫(Repository)
- 存最檔案的新版本還有歷史資料的地方,通常是在伺服器上。有時候也叫Depot(像是在SVK、AccuRev還有Perforce中)
- 工作版本(Working copy):從檔案庫中取出一個本地端的複製,針對一個特定的時間或是版本。所有在檔案庫中的檔案更動,都是從一個工作版本中修改而來的,這也是這名稱的由來。關念上,這是一個沙盒。
- 提交(Commit)
- 將本地端的修改送回檔案庫。(由版本控制軟體處理跟上次更動相比哪個檔案又被更動的事)
- 變更(Change)
- 對一份文件作的特定更動。
- 變更記錄(Change List)
- 取出(Check-Out)
- 從檔案庫取出檔案到本地端。
- 更新(Update)
- 將檔案庫的修改送到本地端(與送交相反)
- 合併(Merge / Integration)
- 合併各個改變。
- 版次(Revision)
- 一個revision或version指的是一系列版本變遷的其中之一。
- 匯入(Import)
- 匯出(Export)
- 衝突(Conflict)
- 當兩方更動同一份文件會發生衝突。
[编辑] 著名的版本控制軟體
- BitKeeper
- CVS(Concurrent Versions System)
- Microsoft Visual Sourcesafe
- Perforce
- Rational ClearCase
- RCS(GNU Revision Control System)
- Serena Dimention
- Subversion
- SVK
- Git
- en:Monotone (software)
- en:Bazaar (software)
- en:Mercurial (software)
[编辑] 參看
- en:SCM
- en:MEE
- 计算机支持的协同工作
- 協作版本系統
- 版本控制軟件列表 (en:List of revision control software )
- Software version
- Related information
- 形態管理 (Configuration management)
- 原始碼
- neutral build
- RevML (http://public.perforce.com/public/revml/index.html)
- SyncML
- WebDAV
- SCM