`
Java多少钱一杯
  • 浏览: 20048 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

为什么版本控制如此重要?

阅读更多



 

如果说什么是软件开发项目一定要使用的基础工具,那么版本控制系统应该算最重要的部分。不管是个人开发或是团队协作开发,都可以通过版本控制系统获得巨大的好处。

  没有版本控制系统的话,代码可能被别人或自己不小心覆盖或遗失、也不知道是谁因为什么原因改了这段代码、也没办法可以复原回前几天的修改。有了版本控制系统,开发人员只要将每次程式码的变更都纪录(Commit)起来,并且透过版本控制系统中进行更新。

  有了版本控制系统,我们可以浏览所有开发的历史纪录,掌握团队的开发进度,而且作任何修改都不再害怕,因为你可以轻易的复原回之前正常的版本。我们也可以透过分支和标签的功能来进行软件发行的不同版本,例如稳定版本、维护版本和开发中版本。

  很多项目需求方还没有明白开发的定义,这里必须要跟大家说一点老生常谈的段子:“开发永远是个过程,而不是结果。”所以开发者一定要使用版本控制系统,Git或Mercurial是免费开源的版本系统系统、随处可用的网络、便宜的云端服务器,甚至有现成的第三方服务Github。

  如果你还没有使用的话,建议马上为你的软件开发项目建立版本控制。接下来是几点使用版本控制系统的建议:

  1.将所有东西都放进版本控制系统

  是的,所有项目开发过程中的产出物都放到版本控制系统之中,这包括了程序源代码、测试程序、文件、设定档、各种自动化脚本等等。除了新成员可以很容易拉出最新的版本马上开始工作之外,我们也希望在测试环境、正式环境中,也可以随时更新到我们所指定的版本,因此将所有变更的纪录保存起来是非常重要的。

  例如,数据库的变更也必须纳入版本控制。首先,在数据库中纪录它目前的版本编号。接着我们每次的修改都透过一个自动化脚本来执行,并将这个脚本放入版本控制之中,而不是手动用指令去修改纲要。这样的好处是团队中每个人都可以透过版本控制系统看到这个变更,并且升级他的数据库。测试和正式的服务器环境,也会透过这个脚本来自动进行升级。笔者熟悉的Ruby on Rails中就有内置这样的Migration机制,其他程序语言也有类似的数据库工具。

  另外,以服务器应用来说,光是有源代码还是无法100%让软件工作起来,我们还需要知道服务器的配置设定,包括基础网络设定、操作系统设定、依赖的套件版本等等。因此最好这些配置设定也可以纳入版本管理系统之中。近年来云端技术的进步,已经可以将这些基础设施设定当作程序,无缝地让每个成员和所有环境都使用完全相同的设定,减少出错的可能性。

  2.频繁且适当大小的递交

  如果久久才递交一次修改到版本控制系统,那么你只是把版本控制系统当作一种备份工具而已,而没有享受到它真正的好处。频繁的递交可以帮助团队开发进度的透明化,减少多人开发时的代码冲突。当多人同时修改同一块代码时,解决代码冲突是很麻烦的事情。还有,我们也希望每一次的递交有适当的粒度大小,也就是每个提交的内容应该有高度相关性和独立性。例如是一个小功能或是一个小改进。如果你同时在做新功能A和修旧Bug,那么就应该分开两次递交。语法错误无法建构的程序也不应该提交从而造成团队困扰。

  有良好大小的代码提交习惯的好处除了版本的历史纪录更加清楚之外,我们可以非常轻易的做代码的复原或移植,假设上述的新功能A有问题,我们可以只复原A而不影响修好的Bug,或是只挑选修Bug的移植到不同分支去。

  3.良好的递交信息

  每一次的提交程序员都必须附上一段解释信息,说明修改的内容和原因。这除了可以帮助团队合作之外,更重要的是让软件有更好的维护性,以便将来备查,以下的场景相信开发者都不陌生:

  软件发现一个Bug,然后指派给你修复。

  你追代码追到一段看不懂的程序,也没有任何注释。

  透过版本控制系统,你找到了同事在一年前加了这行,递交的信息是BUG或简单的错误提示。

  同事还在公司,可是他也不记得当初是哪一个BUG了。或是他已经下班或离职了,反正找不到。

  你强行改了这行代码,发布出去。

  这个功能是修好了,但是发现另一个功能又出现问题。

  继续加班到凌晨,悲催ing....

  一个好的递交信息应该包括一行摘要信息,描述你为什么做这段变更,可能是新增、移除、修正某个功能,而不是描述新增或修改哪些档案,重点应放在备注为什么修改而不是这段是bug这么简单。因为修改了哪些档案和行数我们看版本差异就知道了,无须重复描述。如果你发现很难摘要,那可能表示你包含太多变更在同一次递交了,请试着拆开。

  • 大小: 45.3 KB
分享到:
评论

相关推荐

    JAVA版本控制测试

    ### JAVA版本控制测试知识点解析 ...综上所述,版本控制是现代软件开发不可或缺的一部分,尤其对于Java这样的大型项目来说更是如此。掌握好版本控制技术,能够极大地提升团队的工作效率和项目的质量水平。

    为什么_VS_Code_如此流行?.pdf

    在安全方面,VS Code具有内置的Git控制功能,支持版本控制,让开发者可以方便地管理源代码。VS Code还经常进行安全评级和自动化安全建设,保护开发者的代码不受到安全威胁。通过不断更新和维护,VS Code提供了安全...

    内核模块版本控制

    在深入探讨内核模块版本控制的机制之前,我们首先需要理解为何这种控制机制如此重要。内核模块作为Linux系统的重要组成部分,它们提供了动态加载和卸载功能,允许系统根据需要加载或移除特定功能,而无需重启整个...

    激活素进入细胞的调节:为什么大自然如此控制狂?

    激活素进入细胞的调节:为什么大自然如此控制狂? 激活素进入细胞的调节:为什么大自然如此控制狂? David J. Phillips 总结 激活素 A 是一种多能生长因子,在发育、红细胞生成和许多组织的局部调节中具有重要作用。...

    可编程逻辑能为微控制器带来什么改变?

    ### 可编程逻辑能为微控制器带来什么改变? #### 引言 随着技术的进步和市场需求的变化,微控制器作为现代电子设备中的核心组成部分,其功能和性能也在不断进化。早期的微控制器仅具备基本的存储器(RAM、ROM)和...

    逆变电源的控制算法有哪些?

    尽管如此,模糊控制也存在一定的局限性,例如控制精度受人为因素的影响等。 ### 总结 逆变电源控制算法的选择应根据具体应用场景的需求来决定。数字PID控制适用于大多数常规应用场景,而状态反馈控制、重复制、...

    为什么寄存器比内存快?.docx

    为什么寄存器比内存快呢?以下是三点原因: 原因一:距离不同 距离是影响寄存器和内存速度的重要因素。内存离 CPU 较远,需要花费更长的时间读取数据。以 3GHz 的 CPU 为例,电流每秒钟可以振荡 30 亿次,每次...

    采用 Subversion进行版本控制

    版本控制系统在软件开发中扮演着至关重要的角色,它帮助开发者追踪代码变更,协同工作,并确保项目在各个阶段的稳定性和可追溯性。Subversion(SVN)是其中一个广泛使用的开源版本控制系统,它提供了高效、可靠的...

    Python技术如何进行版本控制.docx

    版本控制是现代软件开发不可或缺的一部分,尤其在Python这样的动态编程语言中更是如此。它不仅有助于管理代码库的变更历史,还能支持团队间的协作,确保项目的稳定性和可维护性。 - **定义**:版本控制系统...

    vss 6.0d 版本控制软件

    在软件开发过程中,版本控制是至关重要的,它允许开发者追踪每一次修改,协同工作,回滚到早期版本,并确保团队间的代码一致性。VSS 6.0d是该系列的一个较早版本,尽管后来有更新的版本,但因其易用性和基础功能,...

    54 基于undo log多版本链条实现的ReadView机制,到底是什么?l.pdf

    ReadView机制是在InnoDB存储引擎中实现的,它与多版本并发控制(MVCC)密切相关,借助于undo log多版本链条来保证在读取数据时不受其他事务提交或回滚的影响。 在ReadView中,有几个关键的组成部分: 1. m_ids:一个...

    CVS版本控制器软件

    尽管如此,CVS仍然是许多老项目和团队选择的版本控制系统,其基础知识对于任何开发者来说都是有价值的。 在使用CVS时,开发者通常需要掌握以下几个基本操作: - `cvs checkout`:获取项目代码库的最新版本。 - `...

    53 理解MVCC机制的前奏:undo log版本链是个什么东西?l.pdf

    MVCC(多版本并发控制)机制是数据库事务隔离级别中的一个重要概念,它能够实现事务的并发访问控制,避免了传统锁机制带来的性能瓶颈。MVCC主要依赖于undo log(撤销日志)和版本链来实现非锁定的读-写一致性。下面...

    为什么CPU很少会坏?.docx

    ### 为什么CPU很少会坏? #### 一、引言 中央处理器(CPU)作为计算机系统的核心组件之一,其稳定性和耐用性对整个系统的可靠运行至关重要。长期以来,人们普遍认为CPU是一种极其耐用的部件,很少会出现故障。这...

    shiro1.6版本

    尽管如此,保持向后兼容性仍然是Shiro发展的一个重要原则。1.6版本可以与大部分1.1版本的应用程序无缝集成,但建议开发者仔细检查升级指南,以确保所有必要的迁移步骤都已执行。 3. **增强的加密功能**: Shiro ...

    银行业流动性观察第68期:定量测算:为什么LPR报价维持不变?.pdf

    此外,文中还提到了“全成本法”和“边际成本法”的区别,以及在未考虑核心存款成本上行的情况下,对LPR调整的影响进行了乐观估计,但即便如此,仍然不足以驱动LPR报价的下调。 文章还指出,尽管2020年LPR没有变化...

    C语言6循环控制最新版本.ppt

    在"C语言6循环控制最新版本"中,主要涉及了五种循环控制结构,包括:`goto`语句、`while`语句、`do-while`语句、`for`语句以及`break`和`continue`语句。下面将对这些知识点进行详细介绍。 **6.1 循环控制概述** ...

    jee事务控制.pdf

    为了确保数据的一致性与可靠性,理解事务管理的基础知识至关重要。本文将结合Hibernate和JPA标准,深入探讨J2EE持久层设计中遇到的关键问题之一——事务并发访问控制策略。 #### 二、事务并发访问控制策略概述 ...

    利用PWM技术控制RGB灯变色和呼吸.rar

    在实现RGB灯的变色时,我们通常需要一个微控制器(如Arduino、Raspberry Pi等)来生成PWM信号,并通过驱动电路将这些信号转换为适合LED灯的电压和电流。每个颜色通道都会有一个对应的PWM引脚,通过编程改变三个引脚...

Global site tag (gtag.js) - Google Analytics