这一篇在干嘛?

在敲第一条 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 终端)。
  • macOSxcode-select --installbrew 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 的本质区别
  • 一台装好并完成首次配置的开发机
  • 后续所有文章共用的概念底座:快照、校验和、配置层级

自测

下一篇:📦 建仓与文件三态:add、commit 与暂存区