1、版本管理基础:什么是版本管理,为什么需要版本管理,版本管理的核心概念
大家好,我是你们这门课的老朋友。今天咱们正式开篇,聊聊版本管理。
说实话,我入行头两年,根本不知道什么叫版本管理。那时候在小公司,代码全靠「复制粘贴 + 改文件名」来备份。什么「final.c」、「final_v2.c」、「最终版_再也不改.c」……你想想看,是不是很熟悉?
直到有一次,我把一个刚改完的模块合进去,结果客户现场出了个诡异的 bug。我想回退到昨天的版本,结果发现——昨天那个「能用的版本」被我覆盖了。嗯,那天晚上我加班到凌晨三点,一行一行地对比代码差异。从那以后,我再也不敢不用版本管理了。
一句话总结:版本管理,就是给代码拍「快照」,并且能随时回到任意一张快照。
1.1 什么是版本管理
版本管理,说白了就是一套记录文件变化的系统。它帮你记住:谁、在什么时候、改了哪些文件、改了什么内容、为什么要改。
我个人习惯把它比作「时光机」。你写代码就像在时间线上前进,每个重要的节点都可以打个标记。哪天代码写崩了,直接坐时光机回去就行。
版本管理分两种:
- 集中式(CVCS):所有代码存在中央服务器,大家从服务器拉取、提交。代表有 SVN、CVS。
- 分布式(DVCS):每个人本地都有完整的代码仓库,可以离线工作。代表有 Git、Mercurial。
现在业界基本都在用 Git,咱们这门课也以 Git 为主线来讲。
1.2 为什么需要版本管理
你可能觉得:「我一个人写个小项目,用版本管理是不是小题大做?」
我刚开始也这么想。但后来我发现,哪怕是一个人开发,版本管理也能救你命。我给你列几个真实场景:
- 回滚:改出 bug 了,一键回到上一个正常版本。
- 对比:想知道这周改了啥?版本管理自动帮你生成差异报告。
- 协作:多个人同时改同一个文件,版本管理能自动合并,或者告诉你哪里冲突了。
- 备份:代码存在远程仓库,电脑坏了也不怕。
- 追溯:哪一行代码是谁写的?什么时候写的?为什么这么写?版本管理全记着。
我的经验:我曾经接手过一个项目,没有版本管理,代码散落在各个同事的 U 盘里。光是把代码收集齐就花了两天。后来我强制团队用 Git,效率至少提升了 30%。
1.3 版本管理的核心概念
好,接下来咱们聊聊版本管理的四个核心概念:仓库、提交、分支、标签。这四个东西你搞明白了,版本管理就算入门了。
1.3.1 仓库(Repository)
仓库就是存放代码和所有历史记录的地方。你可以把它理解成一个「数据库」,里面存着每个文件的每个版本。
仓库分两种:
- 本地仓库:在你电脑上,可以离线操作。
- 远程仓库:在服务器上,大家共享的。
我建议你养成一个习惯:本地仓库和远程仓库保持同步。别只在本地提交,万一硬盘坏了,哭都来不及。
1.3.2 提交(Commit)
提交就是拍一张「快照」。你把当前所有文件的版本记录下来,生成一个唯一的 ID(通常是 SHA-1 哈希值)。
每次提交都要写一条提交信息。我个人习惯用「动词 + 名词」的格式,比如:
fix: 修复登录页面按钮点击无响应的问题
feat: 新增用户头像上传功能
refactor: 重构数据库查询逻辑
为什么要写清楚?因为三个月后你回来看提交记录,如果看到「修改了一些东西」这种信息,你肯定想抽自己。
避坑指南:我曾经犯过一个错误——一次提交改了 50 个文件,涉及 3 个不同的功能。后来要回滚其中一个功能,根本没法单独回滚。所以,一次提交只做一件事,这是铁律。
1.3.3 分支(Branch)
分支是版本管理最强大的功能之一。它让你可以在同一个仓库里,同时开发多个互不干扰的功能。
你可以把分支想象成「平行宇宙」。主分支(master/main)是稳定的生产版本,你在 feature 分支上开发新功能,开发完了再合并回去。
常见的分支策略有:
| 分支类型 | 用途 | 命名示例 |
|---|---|---|
| 主分支 | 生产环境代码,只接受合并 | main / master |
| 开发分支 | 日常开发集成 | develop |
| 功能分支 | 开发某个新功能 | feature/user-login |
| 修复分支 | 紧急修复线上 bug | hotfix/critical-bug |
| 发布分支 | 准备发布版本 | release/v1.2.0 |
1.3.4 标签(Tag)
标签就是给某个提交打个「名字」,通常用来标记版本号。比如 v1.0.0、v2.3.1。
标签和分支的区别在于:标签是只读的,不能在上面继续开发。它就是一个里程碑。
我每次发布正式版本,都会打一个标签。这样以后要查某个版本的代码,直接切到标签就行,不用去翻提交记录。
# 打标签
git tag v1.0.0
# 查看所有标签
git tag --list
# 切换到某个标签
git checkout v1.0.0
1.4 知识结构总览
下面这张图把版本管理的核心概念串起来了,你可以对照着理解:
1.5 小结
版本管理不是锦上添花,而是必需品。它解决的核心问题就三个:
- 记录历史:谁在什么时候改了啥。
- 并行开发:多个人、多个功能同时进行。
- 回滚恢复:出错了能回去。