没有使用版本控制的黑暗时代——版本控制心得(一)

原创 2002年10月28日 09:36:00

   在没有使用版本控制的开发团体中,我所熟悉的一种常用开发方式是:多个开发人员共同负责一个软件的开发,每个人在各自的机器上有整个软件的拷贝,并对之实施编码,分别完成各自任务之后,再通过文本比对工具将各自机器上的不同版本的软件整合到一台机器上。

   本文就这样的开发方式,提出在软件开发中出现的几个和版本控制密切相关的典型问题(但未必全面),同样也是需要通过版本控制来解决的问题,它们来源于实际开发过程中的切身体会,并经过总结和整理。

1 软件代码的一致性

   软件的开发、维护和升级,往往是多个人共同协作的过程。不同人对同一个软件的不同部分同时做着修改,这种行为有时会出现彼此交叉的情况。由于同一软件在各自开发人员的机器上都有拷贝,软件的全部代码都暴露在每个开发人员面前,原则上他有权限可以不加限制地更改软件的任何部分。而当他们修改的内容属于公共部分,或者需要被其他人员所负责的部分调用时(软件各模块间的彼此依赖关系决定了这种情况是经常发生的),这种修改就属于交叉情况。此时,就有可能出现代码的不一致现象。比如:修改者在改动了某个公共函数的同时也修改了其调用接口,若其他人员没有得知此事,而在各自机器上仍调用原来版本的函数,则当整合时,就会出现错误。另一种更为严重的情况是,修改者决定废弃原有函数而另外编写一个新的函数,但他并未删除原有函数,这种情况即使最后的整合也可能不会被察觉,如果将这种一致性错误的纠正延迟到测试阶段,则会增加调试的难度,从而降低开发效率。为了始终保证代码的一致性,一种解决办法是,要求修改者每次修改后都通过某种方式告知同组其他人员,或者随时对软件做整合。但是这样,一方面会增加开发人员的负担,另一方面也降低了软件的开发效率。

2 软件内容的冗余问题

   软件在各自开发人员的机器上都有拷贝,并且同一个开发人员在不同时期也会在本机保留当时的软件版本,也就是说,一台机器上还可能不止一个版本。这类似于一种信息的冗余。对于不同版本而言,其差别有时可能并不很大,如果说不必要的占用存储空间是一个次要问题的话,那么另一个问题可能更重要。随着时间的推移,开发人员可能对自己机器上的不同版本间具体差异的了解变得模糊不情,甚至忘记了当时为什么区分这些版本的原因,这会给整合带来麻烦。而且,如果需要同时维护多个版本,则对某个版本的改动可能需要反映到其余版本的对应处,很难保证这一过程不会出差错。还有一点,作为开发人员,有时即使知道自己机器上软件的某个版本可能不会再使用了,他也不会去删除(生怕万一需要从那里获取点什么),但是通常也不会再去维护或查看它,因此久而久之,这种“僵死之物”会在多台机器上“蔓延”。

3 软件过程的“事务性”

   对于软件的某个版本,如果开发人员想要为其增添新的功能,或改善原有功能,而又担心会搅乱原来运行良好的软件。一种常用的办法,就是保留现有版本,另复制一个新的拷贝,并在新的副本上进行修改。这类似于一种事务处理,当将一系列操作做为一个事务时,如果中间某个操作出现偏差,则希望恢复到执行事务之前的状况。而当完成修改之后,开发人员该如何处理这两个副本呢?是在新的副本上继续新的开发,将之作为最新版本;还是将新的改动加入原有版本,删除新的副本。无论怎样,都可能会出现如下情况:如果软件运行正常,则出现2中提到的冗余情况;当删除修改前的版本后,又发现改动中有问题,但已无法恢复了;改动无误,将改动加入原有版本时,可能出现人为错误,导致软件运行出错;即使没有人为错误,这种做法也会给开发人员增加额外负担,一定程度的降低开发效率。重复上述过程则会出现多个类似的副本,此时,如何对待这些不同版本,将是开发人员需要面对的问题。而如果调试的过程中,发现确实有必要恢复到上一个版本,甚至上上个版本……,此时就不得不保留所有版本了。

4 软件开发的“并发性”

   由于是多人共同开发一个软件,期间出现多人修改软件的同一部分,尤其是同时修改,有时是不可避免的。对于前者,具有良好编程习惯的人员的一种通常做法是,对他人的源程序进行修改时添加必要的注释,写明修改人,修改原因,修改日期等。但实际情况是,当修改内容很零散或修改过程很复杂时,注释很难写,或者代码被注释分割得支离破碎影响正常阅读,或者注释无法详细说明实际情况。而且,这种做法也增加了开发人员的负担:他需要在考虑代码逻辑的同时,兼顾如何写注释;而对于注释和代码的一致性也是他需要随时留意的问题,不能疏忽。因此,我认为这种措施在实际开发中,并未取得实质效果,是不必要的,事实上代码本身(而非注释)是最能说明问题的,而修改的记录应该置于代码之外的某处。而且,不论是否是同时修改,都需要考虑1所提到的一致性问题,需要及时进行人工的差异比较和整合以便形成一个统一的新版本。

