什么是仓库?
理解 Git 仓库——.git 文件夹、工作目录与暂存区。
你将学到
- 仓库(repo)是什么,它包含什么
- 三个区域:工作目录、暂存区和历史
- 隐藏的 .git 文件夹的作用
- 文件的生命周期:未追踪、已暂存、已提交
概念讲解
什么是仓库?
仓库(常简称为 repo)是被 Git 追踪的目录。它包含你的项目文件以及你所有变更的历史。
你可以把仓库想象成一个 Git 已入驻的文件夹——它监视里面的每个文件,让你保存快照(提交),并记住项目的整个历史。
三个区域
Git 把项目分为三个逻辑区域:
- 工作目录——你在编辑器中看到和编辑的实际文件。这是你写代码的地方。
- 暂存区(索引)——一个临时暂存区,你把想纳入下次提交的文件放在这里。用
git add添加。
- 仓库(.git 目录)——永久历史。当你
git commit时,暂存的快照保存在这里。所有提交、分支和标签都在这里。
流程是:
工作目录 → git add → 暂存区 → git commit → 仓库
.git 文件夹
运行 git init 时,Git 在项目目录内创建一个隐藏的 .git 文件夹。这个文件夹包含 Git 关于你项目的一切:
objects/——所有压缩的快照和文件内容refs/——指向提交的指针(分支和标签)HEAD——指向当前分支的文件config——仓库特定设置
永远不要删除或手动编辑 .git 文件夹——这样做可能损坏仓库并丢失所有历史。如果你想停止追踪项目,可以安全删除 .git 文件夹,但会丢失所有历史。
文件生命周期
Git 仓库中的文件经历以下状态:
- 未追踪(Untracked)——Git 看到了文件但尚未追踪(用
git add开始追踪) - 已暂存(Staged)——文件在暂存区,准备提交
- 已提交(Committed)——文件安全存储在仓库历史中
- 已修改(Modified)——被追踪的文件在上次提交后被更改
untracked → (git add) → staged → (git commit) → committed
committed → (编辑文件) → modified → (git add) → staged → (git commit) → committed
理解这些状态是看懂 git status 输出的关键。
示例代码
# 创建一个新目录并转为 Git 仓库
mkdir my-project
cd my-project
git init
# Git 创建了隐藏的 .git 文件夹——看看里面
ls -la .git
# 创建一个文件——它是未追踪的
echo "Hello Git" > README.md
# 检查状态——Git 看到了文件但没在追踪
git status
# 暂存文件——现在它在暂存区
git add README.md
# 再次检查状态——文件已暂存
git status
# 提交文件——现在它在仓库历史中
git commit -m "Add README"
# 检查状态——工作树干净
git status
完整走了一遍生命周期:创建仓库、添加文件、暂存、提交。每步后运行 git status 看文件如何在状态间移动。
动手试一试
- .gitignore Generator
创建 .gitignore 把不需要的文件挡在仓库外。
- Code Diff
比较两个文件版本——类似 Git 提交时显示的差异。
常见错误
错误写法
删除 .git 文件夹导致丢失所有项目历史
正确做法
.git 文件夹包含整个仓库历史。除非你有意停止追踪项目,否则永远不要删除它。定期备份或推送到远程。
错误写法
把暂存区和仓库混淆
正确做法
暂存区(git add 后)的文件尚未保存到历史。只有运行 git commit 才保存。如果编辑了已暂存文件,需要再次 git add。
相关资源
相关速查表
- Git Cheatsheet
仓库命令与文件生命周期参考。
查阅不认识的术语
新手友好的术语表用大白话解释编程术语——变量、函数、DOM、Promise 等等。
动手做项目
通过引导式项目应用所学,含起始代码与解决方案。
解读错误信息
用大白话解释常见错误——什么意思、为什么发生、如何修复。