| 软件开发 |
| --- |
| 
核心行动 |
| * 过程
* 需求
* 设计
* 工程
* 构造（英语：）
* 测试
* 偵錯
* 部署
* 維護
 |
| 
范式与模式 |
| * 原型设计（英语：）
* 净室（英语：）
* 增量建模（英语：）
* 瀑布模型
* 敏捷软件开发
* 螺旋模型
 |
| 方法论与框架 |
| * 快速應用程式開發
* DevOps
* 极限编程
* 团队软件流程（英语：）
* 個人軟體程序
* 动态系统开发方法（英语：）
* MSF（英语：）
* Scrum
* 看板
* V模型
* FDD（英语：）
* MDD
* 迭代式开发
* 精實开发
* 统一流程（英语：）
 |
| 
支持行为 |
| * 配置管理
* 文档
* 质量保证
* 项目管理
* 用户体验
 |
| 
实践 |
| * ATDD（英语：）
* 行为驱动开发
* 持續整合
* 持續交付
* 領域驅動設計
* 结对编程
* 站会
* 测试驱动开发
 |
| 工具 |
| * 編譯器
* 偵錯器
* 性能分析
* GUI设计器（英语：）
* 建模（英语：）
* 集成开发环境
* 組建自動化
* 发布自动化（英语：）
* 测试
 |
| 
标准与知识体系 |
| * 能力成熟度模型集成
* IEEE标准
* ISO 9001
* ISO/IEC标准（英语：）
* SWEBOK（英语：）
* 项目管理知识体系
* BABOK（英语：）
 |
| * 
* 论
* 编
 |

**版本控制**（英語：）是维护工程藍圖的标准做法，能追蹤工程藍图從诞生一直到定案的過程。此外，版本控制也是一種軟體工程技巧，藉此能在軟體開發的過程中，確保由不同人所編輯的同一程式檔案都得到同步。

概述
--

透過文档控制（），能記錄任何工程專案內各個模組的改動歷程，並為每次改動編上序號。

一种简单的版本控制形式如下：赋给图的初版一个版本等级"A"。当做了第一次改变后，版本等级改为"B"，以此类推。最簡單的例子是，最初的版本指定為"1"，當做了改變之後，版本編號增加為"2"，以此類推。

藉此，版本控制能提供專案的設計者，將設計恢復到之前任一狀態的選擇權，這種選擇權在設計過程進入死胡同時特別重要。

理論上所有的資訊记錄都可以加上版本控制，在過去的實務中，除了軟體開發的流程，其它的領域中很少有使用較複雜的版本控制技巧與工具。目前已有人開始用版本控制軟體來管理CAD電子檔案，電路板設計，來補足本來由人手工執行的傳統版本控制。

软件版本控制
------

软件工程师常利用版本控制來跟踪、维护源代码、檔案以及配置文件等的改动。

有時候，一个程序同時存有两个以上的版本有其必要性，例如：发布版本中程序错误已經被修正，但沒有加入新功能；而开发版本則有新的功能正在开发、也有新的错误待解決，于是便需要同时维护两个不同的版本。

此外，为了找出只存在于某一特定版本中的程序错误、或找出程序错误出現的版本，开发人员也必須通过比对不同版本的源代码以找出问题的位置。

### 軟體版本的控制方法

在最簡單的情況下，軟體設計師可以自己保留一個程式的許多不同版本，並且為它們做適當的編號。這種簡單的方法已被用在很多大型的軟體專案中。該方法雖然可行，但不夠有效率。除了必須同時維護很多幾乎一樣的源碼備份外；而且極度依賴軟體設計師的自我修養與開發紀律，但這卻常是導致錯誤發生的原因。因此，有人開發出了將部份或全部版本控制工作自動化的版本控制系統。

#### 差分編碼

大部份的**版本控制**軟體採用差分編碼：只保留檔案相繼版本之間的差異，這個方法可以更有效的儲存數個版本的檔案。

#### 中央式系統與分散式系統

大部分的軟體開發案，會有好幾個開發人員同時工作。如果兩個人員同時要改變同一個檔案，而沒有管理存取權限，很可能會覆寫彼此的工作。

所以權限管理控制系統會在兩種方法中擇一解決：採用中央式系統，由中央權威管理存取權限；或是像分散式系統容許多個單位同時進行，包括同時更動同一檔案。

傳統上版本控制系統都是採用中央式系統：所有版本控制的工作在一個伺服器進行，由中央權威管理存取權限「鎖上」檔案庫中的檔案，一次只讓一個開發者工作。

