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

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

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

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

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

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

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

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

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

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

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

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

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

  3.良好的递交信息

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

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

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

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

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

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

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

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

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

时间: 2024-08-24 04:34:09

为什么版本控制如此重要?的相关文章

版本控制

GitHub & Bitbucket & GitLab & Coding 的对比分析 目前基于 Git 做版本控制的代码托管平台有很多种,比较流行的服务有 Github.Bitbucket. GitLab. Coding,他们各自有什么特点,个人使用者和开发团队又该如何选择? 在这篇文章中,我们以客观的态度,以问题作为出发点,介绍和比较 GitHub.Bitbucket.GitLab.Coding 在基本功能,开源与协作,免费与付费计划,企业解决方案,集成 flow.ci 等方面,

github版本控制相关

Git版本控制: 安装Github http://blog.csdn.net/huangyuan_xuan/article/details/49125597 Git本地版本控制 http://blog.csdn.net/huangyuan_xuan/article/details/49162309 Github远程仓库 http://blog.csdn.net/huangyuan_xuan/article/details/49356505 http://blog.csdn.net/pipisor

API版本控制

译者注:本文主要描述了几种API版本控制的方法.用户可以查询原始的API,或者添加定制的头文件来接收特定的版本.如果应用程序收到一个重大修订,将URI修改为V2.在进行迭代改进时,将创建与更改日期相一致的端点,并允许用户将日期信息附加.然后,可以选择保留旧版本的时间.而且在设计和版本化API时,您可以应用许多不同的理念.以下为译文 API设计是一个"火辣热门"的话题!关于API的最佳结构和版本的方法已经有很多优秀的文章介绍过了.在这篇文章中,我们将会深入研究不同的API设计之间有哪些冲

用产品思维设计API(三)——版本控制,没有你想的这么简单

用产品思维设计API(三)--版本控制,没有你想的这么简单 前言 最近公司内部在重构项目代码,包括API方向的重构,期间遇到了很多的问题,不由得让我重新思考了下. - 一个优雅的API该如何设计? - 前后端分离之后,API真的解耦分离了吗? - 不断的版本迭代,API的兼容性该如何做? ps.这里所说的API仅为Web API,提供APP\WEB开发使用. 年前,我司内部的接口已经进入了一个完全的重构阶段,参考了市面上各大平台的API和文档,自己也总结出了很多的心得.这里向大家分享一下,接下来

版本控制工具git入门

版本控制工具的历史 不说了,放张图 两者的区别:集中式需要一个中心服务器放置最新的文件,需要联网操作.分布式可以再不联网的情况下操作,前提要拥有版本库 git安装  略 github注册 略 如何在github上创建一个新的项目 如何克隆到本地 cd到想要克隆的文件夹下面 git clone 路径 例如: git clone https://github.com/xiaobie123/deomtext1.git

TeamCity : Build 版本控制系统配置

VCS (版本控制系统) 是用来跟踪项目源文件版本变化的系统.它还有其它的名字,比如 SCM(源代码管理).当前 TeamCity 内置支持的 VCS 类型有:Git, Subversion, Mercurial, Perforce, Team Foundation Server, CVS, StarTeam, ClearCase, SourceGear Vault, Visual SourceSafe. 本文将通过实例比较详细的介绍 Build 中版本控制系统的设置. VCS root 一个

程序员,一起玩转GitHub版本控制,超简单入门教程 干货2

本GitHub教程旨在能够帮助大家快速入门学习使用GitHub,进行版本控制.帮助大家摆脱命令行工具,简单快速的使用GitHub. 做全栈攻城狮-写代码也要读书,爱全栈,更爱生活. 更多原创教程请关注头条号.每日更新.也可以添加小编微信:fullstackCourse.一起交流,获取最新全栈教程信息.因为FQ原因,不能下载客户端的同仁,可以关注后回复“GitHub客户端”获取安装软件. 上篇教程:GitHub这么火,程序员你不学学吗? 超简单入门教程 干货 GitHub概念部分出现了一丝纰漏.为

版本控制的简介

CVS采用客户端/服务器架构设计,版本库位于服务器端,实际上就是一个RCS文件容器.每一个RCS文件以“,v”作为文件名后缀,用于保存对应文件的历次更改历史.RCS文件中只保留一个版本的完全拷贝,其他历次更改仅将差异存储其中,使得存储变得更加高效.图1-1展示了CVS版本控制系统的工作原理,可以看到作为RCS文件容器的CVS版本库和工作区目录结构的一一对应关系. CVS成功地为后来的版本控制系统确立了标准,像提交(commit).检入(checkin).检出(checkout).里程碑(tag或

20150310+SVN版本控制-02

三.SVN中的图标集 1.同步图标: 说明:本地文件已与服务端文件同步,大小和修改时间一致. 2.未受版本控制图标 说明:当前文件在本地存在,在服务器端不存在 3.添加图标 说明:当前文件在本地存在,在服务端不存在,但下次提交时,会自动将该文件提交到服务器端 4.修改图标 说明:当前文件与服务端文件不同步,当前文件有修改,会自动提示红色叹号 5.删除图标 说明:该文件在服务端已删除,本地未删除 6.冲突图标 说明:当前文件与服务端文件有冲突,必须解决后才可以上传 7.忽略图标 说明:当前文件不提