~/aronnax.site/notes
cat Git教程.md

Git使用笔记

tokei Git教程.md

Type Lines CJK Words
List 61 793 199
Code 58 56 121
Heading 23 103 18
Paragraph 16 403 34
Quote 2 43 16
Total 160 1,398 388

~5 min read

本笔记基于 The Missing Semester of Your CS Education - Version Control (Git)

本笔记根据原教程文档,使用Kimi K2.5总结并翻译为中文版,并由Gemini 3 Flash Preview补充GitHub与中国开发者需要注意的问题

版本控制系统 (VCS) 是用于跟踪源代码(或其他文件和文件夹集合)变更的工具。正如其名,这些工具帮助维护变更历史,并促进协作。Git 是目前事实上的标准版本控制工具。

1. Git 的数据模型

Git 的独特之处在于它对数据的建模方式。Git 将历史记录建模为一系列快照 (Snapshots),而不是差异。

快照 (Snapshots)

Git 将顶级目录中的文件和文件夹集合的历史建模为一系列快照。

建模历史:关联快照

历史是一个有向无环图 (DAG) 的快照。每个提交(Snapshot)都指向其“父级”提交。

o <-- o <-- o <-- o <---- o
            ^            /
             \          v
              --- o <-- o

数据模型伪代码

理解 Git 的数据模型有助于理解其命令:

// 文件是一堆字节
type blob = array<byte>

// 目录包含命名的文件和目录
type tree = map<string, tree | blob>

// 提交包含父级、元数据和顶级树(快照)
type commit = struct {
    parents: array<commit>
    author: string
    message: string
    snapshot: tree
}

对象和内容寻址 (Content-addressing)

在 Git 的数据存储中,所有对象(Blob, Tree, Commit)都通过其 SHA-1 哈希进行内容寻址。

objects = map<string, object>

def store(object):
    id = sha1(object)
    objects[id] = object

def load(id):
    return objects[id]

引用 (References)

因为 SHA-1 哈希(如 698281bc68...)难以记忆,Git 使用“引用”(refs)作为 SHA-1 哈希的人类可读名称。引用是指向提交的指针。与不可变的对象不同,引用是可变的。

references = map<string, string>

def update_reference(name, id):
    references[name] = id

def read_reference(name):
    return references[name]

2. 暂存区 (Staging Area)

Git 允许你指定哪些修改应该包含在下一个快照中,这就是“暂存区”(或称为 Index)。

这允许你创建干净的提交,例如:

3. Git 命令行接口

基础 (Basics)

分支与合并 (Branching and Merging)

远程 (Remotes)

撤销 (Undo)

4. 高级 Git

5. 杂项

6. 初始配置与环境优化

初始配置

安装 Git 后,首先应配置个人信息,这会出现在你的 Commit 元数据中:

git config --global user.name "Your Name"
git config --global user.email "your_email@example.com"
# 设置默认分支名为 main (顺应现代习惯)
git config --global init.defaultBranch main

SSH 密钥配置

相比 HTTPS,使用 SSH 协议在推送代码时更方便(免去输入 Token 的烦恼):

  1. 生成密钥:ssh-keygen -t ed25519 -C "your_email@example.com"
  2. 查看并复制公钥:cat ~/.ssh/id_ed25519.pub
  3. 将内容添加到 GitHub Settings -> SSH and GPG keys 中。

7. 中国开发者额外注意 (Network & Proxies)

在国内环境下,直接访问 GitHub 往往不稳,建议进行以下优化:

配置代理

如果你本地开启了代理工具(如 7890 端口),可以配置 Git 走代理:

HTTP/HTTPS 协议:

# 设置代理
git config --global http.proxy http://127.0.0.1:7890
git config --global https.proxy http://127.0.0.1:7890

# 取消代理
git config --global --unset http.proxy
git config --global --unset https.proxy

提升克隆速度

文件名乱码

解决 git status 中文文件名显示为数字转义符的问题:

git config --global core.quotepath false

8. GitHub 协作流程

GitHub 扩展了 Git 的社交属性,核心流程包括:

9. 学习资源