月光宝盒--版本管理1
凡事总须研究,才会明白。大话西游能够成为90年代经典,我也还依稀记得是因为“得不到 + 已失去”,可是不甚清楚。我翻开碟子一查,明明白白的每帧中都写着“无厘头”几个水印。我横竖睡不着,仔细看了半夜,才从帧相关中看出货来,满片满世界都刻着两个字:“时间”和“版本”!
版本管理现在越发地直白出来了。
1. 当做消遣的科幻电影
1984年,T800回到提交点,想创建出另一个demon分支。它失败了,但留下一个足以破坏主干架构的bug。1992年,bug在主干已成长为宕机级bug,demon分支即将自动生成。T1000带着更大的权限,来清除未来的QA,遭遇到被改造过的reviewer--另一个T800,结果bug被回滚。再后来的2003年,2009年,我们看到主干上还在不断制造bug,然后被reviewer清除。
1985年,Marty McFly在Back to the Future(实际是回到过去)中,比较了30年前和现在的老爸。帮助老爸打败情敌,维护以自己为核心的主干正常发展,并解救了自己的忘年交Dr. Emmett Brown。后来Marty发现,他只是一个修改号(revision),他得去HEAD解救他的儿子。
1993年,猪猡公园,对不起,是猪猡记公园。Steven Spielberg自己在主干的蚊子中,埋下了罪恶的设计缺陷种子,引诱开发人员培养出无数恐龙级的bug,这个模块用户的大部分被bug吃掉。还好该bug的在一个独立的模块中,幸存者逃出来后就从主干中关闭了这个模块的功能配置项。(慢,真的关掉了吗?Spielberg显然不会轻易让自己维护的模块出局,他接着发布了猪猡2、猪猡3、猪猡3D,搞得大家对模块化是否能封装变化产生怀疑)
1995年,Bruce Willis被不准确的修改号和注释整得很惨,被当成精神病(遇见一个病友),被回到一战战场,最后和“十二猴子军团”的疯子领导战斗,这个领导就是当初的病友。混乱的注释,混乱的回滚。Willis不是被自己提交的注释绊倒的第二个人。
2001年,Keanu Reeves完整演示了冲突分支的概念。Neo在主干中从实习生做起,平时干私活搞点小聪明,有搞bug的天赋,被选中做领导来维护OEM分支(备注:该分支已经重启了六次,每次都失败)。于是年纪轻没经验,在主干中飞天入地乱加代码,挑战各种规范接口,非法调用其他模块资源。搞得发布分支老大非常不爽,要清理OEM团队在分支和主干的提交。两者目标和资源冲突起来,搞得以前一个野心勃勃的reviewer Smith,也要建立一个OEM分支。Smith连开发背景都没有,只知道追求完全一致的借口,按代码行数计算功能和规模,胡闹一通,还要求一国三制。最后发布分支和Neo都受不了了,讨论一个妥协方案,保留少部分Neo分支资源,然后Neo和Smith火并,Smith分支全部被删除,Neo分支建立起来,但没有需求人员,人心也散了。主干继续做人肉电池,为发布分支自动化运行提供支持。
2010年,Nolan和Leonardo合作,整出了一堆费脑子的Inception递归项目,而且只在主干做,不允许使用分支。每个人都干得很辛苦,因为每递归一层子项目,项目时间会延长20倍,除非你不玩了,需要自杀或他杀来退出。但你没有陀螺单元测试的时候,你根本分不清你在哪个项目混。结果有人的死了,她还活着;有的人活着,他被骗了。
2011年,Colter Stevens上尉,穿着别人的马甲,在8分钟的Sourcecode实验项目里,不断地从一个指定提交点开始死亡行军,试图找出导致项目死亡的真凶。随着项目进行,他了解到无论成败,他都会被从项目注销掉。本着开发的职业精神,利用不知名的工具,最后他成功了解救了项目,并在实验马甲被注销的前一刻,他同步到项目主干中,继续发布新版本生活。
1968年的人猿星球,一个人类开发员,去实验分支搞预研,因为没有版本计划,打了个瞌睡。醒来发现自己已经被放置在非人类项目中,自己的角色是临床实验对象。测试、开发、项目经理都是猩猩,管理还在处于手工作坊式阶段。凭着以前的项目经验,做不了就撤,他成功摆脱实验对象角色,准备寻找自己的主干。突然,他发现他就在原来的项目主干之中!只不过项目内容已经面目全非,不过他看到了以前团队残留的设计模型。
...
科幻片具有几个模式:向前、向后、(UXO)Undefined Object,好的导演能够自圆其说。这些导演,用好了版本管理的某个特性,就发挥出巨大的影响力。我们有些用户还在讨论电影的“逻辑错误”问题,我认为他们版本概念一无所知,更别说提交、注释、分支、合并。
待续。。。