发现这个烂摊子
我刚接手这家公司的技术顾问活儿时,差点没被气死。他们那个核心系统,内部代号叫“野猫”。版本简直是一团浆糊。新来的开发员根本不知道自己
跑的
本站为89游戏官网游戏攻略分站,89游戏每日更新热门游戏,下载请前往主站地址(www.game519.com)
是哪个版本。我打开
代码仓库,拉下来
本站为89游戏官网游戏攻略分站,89游戏每日更新热门游戏,下载请前往主站地址(www.game519.com)
一看,好家伙,分支比树杈还多。
这个“大全”不是我整理出来的,是他们自己
搞出来的
灾难。这公司历史有点久,每换一任技术主管,就推倒重来
一套技术栈。有基于Python 2.7的,有半途转Go的,甚至还有一套是十年前外包公司用Delphi写的控制台程序,竟然在生产环境里跑着
关键业务。我问他们:“你们怎么
区分
哪个是正式版?万一出问题怎么回滚
?”他们给我的回答是:看服务器的名字!
服务器名里带“Alpha”的就是最新的,带“Beta”的可能随时要炸
。我当时就拍了桌子
,这哪是版本管理,这是考古
探险队。整个团队都在盲人摸象
,没人真正知道
系统的全貌。逼我动手的原因
为什么我这个老油条要亲自
插手
这种脏活累活?说出来有点丢人,主要是私人恩怨。前阵子,我那个亲戚,就是在我介绍下进了
这家公司的小伙子,他搞砸了
一个版本升级。他
跑错
了环境,把一个测试数据灌进
了正式版本。客户炸了,公司赔钱了。小伙子直接被炒鱿鱼
了。我当时脸都绿了,觉得自己欠他
一个交代。我心想这根本不是他的错,是这堆“野猫”版本把人绕晕
了。这件事发生后,我直接
找到
老板。撂下
狠话:这个版本大全不清掉
,下次出事的就不是一个程序员,而是整个公司。为了
给我那亲戚出口气
,为了让公司能正常运转
,我必须清理
这个门户。我的清理大战:版本定性与归档
我
决定
不再相信任何文档,我自己动手查
。这事儿急不得,我花了
三天时间,就做了一件事
:建立
事实清单。我先
组织
了一次全公司拉网式的摸底。我抓着
各个小组的负责人,让他们把现在跑着的代码的哈希值
给我拎出来
,一个都不能少。然后我建了
一个大的表格,我管它叫“野猫收容所”。我
明确了
现在还在用的生产版本:只有三个。我们把它们打上
了唯一的Tag,比如“野猫_PRODUCTION_GO_V4.2”。我
标注了
那些已经停产但是客户那边可能还在用的版本(主要是那套Delphi写的遗留系统)。这些系统我冻结
了代码库,只允许修补
安全漏洞,不准新增
功能。最重要的是,我
揪出
了那几个开发自己私藏的、还没上线的、乱七八糟
的分支。这些分支,如果三天内没有合到
主干或者解释
清楚用途,我一律强制删除
。
整个过程,我强行
推行
了Git Flow的简化版,要求
所有人都必须走
流程。所有的老版本,我打上
了唯一的Tag,然后直接封存
到名叫“博物馆”的仓库里。任何人不准再动
博物馆里的代码,除非获得了
三级审批,这几乎是不可能
的。落地和感受
这回实践,我
整整花了
三个礼拜,磨破了
嘴皮子。为什么会搞出这么多版本?就是因为最早那批人根本没想长远
。今天觉得Go明天觉得Java香,大家都是各占一个山头
,只考虑
自己那一片,根本不管
别人。项目越滚越大,互相牵制,根本撤不下来
。技术债务堆积
,最终要由倒霉蛋
来背锅
。很多人嘴上说要规范,但真让他们把自己的“宝贝”老代码
扔掉
,那比要他命
还难。但我坚持
住了,把那些不合格的代码分支砍掉
。现在所有人都必须基于
最新的主干进行开发。我的那个亲戚虽然
丢了
工作,但至少我拆掉了
这个地雷阵。现在这套流程跑得挺稳,虽然大家一开始骂我,但现在至少
没人再因为版本混乱而背锅
了。所有的“野猫”都被锁进
了笼子,跑不出来
了。在我看来,这比什么都强。