百尺竿头:理解Git本地仓库结构及基本操作

546 阅读4分钟

上一篇文章我们主要讲解如何使用 Git 托管代码或者管理文件,在对其版本控制中我们简单地使用了 Git 相关的命令以及基本操作,如:git addgit commit 等。下面,我们将进一步理解 Git本地仓库 结构以及命令在执行的时候,背后的工作原理是什么?

一. Git 本地仓库结构

如下图,我们可以看到 Git 本地仓库主要有三个部分组成:工作区(workspace)、暂存区(staging area)、版本库(repository)

git仓库组成部分

工作区(workspace)

所谓工作区,指的是 git 管理的项目,主要是项目的保存位置。使用过 Eclipse(IDE开发工具)的小伙伴肯定清楚,运行它的时候我们需要先设置 workspace 的位置,在 Git 中,工作区是用来保存一个项目当前版本对应的所有文件,这些文件是从 Git版本库 中压缩后存放到我们本地文件夹。

暂存区(staging area)

暂存区字面意思就是文件暂时存放的地方,主要保存下一次提交到仓库的那些信息,在 git 中,暂存区也叫 index(索引)。

版本库/仓库(repository)

Git 版本库,从上图可以看到,它在项目的 .git 隐藏目录中,主要是存放自己的元数据以及文档数据库的地方。

二. 三者关系

三者关系梳理

  1. 首先在工作区修改某个版本的代码
  2. 将修改好的代码文件通过 git add 命令放入至暂存区,准备下一步提交至 git版本库
  3. 使用 git commit 命令将暂存区的文件提交至版本库中

三. 常见基本操作

在上一讲 物善其用:打破使用界限,人人皆可用Git 我们通过 Git 来托管我们的代码,并且实操了解 git initgit addgit 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 commit命令

将文件提交至本地 Git仓库,我们再执行 git status 命令,如下:

提交至本地仓库后,查看其状态

3.4 流程梳理

  • 创建新文件:此时仅仅停留在工作区中

  • git add 新文件:已经被git追踪,文件放入至暂存区中

  • git commit 新文件:已经被git追踪,文件放入 Git仓库 中

  • 修改对应文件:没有加入暂存区,被修改的内容仅仅停留在工作区中

  • git add 修改文件:修改的文件加入暂存区

  • git commit 修改文件:修改后的新版本提交到了 Git仓库 中

一般我们自己创建的文件,刚开始都处于暂存区,然后通过git addgit commit命令执行之后,就会被提交至 git 版本库。

四. 总结一下

我们在文章中多次提到过版本的概念,对于 git 来说,每次执行一次 git add 操作,都会被算作一个版本,此时这个版本涵盖工作区中所有修改或新增的文件,然后被放入暂存区,等待着被提交到 git 仓库 中去。一般我们都会 git addgit commit 命令一起执行,方便我们记录。

好了,今天就到这里!

如上,希望对你有价值,我们下次见!认真学,认真做,万事皆有可能!欢迎一起交流、分享经验、祝您学习进步!