外观
核心概念

| 名称 | 释义 |
|---|---|
| Workspace | 工作区:.git文件所在的目录就是工作区,一般是项目的根目录 |
| Index/Stage | 暂存区:介于工作区和仓库区之间,暂存修改的 |
| Repository | 仓库区/本地仓库:git初始化后,会在当前目录生成一个.git目录,这就是版本库 |
| Remote | 远程仓库:网络上的另一个版本库,可以和本地库交互 |
git 的基本工作流程
- 在工作目录中修改文件。
- 暂存文件,将文件的快照放入暂存区域。
- 提交更新,找到暂存区域的文件,将快照永久性存储到 Git 仓库目录。
git 文件的生命周期

未追踪的文件(Untracked)在
git add之后会变成已暂存(staged)状态。未修改的文件(Unmodified)在被修改编辑之后会变成已修改(modified)状态。
已修改(modified)的文件在
git add之后会变成已暂存(staged)状态。已暂存的文件(staged)在
git commit之后会变成未修改(Unmodified)状态。未修改的文件(Unmodified)在
git rm之后会变成未跟踪(Untracked)状态(注意git rm会删除掉指定的文件)。
git 的三种状态
- 已修改(modified) 表示修改了文件,但还没保存到数据库中,目前在工作目录(Workspace)
- 已暂存(staged) 表示对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中,目前在暂存区域(Index)
- 已提交(committed) 表示数据已经安全的保存在本地仓库中,目前在本地仓库(Repository)
git 的文件分类
- 追踪的 Tracked,已经加入版本库中的文件
- 未追踪的 Untracked,未加入到版本库中的,未被管理的文件
- 忽略的 Ignored, git 不再关注的文件,例如一些临时文件
.gitignore文件
书写格式规范
- 所有空行或者以
#开头的行都会被 Git 忽略。 - 可以使用标准的 glob 模式匹配。
- 匹配模式可以以(
/)开头防止递归。 - 匹配模式可以以(
/)结尾指定目录。 - 要忽略指定模式以外的文件或目录,可以在模式前加上惊叹号(
!)取反。
详解参考 https://github.com/github/gitignore
glob模式
所谓的 glob 模式是指 shell 所使用的简化了的正则表达式。
星号(*)匹配零个或多个任意字符;
[abc] 匹配任何一个列在方括号中的字符(这个例子要么匹配一个 a,要么匹配一个 b,要么匹配一个 c);
问号(?)只匹配一个任意字符;
如果在方括号中使用短划线分隔两个字符,表示所有在这两个字符范围内的都可以匹配(比如 [0-9] 表示匹配所有 0 到 9 的数字);
使用两个星号(*) 表示匹配任意中间目录,比如a/**/z 可以匹配 a/z, a/b/z 或 a/b/c/z等。