源代码控制和版本控制有什么区别?

62

像SVN或TFS这样存储源代码版本的系统,应该用什么正确的名字来称呼?

我一直都叫它源代码控制,但维基百科之类的地方称其为修订控制?

使问题更加复杂的是,像这个网站一样的地方同时标记了两者?


很抱歉你的悬赏已经失效:我的回答(在悬赏之前)被自动选择了(请参见http://meta.stackexchange.com/questions/4508)。如果您想让我详细说明任何特定主题,请在我的答案下留言。 - VonC
12个回答

86
  • 版本控制是一个比较通用的术语,用于管理任何类型的版本(源代码或二进制文件或任何文档)。

  • 源代码控制提供了分支和合并的版本控制功能,在不是所有版本控制工具中都可以使用(例如Word不是源代码控制工具,但提供版本控制功能)。

  • 修订控制是一个更通用的术语,用于源代码控制工具以及其他工具(如Word、OpenOffice等),它引用了一个版本。

注:SCM代表源代码管理,但也可以代表软件代码管理,以反映相同的概念(不仅管理“源代码”)。
此外,SCM引入了文件组之间依赖关系的概念。
它还可以包括变更生命周期的概念(开始变更、关闭变更等),这导致变更请求系统。


17
SCM 是软件配置管理的缩写。 - user16120
应该区分“工具”(例如git,hg和svn等软件)和“实践”,公司中可能有一项政策,这可能是“源代码管理”或“软件配置管理”。 - maxwellb
2
你为什么对赏金感到抱歉?事实上,你的回答被投票支持了10倍,这表明你的回答是最好的。自动接受系统运作良好。 - Robert MacLean
供应链管理(SCM):P - pinkpanther
这个讨论与GIT有关系吗? - SaidbakR
1
版本控制在软件工程之外也被称为产品数据管理(PDM)。此外,产品数据管理(或版本控制)属于产品生命周期管理(PLM)。参考链接:https://en.wikipedia.org/wiki/Product_data_management - Lerner Zhang

17

有三个几乎描述同一事物的同义词:

  1. 修订控制。处理文档/工件的修订(审核和随后版本的文档/工件)或数字(作为修订概念的抽象)。
  2. 源代码控制。处理文本(源)文件,而不是二进制文件。这种差异非常重要,因为更容易执行比较并获取文本文件之间的差异。有一整套与源代码控制相关的基本工具: diff, diff3, patch等。这组工具可以扩展为源代码控制解决方案。这样的解决方案的示例是RCS。
  3. 源代码管理。处理源代码的更复杂操作:将其存储在带有创建单独分支的可能性的存储库中。还假定分支可以合并。源代码管理的另一部分是标记。源代码管理的一个问题是它有缩写SCM。该缩写用于描述更广泛的活动——软件配置管理。存在很多混淆,因为源代码管理是软件配置管理的子集,后者还涉及诸如构建管理、部署管理、持续集成、依赖项管理、发布管理等活动。
  • 版本控制。它被用作代替“源代码管理”这个术语,以避免歧义。它包括了“修订控制”和“源控制”两个概念,因此描述的几乎是相同的概念。目前,由于各种工具(CVS、SVN、Git、Mercurial、ClearCase、Perforce、VSS等)可以同时解决“修订控制”和“源控制”的任务,所以这两个术语都被更合适地替换为“版本控制”。
  • 下面的图片更清晰地说明了所有这些概念之间的区别:

    enter image description here


    13
    我喜欢这样想:

    版本控制他们做的事情。

    源代码控制 是我用他们来完成的事情。

    :-)


    5
    术语并不十分精确。有一篇文章描述了五个相关的维度。软件开发的数据管理工具往往不能同时且一致地支持三个以上的维度。如果你想支持所有五个维度,你必须描述一个开发过程:
    • 版本(语义:修改)
    • 视图(语义:等价、推导)
    • 层次结构(语义:包含)
    • 状态(语义:批准、可访问性)
    • 变体(语义:产品变种)
    Peter van den Hamer和Kees Lepoeter(1996)Managing Design Data: The Five Dimensions of CAD Frameworks,Configuration Management,and Product Data Management,Proceedings of the IEEE,Vol. 84,No. 1,January 1996。

    5
    • 版本控制系统(VCS)是最常用的术语。
    • 源代码管理(SCM)在Git中使用,但它有点发明,可能会与软件配置管理混淆,后者已经在软件行业中使用,而且它们并不是同一回事。

    1
    SCM 也代表着软件配置管理和供应链管理。因此,使用 SCM 缩写可能会有比使用 VCSRCS 更多的歧义。 - altern
    “而且这不是同一件事”……您能详细说明一下吗? - Gregor Thomas
    软件配置管理的一部分是缺陷跟踪,例如。版本控制工具不会做到这一点。 - FelipeC

    4

    某些系统(如SVN)有一个术语“修订版本”,它代表与存储库中所有文件的特定版本集相关联的数字。在这样的系统中,“修订版本”(SVN修订版本)基本上意味着“版本”(源代码版本)。否则,“修订控制”和“版本控制”是相同的术语。


    并不是完全相同的术语。在版本控制中,重点是管理版本(除了版本号之外),而在修订控制中,重点是管理更改,这可能不包括合并、分支等操作。 - arpadf
    这取决于谁在说什么,界限变得模糊。@sharptooth是正确的,因为 SVN(Subversion 工具)文档(http://svnbook.red-bean.com/en/1.7/svn-book.pdf)指出:“版本控制系统(或修订控制系统)是一种跟踪文件和有时目录随时间递增的版本(或修订)的系统。” - clairestreb

    3

    没有一个“正确”的名称,常见的四个名称是:

    • 版本控制系统
    • 修订控制系统
    • 源代码控制系统
    • 源代码管理系统

    2

    另一个名称是:版本控制

    根据该网站使用的标签,“源代码控制”是最受欢迎的(这很正常,因为该网站是关于编程的):

    • 源代码控制(633个标签)
    • 版本控制(587个标签)
    • 修订控制(31个标签)

    2
    我希望这些标签能够合并或者做些什么。有多个意思相同的标签会使搜索变得更加困难。 - Nicolás

    1

    MIL-STD 973 描述了配置管理。

    软件配置管理的做法完全相同。

    请参考CMMI,了解SCM/CM的详细解释。

    你所说的系统是版本控制系统。它们用于版本控制。

    旧版SCCS是源代码控制系统。

    源代码控制系统维护修订历史记录。

    比如说你将一个文件从修订版本1.1更改到1.2、1.3。

    在1.3时,我们发布了“Awesome Edition”产品。

    1.3是一个修订版本,AwesomeEdition是一个版本。

    在像CVS这样的系统中,修订版本会随着编号的变化而发生变化,标签则标记版本。

    SVN类型的存储库修订编号会让期望MIL-STD行为的政府客户感到困惑。

    关于变更管理的标准,最好的事情就是有很多可以选择的。


    0

    我添加了一条评论,但我认为它也可以作为答案。我的观点与其他已经表达的评论有一点不同。

    总的来说,SCM(软件配置管理)或(源代码管理-衍生术语)很容易理解,因为它被用作一个包含版本控制和其他技术(如基线管理)的统称。请参见http://en.wikipedia.org/wiki/Software_configuration_management。一般现代SCM工具,从CVS到Git都包括这两种技术和许多其他有用的功能,如:权限控制、权限管理、安全审计、允许自定义SCM流程(ClearCase)、与构建系统和问题跟踪软件集成等等...我认为列表是开放的,因为任何与软件更改和管理相关的内容都可以输入在这里。

    因此,主要的困惑来自于理解Revision Control、Version Control和可能的Source Control之间的区别。首先,所有包含"source"的术语都是衍生术语,也就是说,一些人对所有这些通用术语(配置管理-什么是那?)感到不满,并坚持他们特别关注源代码,不关心其他使用情况;这是一个公平的观点。

    关于版本控制与修订控制,我认为在像 SVN、Git 这样的工具上,正确的术语应该是修订控制。在我看来,使用“修订控制”一词强调的是管理(不仅仅是)源代码文件的变更(除了管理版本),而“版本控制”则强调仅管理文件的版本。
    理论上,有人可以编写一款软件,允许跟踪和管理二进制文件,但没有二进制差异和合并支持,并将其称为版本控制系统。然而,在 SVN、Git 等工具的情况下,它们还允许管理文件的更改:差异、合并以及 Git 中著名的变基。
    因此,总之,修订控制包括版本控制,并且更适合命名 CVS、SVN、Git 等工具;而源代码控制是一个衍生术语,如果想要命名特定的 SCM 方面,则应避免使用它。
    SCM > Revision Control > Version Control
    

    网页内容由stack overflow 提供, 点击上面的
    可以查看英文原文,
    原文链接