上一篇文章我们主要讲解如何使用 Git 托管代码或者管理文件,在对其版本控制中我们简单地使用了 Git 相关的命令以及基本操作,如:git add、git commit 等。下面,我们将进一步理解 Git本地仓库 结构以及命令在执行的时候,背后的工作原理是什么?
一. Git 本地仓库结构
如下图,我们可以看到 Git 本地仓库主要有三个部分组成:工作区(workspace)、暂存区(staging area)、版本库(repository)
工作区(workspace)
所谓工作区,指的是 git 管理的项目,主要是项目的保存位置。使用过 Eclipse(IDE开发工具)的小伙伴肯定清楚,运行它的时候我们需要先设置 workspace 的位置,在 Git 中,工作区是用来保存一个项目当前版本对应的所有文件,这些文件是从 Git版本库 中压缩后存放到我们本地文件夹。
暂存区(staging area)
暂存区字面意思就是文件暂时存放的地方,主要保存下一次提交到仓库的那些信息,在 git 中,暂存区也叫 index(索引)。
版本库/仓库(repository)
Git 版本库,从上图可以看到,它在项目的 .git 隐藏目录中,主要是存放自己的元数据以及文档数据库的地方。
二. 三者关系
- 首先在工作区修改某个版本的代码
- 将修改好的代码文件通过 git add 命令放入至暂存区,准备下一步提交至 git版本库 中
- 使用 git commit 命令将暂存区的文件提交至版本库中
三. 常见基本操作
在上一讲 物善其用:打破使用界限,人人皆可用Git 我们通过 Git 来托管我们的代码,并且实操了解 git init、git add、git commit 命令是用来干什么的。结合上一讲,我们一起学习下 Git 的其他命令。
3.1 查看仓库状态
git status 命令是用来查看当前 Git 项目的的各种状态。
我们可以在 demo4git 项目下新建一个 HelloController.java 的文件,然后执行 git status 命令,看一下当前的状态,如下:
此时,执行命令结果显示,在当前的master分支下,HelloController.java 文件没有被 git 追踪到它的版本信息。
3.2 添加文件至暂存区
git add 命令是将当前新增或者修改过的文件添加至暂存区,
bamawdeMacBook-Pro:demo4git bamaw$ ls
Demo4gitApplication.java HelloController.java
bamawdeMacBook-Pro:demo4git bamaw$ pwd
/Users/bamaw/workspace/demo4git/src/main/java/com/pangtai/demo4git
bamawdeMacBook-Pro:demo4git bamaw$ git add HelloController.java
将指定文件添加至暂存区,我们再执行 git status 命令,文件已经被 git 开始追踪,如下:
3.3 提交至本地仓库
当文件被放入了暂存区之后,我们可以使用 git commit 命令将当前暂存区的文件提交至本地 Git仓库 中去,如下:
将文件提交至本地 Git仓库,我们再执行 git status 命令,如下:
3.4 流程梳理
-
创建新文件:此时仅仅停留在工作区中
-
git add 新文件:已经被git追踪,文件放入至暂存区中
-
git commit 新文件:已经被git追踪,文件放入 Git仓库 中
-
修改对应文件:没有加入暂存区,被修改的内容仅仅停留在工作区中
-
git add 修改文件:修改的文件加入暂存区
-
git commit 修改文件:修改后的新版本提交到了 Git仓库 中
一般我们自己创建的文件,刚开始都处于暂存区,然后通过git add和git commit命令执行之后,就会被提交至 git 版本库。
四. 总结一下
我们在文章中多次提到过版本的概念,对于 git 来说,每次执行一次 git add 操作,都会被算作一个版本,此时这个版本涵盖工作区中所有修改或新增的文件,然后被放入暂存区,等待着被提交到 git 仓库 中去。一般我们都会 git add 和 git commit 命令一起执行,方便我们记录。
好了,今天就到这里!
如上,希望对你有价值,我们下次见!认真学,认真做,万事皆有可能!欢迎一起交流、分享经验、祝您学习进步!