做为程序开发者,你一定绕不开的就是版本控制系统VCS (或者代码管理系统SCM),它并不仅仅是一个工具那么简单,更代表的是一种软件从开发调试到发布过程的组织哲学,不仅是工具命令更是方法论。
使用svn的经验
做软件开发很多年,但对于版本控制很长时间只用过subversion, 很久以前在windows上用TortoiseSVN, 后来转到linux下用命令行,用rabbitvcs, 在svn的圈圈内从来也没有出来过,一切都理所当然,从来也没有觉得svn有什么不好。直到Team要和在Stockholm的团队一起开发,checkout一个branch要一晚上,update前一天欧洲团队的commits要十几分钟,同步代码变成了一个很浪费时间的事,Team开始时把主要的开发branch, checkout到本地办公室的服务器,开发人员需要某个branch的时候,先拷贝到本机,做switch或update后开始工作。后来在本地建了个svn镜像,耗时的操作可以通过镜像做,再后来公司升级了网络,更改了svn部署策略,同步代码虽然依然很耗时,但是已经不再不可忍受。但是如果要做bug fixing, 定位bug, 理解bug引入的上下文,需要查看svn历史记录,简直就是不可完成的任务。查询svn log, 对比两个版本间某个文件的修改,都需要和欧洲的服务器通讯,而且定位一个bug, 往往需要多次的查log看diff, 耗费了大量时间,思路也常常被打断。为了这个,我还写了个工具,叫svn history, 有一个方便查看svn repos的GUI, 查svn log时会自动从本地svn镜像读取,提供针对commit的author, reviewer, filename, log message等信息的查询功能,用户将commits缩小范围后,可以很方便查看每次相关commit的修改内容,从而让开发者能够快速理解代码的演变,定位bug的位置。这个工具还很不成熟,但是在日常开发过程中,却帮了我很多忙。正是在写这个工具的时候,为了把代码上传到Github上,我才接触了Git, 了解到了svn以外的世界,在用Pages发布博客后,对Git的使用越来越频繁,发觉是时候深入的学习下Git了。