首页 / 科技 / 正文

代码托管:程序员为什么非要把代码存在别人家里?

我表弟上周突然问我一个问题。他说,哥,你写的那些代码到底存哪儿了。我说在我电脑里啊。他说那电脑坏了咋办。我说那确实有点麻烦。他接着问,你们是不是有什么云盘专门存这个。我说云盘?算是吧,但又不是。

你看,这就是代码托管这件事最有意思的地方。几乎每个写代码的人天天都在用,但要给外行解释清楚,还真没那么容易。

今天试着聊明白它。

代码放硬盘里,到底出了什么问题

先别急着说托管。我们先看看不托管会怎样。

你在自己电脑上写一个项目。文件夹叫my_project。写完了,运行没问题,开心。第二天你改了几行,又好了。第三天你手一抖,改崩了。你想退回去。

退不回去了。

因为你的代码只有一个版本——就是现在这个崩溃的版本。你可能会说,我复制一份改不就行了?于是你有了my_project、my_project_备份、my_project_备份2、my_project_真最终版、my_project_真最终版_改……

这事我干过。而且不止一次。到后来我自己都分不清哪个是哪个。文件夹命名这件事,本质上是在用文件名当版本号,是极其脆弱的。

硬盘坏掉是另一回事。概率不高,但一旦发生,你所有代码当场归零。我认识一个做独立开发的朋友,笔记本进水,三年的项目没了。他说那一刻脑子是空的。

所以问题就两个:版本会乱,硬盘会死。

程序员笔记本电脑本地代码文件夹截图

代码托管到底是个什么东西

很多人第一次听到「代码托管」,脑子里的画面是网盘。把文件拖上去,存着,需要的时候下载下来。就这么简单。

真不是。

代码托管的核心其实是另一个东西——版本控制系统。今天绝大多数人用的是 Git。Git 解决的问题不是「存」,而是「记」。

它像什么?

像给代码装了一台极其啰嗦的录像机。你每改一次,它就把整个项目当时的样子拍一张快照。不是拍你改了哪一行,是拍整个状态。然后它给这张照片贴一个标签,写一句你当时在干嘛,比如「修复了登录按钮点不动的问题」。

以后你想看三个月前的样子,翻回去就行。你想对比两个时间点的差异,它直接给你标出红色和绿色的行。

这个「快照 + 说明」的机制,才是托管真正的底层能力。网盘做不到这个。网盘只会问你:要覆盖吗?

而把这份带历史的仓库放到一个遥远的服务器上,让所有协作的人都能同步,这就是「托管」两个字的含义了。

GitHub仓库页面代码提交历史记录截图
GitHub仓库页面代码提交历史记录截图

一个人写代码,也需要托管吗

一个人写代码,也需要托管吗
一个人写代码,也需要托管吗

这是我表弟问的第二个问题。他说,我又不跟别人合作,一个人写,有必要搞这么复杂吗。

有必要。而且我认为一个人写代码的人,比团队更依赖它。

为什么。

因为一个人的时候,没人帮你兜底。你半夜两点改了一个自认为绝妙的重构,第二天醒来发现整个项目跑不起来,想哭都找不到人。这时候如果每一次改动都被托管记录着,你只需要一条命令,回到昨晚那个还能跑的状态。

它不评判你。它只是安静地告诉你:这是你之前的样子,要不要回去。

还有一个事,可能比版本回退更重要——托管仓库是你的公开名片。

这话听起来有点功利,但确实是这样。现在很多技术团队招人,会先去看你的代码托管主页。不是看你写了什么惊天动地的东西,而是看你有没有在持续写、写得是否清晰、提交记录是否诚实。

一个人的提交记录,比简历诚实多了。

简历可以包装。提交记录不行。什么时候写的、写了多少、改了哪些文件、备注写了什么,全在。

所以哪怕你只是自己练手,把代码托管起来,也是在给自己攒一种隐形的信用。

那是不是所有代码都该托出去

那是不是所有代码都该托出去
那是不是所有代码都该托出去

不是。这中间有几个误区得澄清一下。

第一个误区:代码托管等于代码公开。

不是。托管平台上有公开仓库,也有私有仓库。私有仓库只有你自己和你邀请的人能看到。「托管」这个动作本身不等于「开源」。

第二个误区:公司的代码也可以随便往公共托管平台上放。

这个真的别。很多公司有自己的内网托管服务,代码不出内网。往外面传,尤其是涉及业务逻辑的东西,风险很大。有些事故就是这么来的。不是技术问题,是意识问题。

第三个误区:托管了就不用本地备份。

也不对。云上的东西也有掉链子的时候。虽然概率很低,但本地留一份完整仓库,是给自己上双保险。这点跟「有云盘就不用移动硬盘」是一样的逻辑。

说白了,托管是协作和版本管理的解决方案,不是万能保险箱。

用别人的服务,还是自己搭一个

这是个很现实的问题。

用别人的服务,比如全球最大的那个代码托管平台,或者国内的几个选择。好处是省事,注册就能用,生态成熟,周边工具全。缺点也摆在那里——你的东西在别人服务器上,规则人家定,服务也可能变。

自己搭呢。比如在服务器上装一个开源方案。好处是数据在自己手里,想怎么配怎么配。坏处是,你得自己维护。备份、升级、安全、账号管理,全是自己的事。搭起来容易,运维下去难。

我见过很多人兴致勃勃自建了一个,三个月后因为一次系统升级失败就放弃了。

所以选择不看哪个更「高级」,看你需不需要自己掌控。如果你只是写写个人项目,用现成的服务足够了。如果你所在的环境对数据有硬性要求,那就自建,但要想清楚后面是谁在维护。

没有标准答案。

最后说个让我觉得有点浪漫的地方

代码托管这件事,往小了说,是解决文件乱、硬盘坏的问题。往大了说,它在做一件挺了不起的事——让「修改」这件事变得可以追溯。

你想想,人类大部分工作是没有这种记录的。一个木匠刨了一块木头,谁也说不清他刨之前那块木头长什么样。一个作家删了一段话,那段话就真的消失了。但代码不一样。每一次删除、每一次重写,都被干干净净地存着。

你可以随时回到任何一个过去的自己。

从这个角度看,托管的不只是代码。

托管的是你做过的一连串选择。

而我那个表弟,昨天刚注册了账号,把第一个小脚本传了上去。他给我发消息说,哥,原来还能看到自己什么时候写的。挺神奇的。

我说,对吧。