这一篇在干嘛?
在敲第一条 Git 命令之前,先搞清楚三件事:版本控制是干嘛的、Git 凭什么脱颖而出、装好之后怎么配置。这一篇不写代码,但后面每一篇都建立在这些概念上。内容对应《Pro Git》第 1 章「起步」。
没有版本控制的世界
你一定干过这种事:
毕业论文-v1.doc
毕业论文-最终版.doc
毕业论文-最终版2-真的最终.doc
毕业论文-最终版2-真的最终-导师修改.doc这就是手工版本控制——靠复制文件来保存每个阶段的快照。它有三个致命问题:
- 回不去:改崩了想回到三天前的样子?对不起,三天前没存。
- 分不清:两个版本之间改了哪几行?只能肉眼对比。
- 难协作:两个人同时改一个文件,只能靠口头约定「你改完发我」。
**版本控制系统(VCS)**就是专门解决这三个问题的工具:它记录文件每次的快照,让你随时回到任何一个历史时刻、看清任意两次提交之间的差异、并让多人协作有条不紊。
集中式 vs 分布式:Git 的出身
Git 诞生于 2005 年,起因很硬核:Linux 内核社区与当时的商业 VCS(BitKeeper)合作破裂,Linus Torvalds 花了大约两周时间写出了 Git,随后用它在 2005 年开发了 Linux 内核的 3.0 版本。
在 Git 出现之前,主流是集中式版本控制(CVS、SVN):一台中央服务器保存所有历史,每个人都从它那里取代码、提交代码。缺点很明显——中央服务器是单点故障:它挂了,所有人都没法提交、没法看历史。
Git 是分布式版本控制(DVCS):每个开发者的电脑上都有一份完整的历史仓库。你在飞机上、断网状态下照样提交、看历史、建分支——联网后把你的提交推给别人即可。中央仓库(比如 GitHub)不再是「唯一真相」,而只是大家交换提交的中转站。
日常最实用的两条
- 本地操作(提交、看历史、建分支)几乎都是瞬间完成,因为不依赖网络。
- 只要任何一个克隆还在,整个项目的历史就不会丢。
Git 的三个设计哲学
1. 快照,不是差异
很多 VCS 存的是「文件 1 改了哪几行、文件 2 改了哪几行」这样的差异序列。Git 不一样:每次提交时,它对当时所有被跟踪的文件拍一张快照,保存整张快照的引用;没变的文件直接链接到上一份,不重复存储。
可以把 Git 想象成一连串微型文件系统快照,而不是「修改记录的流水账」。
2. 几乎所有操作都在本地
历史查询、对比差异、建分支——全部直接读本地仓库,不用联网、不用等服务器。这也是 Git 在离线时依然完全可用的原因。
3. 完整性保证
Git 中所有数据在存储前都计算 SHA-1 校验和(一个 40 位的十六进制字符串),以后通过这个值索引。你在 Git 里看到的所有「对象编号」(比如提交号 a1b2c3d...)都是内容的哈希——内容变了,编号必变。任何文件损坏或篡改,Git 立刻能发现。
安装 Git
- Windows:官网 https://git-scm.com/download/win 下载安装包,一路默认即可(会自带 Git Bash 终端)。
- macOS:
xcode-select --install或brew install git。 - Linux(Debian/Ubuntu):
sudo apt install git;(CentOS/Fedora):sudo dnf install git。
装完验证:
git --version初次运行 Git 前的配置
Git 自带 git config 工具管理配置,配置分三个层级:
| 层级 | 文件位置 | 作用范围 |
|---|---|---|
--system | /etc/gitconfig | 整台机器所有用户 |
--global | ~/.gitconfig | 当前用户的所有仓库 |
| 不加参数 | 仓库内 .git/config | 仅当前仓库(优先级最高) |
每一级都会覆盖上一级的设置。日常 99% 的情况用 --global。
第一次使用必须做两件事——告诉 Git 你是谁,因为每次提交都会记录作者信息:
git config --global user.name "Zhang San"
git config --global user.email zhangsan@example.com新手最常见的困惑
这里的邮箱不是登录密码,它只是写进每条提交里的「署名」。想在 GitHub 上让提交头像和贡献统计对上号,填你 GitHub 账号绑定的邮箱即可。
再配一个默认文本编辑器(提交时输入说明会用到):
git config --global core.editor "code --wait" # VS Code检查所有配置:
git config --list --show-origin获取帮助
三种等价方式,任选其顺手的:
git help <verb> # 完整手册,如 git help config
git <verb> --help # 同上
git <verb> -h # 快速摘要小结
- 版本控制解决三个问题:能回去、能对比、能协作。
- Git 是分布式的:每台机器都有完整历史,中央仓库只是交换中转站。
- 三大设计:快照而非差异、本地操作优先、SHA-1 完整性。
- 装完先配
user.name/user.email,这是提交的署名。 - 命令不会用就
git help <verb>。
学完你会得到:
- 理解 Git 与复制改名、SVN 的本质区别
- 一台装好并完成首次配置的开发机
- 后续所有文章共用的概念底座:快照、校验和、配置层级
自测
自测
- Git 存储历史时,保存的是「每次的差异」还是别的什么?这种设计带来什么好处?
- 为什么说 Git 在断网时依然可以完整工作?
--system、--global、仓库级三种配置,哪个优先级最高?user.email填错了会影响登录吗?它真正影响的是什么?- 如何查看
git commit命令的完整手册?