For faster navigation, this Iframe is preloading the Wikiwand page for 版本控制.

版本控制

维基百科,自由的百科全书

此条目需要编修,以确保文法、用词、语气格式标点等使用恰当。 (2020年11月11日)请按照校对指引,帮助编辑这个条目。(帮助讨论
软件开发
核心行动
范式与模式
方法论与框架
支持行为
实践
工具
标准与知识体系
版本控制
版本控制

版本控制(英语:Version control)是维护工程蓝图的标准作法,能追踪工程蓝图从诞生一直到定案的过程。此外,版本控制也是一种软件工程技巧,借此能在软件开发的过程中,确保由不同人所编辑的同一程序文件都得到同步。

概述

透过文档控制(documentation control),能记录任何工程项目内各个模块的改动历程,并为每次改动编上序号。

一种简单的版本控制形式如下:赋给图的初版一个版本等级“A”。当做了第一次改变后,版本等级改为“B”,以此类推。最简单的例子是,最初的版本指定为“1”,当做了改变之后,版本编号增加为“2”,以此类推。

借此,版本控制能提供项目的设计者,将设计恢复到之前任一状态的选择权,这种选择权在设计过程进入死胡同时特别重要。

理论上所有的信息记录都可以加上版本控制,在过去的实务中,除了软件开发的流程,其它的领域中很少有使用较复杂的版本控制技巧与工具(虽然可能为其带来许多好处)。目前已有人开始用版本控制软件来管理CAD电子文件,电路板设计,来补足本来由人手工执行的传统版本控制。

软件版本控制

软件工程师常利用版本控制来跟踪、维护原始码、文档以及配置文件等的改动。

有时候,一个程序同时存有两个以上的版本有其必要性,例如:发布版本中程序错误已经被修正,但没有加入新功能;而开发版本则有新的功能正在开发、也有新的错误待解决,于是便需要同时维护两个不同的版本。

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

软件版本的控制方法

在最简单的情况下,软件设计师可以自己保留一个程序的许多不同版本,并且为它们做适当的编号。这种简单的方法已被用在很多大型的软件项目中。该方法虽然可行,但不够有效率。除了必须同时维护很多几乎一样的原始码备分外;而且极度依赖软件设计师的自我修养与开发纪律,但这却常是导致错误发生的原因。因此,有人开发出了将部分或全部版本控制工作自动化的版本控制系统。

差分编码

大部分的版本控制软件采用差分编码:只保留文件相继版本之间的差异,这个方法可以更有效的存储数个版本的文件。

中央式系统与分布式系统

大部分的软件开发案,会有好几个开发人员同时工作。如果两个人员同时要改变同一个文件,而没有管理访问权限,很可能会改写彼此的工作。

所以权限管理控制系统会在两种方法中择一解决:采用中央式系统,由中央权威管理访问权限;或是像分布式系统容许多个单位同时进行,包括同时更动同一文件。

传统上版本控制系统都是采用中央式系统:所有版本控制的工作在一个服务器进行,由中央权威管理访问权限“锁上”文件库中的文件,一次只让一个开发者工作。

2000年后,TeamWareBitKeeper、和GNU开始用分布式版本控制系统:开发者直接在各自的本地文件库工作,并容许多个开发者同时更动同一文件,而各个文件库有另一个合并各个改变的功能。这个方式让开发者能不靠网络也能继续工作,也让开发者有充分的版本控制能力,而不需经中央权威许可。分布式系统仍然可以有文件上锁功能。

分布式系统Linux内核的发明人林纳斯·托瓦兹就是分布式版本控制系统的支持者,他开发了目前被开源社群广泛使用的分布式版本控制系统Git

文件上锁

文件上锁功能能对高难度的合并(例如大幅更改大文件或文件群的许多部分)提供一些保护,但其他开发者仍然可以绕过版本控制系统改变文件(这本身就是很大的问题)。所以文件上锁功能带来的功效与副作用一直饱受争议。

其他功能

有些进步的版本控制工具提供更多功能,例如:

  1. 管理谁能改变程序的哪个部位,
  2. 提供某一个人控制权来审查哪些改变可以过关;
  3. 与开发环境集成。

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

术语

基线(Baseline
基线是软件文档或原始码(或其它产出物)的一个稳定版本,它是进一步开发的基础。[1]
文件库(Repository
存储文件的新版本还有历史资料的地方,通常是在服务器上。有时候也叫Depot(像是在SVK、AccuRev还有Perforce中)
工作复本(Working copy
从文件库中取出一个本地端(客户端)的复制,针对一个特定的时间或是版本。所有在文件库中的文件更动,都是从一个工作版本中修改而来的,这也是这名称的由来。观念上,这是一个沙盒。
提交(Commit
将本地端的修改送回文件库。(由版本控制软件处理“跟上次更动相比,哪个文件又被更动”的事)
变更(Change
对一份文件作的特定更动。
变更记录(Change List
取出(Check-Out
从文件库取出文件到本地端(客户端)。
更新(Update
将文件库的修改送到本地端(与提交相反)
合并(Merge / Integration
合并各个改变。
版次(Revision
一个revisionversion指的是一系列版本变迁的其中之一。
导入(Import
导出(Export
冲突(Conflict
当两方更动同一份文件会发生冲突。

著名的版本控制软件

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

参看

注释

  1. ^ 基线. [2008-08-19]. (原始内容存档于2008-09-07). 

外部链接

{{bottomLinkPreText}} {{bottomLinkText}}
版本控制
Listen to this article

This browser is not supported by Wikiwand :(
Wikiwand requires a browser with modern capabilities in order to provide you with the best reading experience.
Please download and use one of the following browsers:

This article was just edited, click to reload
This article has been deleted on Wikipedia (Why?)

Back to homepage

Please click Add in the dialog above
Please click Allow in the top-left corner,
then click Install Now in the dialog
Please click Open in the download dialog,
then click Install
Please click the "Downloads" icon in the Safari toolbar, open the first download in the list,
then click Install
{{::$root.activation.text}}

Install Wikiwand

Install on Chrome Install on Firefox
Don't forget to rate us

Tell your friends about Wikiwand!

Gmail Facebook Twitter Link

Enjoying Wikiwand?

Tell your friends and spread the love:
Share on Gmail Share on Facebook Share on Twitter Share on Buffer

Our magic isn't perfect

You can help our automatic cover photo selection by reporting an unsuitable photo.

This photo is visually disturbing This photo is not a good choice

Thank you for helping!


Your input will affect cover photo selection, along with input from other users.