5 软件代码的安全性

   由于代码完全暴露于所有开发人员面前,任何人都可以增、删、改之。除了会造成1所提到的不一致问题外,从安全的角度来看,也是存在隐患的,这一点对于一个自主产权的长期开发的产品而言更是如此。即使是一般的项目开发,不同的人员其分工不同,允许别人可以不加限制地任意修改自己负责模块的代码(相当于所有人员都具有管理员身份),总是容易产生问题。对于共有模块更是如此,所有人都可以修改,一旦修改,则波及全体。

6 软件的整合

   在软件的整合过程中,一般比较可靠的做法是使用文本比对工具辅助完成的。这种措施,有以下缺点:

  • 可靠性,整合中的人为错误会影响软件的可靠性,有时这种错误很难察觉,可能编译没有问题,而在测试时却发现了问题。这种潜在的错误发现的时间越晚就越难以纠正。
  • 效率,对于纯手工的整合即使熟练操作的人也是需要时间来完成的,而有些整合只是将两段代码拼接在一起,这一过程完全可以借助于某些自动机制。这可以大大节省时间,使开发人员可以专注于后续的开发任务。

版本控制系统的一些使用心得

主要介绍svn和git这两个当前主流的版本控制系统,这也是大家使用的比较广泛的。...
  • skylin19840101
  • skylin19840101
  • 2014年12月19日 17:15
  • 1076

我们为什么要用版本控制

转自:http://www.ydmsh.com/www/Blog/Show/id/147/ 不知道什么是版本库的,扇自己两个大嘴巴;知道但不用的,扇自己四个大嘴巴。快扇去。你真扇了?那你是个...
  • nolove
  • nolove
  • 2015年08月15日 19:03
  • 1725

GIT版本控制 — 简介与安装 (一)

简介   GIT与SVN的区别   作为当前最流行的版本控制系统,Git和SVN的几个主要不同之处在于: (1) Git是分布式的版本控制系统,SVN是集中式的版本控制系统。Git可以先把修...
  • zhangskd
  • zhangskd
  • 2015年02月14日 15:46
  • 4334

版本控制的重要性

 2006年底的时候,由于原项目即将上线,另外一个项目组(我现在所在的确项目组)正缺人手,就这样我就被调到了现在项目组,该项目是一个物流项目,征对不同的模块,采用不同的模式,主档部分采用b/s模式(b...
  • gaohua027
  • gaohua027
  • 2007年03月01日 15:53
  • 1205

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

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

有效便捷的版本控制方法探讨

问题的提出: 在从事软件产品开发的过程中,我们常常会遇到这样的问题:假设某产品开发过程中出现了三个发布版本,每个版本存在部分功能差异,其余主干部分完全一致。后来发现主干部分存在1个bug需要修正,但...
  • zbp_uestc
  • zbp_uestc
  • 2014年04月11日 13:35
  • 856

(2)版本控制之IDEA使用Git

引言 创建一个项目以maven项目为例 在IDEA中使用Git本地仓库 1 让项目支持Git 2在IDEA中将文件添加到版本库 21 IDEA文件颜色总结 3 在IDEA中回退版本 4 撤销修改 5 ...
  • LoveCarpenter
  • LoveCarpenter
  • 2017年01月09日 18:07
  • 2047

目录取消svn版本控制

当使用了svn版本控制系统后每个目录下都会有一个.svn目录存在,开发完当交付产品或者上传到服务器时一般要把这些目录删除,这里总结了一下在 linux和win下的办法。  一、在linux下...
  • huangxy10
  • huangxy10
  • 2014年10月31日 17:18
  • 13716

关于AS版本控制总结的小知识-待补充

AS版本控制: 配置: SVN https://www.zhihu.com/question/32298079/answer/56010423 File-Settings-Versio...
  • liuyuqi2020
  • liuyuqi2020
  • 2017年01月04日 10:54
  • 407

TortoiseSVN实现本地版本控制

以前组里做项目用过P4和SVN,装个客户端就很容易上手使用。最近一个人做一个项目,没有服务器进行代码管理,就得在自己的电脑中进行版本管理。         每有一次大的改动就建立新的文件备份实在太麻...
  • dndxhej
  • dndxhej
  • 2014年01月22日 15:34
  • 13123
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:没有使用版本控制的黑暗时代——版本控制心得(一)
举报原因:
原因补充:

(最多只允许输入30个字)