版本控制:修订间差异
修复错别字 |
无编辑摘要 |
||
第122行: | 第122行: | ||
** [[WebDAV]] |
** [[WebDAV]] |
||
** [[SCM]] |
** [[SCM]] |
||
==注释== |
|||
⚫ | |||
==外部連結== |
==外部連結== |
||
第129行: | 第132行: | ||
[[Category:版本控制| ]] |
[[Category:版本控制| ]] |
||
[[Category:形態管理|R]] |
[[Category:形態管理|R]] |
||
==参考资料== |
|||
⚫ | |||
{{版本控制软件}} |
{{版本控制软件}} |
2019年10月22日 (二) 16:50的版本
软件开发 |
---|
核心行动 |
范式与模式 |
方法论与框架 |
支持行为 |
实践 |
工具 |
标准与知识体系 |
版本控制(英語:Version control)是维护工程藍圖的标准作法,能追蹤工程藍图從诞生一直到定案的過程。此外,版本控制也是一種軟體工程技巧,藉此能在軟體開發的過程中,確保由不同人所編輯的同一程式檔案都得到同步。
概述
透過文档控制(documentation control),能記錄任何工程專案內各個模組的改動歷程,並為每次改動編上序號。
一种简单的版本控制形式如下:赋给图的初版一个版本等级“A”。当做了第一次改变后,版本等级改为“B”,以此类推。最簡單的例子是,最初的版本指定為“1”,當做了改變之後,版本編號增加為“2”,以此類推。
藉此,版本控制能提供專案的設計者,將設計回復到之前任一狀態的選擇權,這種選擇權在設計過程進入死胡同時特別重要。
理論上所有的資訊记錄都可以加上版本控制,在過去的實務中,除了軟體開發的流程,其它的領域中很少有使用較複雜的版本控制技巧與工具(雖然可能為其帶來許多好處)。目前已有人開始用版本控制軟體來管理CAD電子檔案,電路板設計,來補足本來由人手工執行的傳統版本控制。
軟體版本控制
軟體設計師常會利用版本控制來追蹤、維護源碼、文件以及設定檔等等的改動,並且提供控制這些改動控制權的程序。
在最簡單的情況下,軟體設計師可以自己保留一個程式的許多不同版本,並且為它們做適當的編號。這種簡單的方法已被用在很多大型的軟體專案中。該方法雖然可行,但不夠有效率。除了必須同時維護很多幾乎一樣的源碼備份外;而且極度依賴軟體設計師的自我修養與開發紀律,但這卻常是導致錯誤發生的原因。
有時候,一個程式同時存有兩個以上的版本也有其必要性,例如:在一個為了部署的版本中程式錯誤已經被修正、但沒有加入新功能;在另一個開發版本則有新的功能正在開發、也有新的錯誤待解決,這使得同時間需要不同的版本並修改。
此外,為了找出只存在於某一特定版本中(為了修正了某些問題、或新加功能所導致)的程式錯誤、或找出程式錯誤出現的版本,軟體除錯者也必須藉由比對不同版本的程式碼以找出問題的位置。
軟體版本的控制方法
最簡單的版本控制就是保留軟體不同版本的數份copy,並且適當編號。許多大型開發案都是使用這種簡單技巧。雖然這種方法能用,但是很沒效率。一是因為保存的數份copy幾乎完全一樣,也因為這種方法要高度依靠開發者的自我紀律,而常導致錯誤。因此,有人開發出了將部份或全部版本控制工作自動化的版本控制系統。
差分編碼
大部份的版本控制軟體採用差分編碼:只保留檔案相繼版本之間的差異,這個方法可以更有效的儲存數個版本的檔案。
中央式系統與分散式系統
大部分的軟體開發案,會有好幾個開發人員同時工作。如果兩個人員同時要改變同一個檔案,而沒有管理存取權限,很可能會覆寫彼此的工作。
所以權限管理控制系統會在兩種方法中擇一解決:採用中央式系統,由中央權威管理存取權限;或是像分散式系統容許多個單位同時進行,包括同時更動同一檔案。
傳統上版本控制系統都是採用中央式系統:所有版本控制的工作在一個伺服器進行,由中央權威管理存取權限「鎖上」檔案庫中的檔案,一次只讓一個開發者工作。
2000年後,TeamWare、BitKeeper、和GNU開始用分散式系統:開發者直接在各自的本地檔案庫工作,並容許多個開發者同時更動同一檔案,而各個檔案庫有另一個合併各個改變的功能。這個方式讓開發者能不靠網路也能繼續工作,也讓開發者有充分的版本控制能力,而不需經中央權威許可。分散式系統仍然可以有檔案上鎖功能。
分散式系統Linux內核的發明人林納斯·托瓦茲就是分散式版本控制系統的支持者,他开发了目前被开源社群广泛使用的分散式版本控制系統Git。
檔案上鎖
檔案上鎖功能能對高難度的合併(例如大幅更改大檔案或檔案群的許多部份)提供一些保護,但其他開發者仍然可以繞過版本控制系統改變檔案(這本身就是很大的問題)。所以檔案上鎖功能帶來的功效與副作用一直飽受爭議。
其他功能
有些進步的版本控制工具提供更多功能,例如:
- 管理誰能改變程式的哪個部位,
- 提供某一個人控制權來審查哪些改變可以過關;
- 與開發環境整合。
維基百科用的MediaWiki也有版本控制的功能。
术语
- 基线(Baseline)
- 基线是软件文档或源码(或其它产出物)的一个稳定版本,它是进一步开发的基础。[1]
- 檔案庫(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)
- Micorosoft Visual SourceSafe/Team Foundation Server/Visual Studio Online
- Perforce
- Rational ClearCase
- RCS(GNU Revision Control System)
- Serena Dimention
- Subversion
- SVK
- Git
- Monotone (軟體)
- Bazaar (software)
- Mercurial
- SourceGear Vault
注:多数不提供中文语言界面包(一部分本身即基于命令行接口),一部分对中文没有有很好的支持,处理中文时有乱码。但一般选用支持UNICODE的软件时,CJK便不成问题。
參看
- SCM
- MEE
- 计算机支持的协同工作
- 協作版本系統
- 版本控制軟件列表(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