Skip to content

Latest commit

 

History

History
35 lines (20 loc) · 6.95 KB

1.1-什么是版本控制.md

File metadata and controls

35 lines (20 loc) · 6.95 KB

什么是版本控制

✍️本文译者: P2Tree

©️ 本文演绎自 Atlassian 编写的 What is version control。页面上所有内容采用知识共享-署名(CC BY 2.5 AU)许可协议。

版本控制的优点

版本控制系统是软件工具的一个类别,它可以辅助软件开发团队管理软件代码随着时间的更改。版本控制软件可以通过特殊的数据库来追踪代码的每一次变更。如果软件开发中发生错误,开发者可以利用版本控制来将代码和早期的版本做对比,从而能够以对其他团队成员干扰最小的前提下修复错误。

对于几乎所有的软件工程来说,软件源代码就是最重要的部分(译注:原文比喻为皇冠上的宝石,也就是最需要保护的珍宝)。对于大多数软件团队,源代码仓库是他们认真努力积累和完善的宝贵知识财富的存储库,而版本控制可以保护源代码免受灾难性的破坏以及人为操作失误或故意破坏。

软件开发人员工作过程中会持续性的产出新的代码以及修改已经存在的代码。一个工程软件、应用软件或者软件组件通常被组织在一个文件夹或者说一个目录树中。团队中的一个开发者可能在增加一个新特性,而另一个开发者可能在修复不相关的bug,每一个开发者都在这个目录树的不同位置对代码内容进行着更改。

版本控制可以帮助软件团队解决这样的问题,追踪每一个开发者产生的每一个独立的变更,以及帮助预防并发工作中的冲突。并发工作的冲突是指软件一部分的修改可能与另一个开发者同时的修改不兼容。这个问题应该有条不紊的被发现和解决,从而不能影响团队其他成员的工作。此外,在软件开发中,任何更改都有可能引入新的bugs,故而在测试之前,新的软件版本不能被完全信任,所以直到新版本发布之前,测试和开发的进程都应该同时被执行。

好的版本控制软件可以支持开发者首选的工作流程,而不会强加一种特别的工作方式。理想情况下,它应该能在任何平台上工作,而不是特别要求开发者必须使用某种操作系统或者工具链。好的版本控制系统可以促进代码变更平稳连续的进行,而不是使用将文件锁定的这种糟糕而笨拙的机制(这是指某个文件只允许一名开发人员工作,而阻止其他开发人员开发)

不使用任何版本控制的软件团队经常会遇到一些问题,比如不知道已经完成的哪些变更可以被用户使用,或者在两个不相关的工作内容之间创建了互不兼容的更改,然后必须进行繁琐的整理和重做。如果你是一个从未使用过版本控制的开发者,你可能会这样命名你的不同版本的文件,比如加一个“最终版”或“最新版”的文件名后缀,然后不得不之后再处理新的最终版本。也许你会为了禁用某个功能但不愿删除代码,因为害怕代码未来还将会用到而注释掉代码块。版本控制可以解决如上这些问题。

版本控制软件是现代软件团队日常开发中必不可少的一部分。习惯于团队中使用功能强大的版本控制系统的软件开发人员会显然意识到版本控制所带来的不可思议的价值,即使是在小型项目中也是如此。一旦习惯了版本控制系统的强大优势,很多开发者就不再考虑去做没有版本控制支持的工作,即使是完成非软件开发的工作。

版本控制系统的优点

开发软件时不使用版本控制系统是危险的,比方说没有做备份。版本控制也能允许开发人员更灵活的人员变动,允许软件团队在团队规模扩大时保持高效率和敏捷性。

版本控制系统(Version Control System,VCS)在过去的几十年内取得了非常大的进步,并且有些更为突出。有些时候被称作代码管理工具(Source Code Management,SCM)或者修订控制系统(Revision Control System,RCS)。其中一个很流行的版本控制工具叫做Git,它是一个分布式的版本控制系统(Distributed VCS,DVCS),之后会详细介绍。就像很多现在流行的版本控制系统一样,Git是自由的也是开源的。不管它们叫什么名字,又或者是什么系统使用,版本控制系统主要的优点有以下几点。

  1. 记录每一个文件的完整的长期的变更历史。这意味着它能记录长期以来每一个贡献者提交的每一个变更。这些变更包括文件的创建、删除以及内容修改。不同的VCS工具的一个区别在于它们处理重命名和移动文件的能力。每次变更将包括作者名、时间和每一次修改的纪要。具有完整的历史可以允许我们退回到之前的版本中,从而帮助分析bugs,当需要在旧版本中修复软件问题时,这确实很重要。如果正在积极开发一个软件,则几乎所有的内容都将被看做这个软件的旧版本(译注:因为软件更新快,原文旨在说明旧版本不是你想象中的那么“旧”)。
  2. 分支和合并特性。这些特性可以让团队协作工作更加便捷,也可以让独立工作的开发者能从中受益。在VCS工具中创建一个分支可以维持多个独立的开发工作流,同时也提供了将这些工作合并回去的功能,能允许开发者验证分支之间的变更是否冲突。很多软件团队使用独立分支来开发特性或者是维护一个版本,或者两者都有。软件团队可以利用分支和合并特性来选择不同的工作方式。
  3. 可追溯性。能够追踪软件的每一次变更,进而可以让其能够搭配工程管理系统和bug追踪软件,比如Jira。可以通过消息来描述变更的目的和意图,从而注释每一次变更,这样不但能有助于关键问题分析也可协助其他的检查工作。在阅读代码,或尝试理解代码作用和设计意图时,这样的代码描述历史消息可以帮助开发者做出正确的和相匹配的修改,能够与系统预期的长期设计思想相符合。这种方式对于在遗留代码上高效工作是非常重要的,对于开发人员准确估计未来工作也是非常重要的。

当然,不使用版本控制系统来开发软件也是可行的,但是这样的工程具有很大的风险,任何专业的开发团队都不会愿意接受。所以问题并不会在于是否使用版本控制系统,而是使用哪种版本控制系统。

这会有多种选择,但这里的教程我们专注于Git。从这里可以了解到其他的版本控制软件。