2000年後，、、和GNU開始用分散式版本控制系統：開發者直接在各自的本地檔案庫工作，並容許多個開發者同時更動同一檔案，而各個檔案庫有另一個合併各個改變的功能。這個方式讓開發者能不靠網路也能繼續工作，也讓開發者有充分的版本控制能力，而不需經中央權威許可。分散式系統仍然可以有檔案上鎖功能。

分散式系統Linux內核的發明人林納斯·托瓦茲就是分散式版本控制系統的支持者，他开发了目前被开源社群广泛使用的分散式版本控制系統Git。

#### 檔案上鎖

檔案上鎖功能能對高難度的合併（例如大幅更改大檔案或檔案群的許多部份）提供一些保護，但其他開發者仍然可以繞過版本控制系統改變檔案（這本身就是很大的問題）。所以檔案上鎖功能帶來的功效與副作用一直飽受爭議。

#### 其他功能

有些進步的版本控制工具提供更多功能，例如：

1. 管理誰能改變程式的哪個部位，
2. 提供某一個人控制權來審查哪些改變可以過關；
3. 與開發環境整合。

維基百科用的MediaWiki也有版本控制的功能。

### 术语

基线（）基线是软件檔案或源码（或其它产出物）的一个稳定版本，它是进一步开发的基础。
儲存庫（）
存储檔案的新版本還有歷史資料的地方，通常是在伺服器上。有時候也叫（像是在SVK、AccuRev還有Perforce中）
工作複本（）
從檔案庫中取出一個用戶端的複製，針對一個特定的時間或是版本。所有在檔案庫中的檔案更動，都是從一個工作版本中修改而來的，這也是這名稱的由來。觀念上，這是一個沙盒。
提交（）
將用戶端的修改送回檔案庫。（由版本控制軟體處理「跟上次更動相比，哪個檔案又被更動」的事）
變更（）
對一份檔案作的特定更動。
變更記錄（）

取出（）
從檔案庫取出檔案到用戶端。
更新（）
將檔案庫的修改送到用戶端（與提交相反）
合併（）
合併各個改變。
版次（）
一個或指的是一系列版本變遷的其中之一。
匯入（）

匯出（）

衝突（）
當兩方更動同一份文件會發生衝突。

著名的版本控制軟體
---------

* BitKeeper
* CVS（）
* Micorosoft Visual SourceSafe/Team Foundation Server/Visual Studio Online
* Perforce
* Rational ClearCase
* 修订控制系统（）
* Serena Dimention
* Subversion
* SVK
* Git
* Monotone (軟體)
* GNU Bazaar
* Mercurial
* SourceGear Vault（英语：）

注：多数不提供中文语言界面包（一部分本身即基于命令行接口），一部分对中文没有有很好的支持，处理中文时有乱码。但一般选用支持UNICODE的软件时，CJK便不成问题。

參看
--

* icon计算机程序设计主题

* 软件配置管理
* MEE（英语：）
* 计算机支持的协同工作
* 協作版本系統
* 版本控制軟件列表（List of revision control software（英语：））
* Software version
* 相關資訊
	+ 形態管理（）
	+ 原始碼
	+ neutral build
	+ RevML（
	+ SyncML
	+ WebDAV

外部連結
----

* The Configuration Management Yellow Pages


|  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| 

| * 
* 论
* 编
版本控制软件 |
| --- |
|  |
| 年代是指第一次發行的穩定版本, *斜体*表示軟體不再維護。 |
|  |
| 主從式架構 | 

|  |  |
| --- | --- |
| 自由軟體 | 
* SCCS（英语：） (1972)
* RCS（英语：） (1982)
* CVS (1990)
* CVSNT（英语：） (1998)
* Subversion (2000)

 |
|  |
| 私有軟體 | 
* CCC/Havest（英语：） (1970s)
* ClearCase（英语：） (1992)
* *Microsoft Visual SourceSafe* (1994)
* Perforce（英语：） (1995)
* Team Foundation Server (2005)

 |

 |  |
|  |
| 分散式控制 | 

|  |  |
| --- | --- |
| 免费或自由软件 | 
* *GNU arch* (2001)
* Darcs（英语：） (2002)
* DCVS（英语：） (2002)
* *SVK* (2003)
* Monotone (2003)
* *Codeville（英语：）* (2005)
* Git (2005)
* Mercurial (2005)
* GNU Bazaar (2005)
* Fossil (2007)

 |
|  |
| 商业软件 | 
* *Sun WorkShop TeamWare（英语：）* (1990年代?)
* Code Co-op（英语：） (1997)
* BitKeeper (1998)

 |

 |
|  |
| 概念 | 
* 基準
* 變更集
* 分支
* 復刻
* 提交
* 差分編碼
* diff
* 合并
* 标签
* 主幹
* 仓库

 |
|  |
| 
* 列表（英语：）
* 比較

 |

 |