Git概览

  • Git到底是个什么鬼?
  • 远程仓库又是个什么鬼?
  • 本地Git仓库与远程仓库有什么区别?

Git到底是个什么鬼?

Git不只是简单的一个VCS,更像是一个小型的文件系统。Git将数据看作是文件系统的一组快照。每次提交更新(git commit),或在Git中保存项目状态(git add)时,Git对当时的全部文件制作快照,并保存快照的索引。

存储项目随时间改变的快照(图片来自网络)

Git几乎所有的操作都只需要访问本地文件或资源,因此本地磁盘上就有项目的完整历史记录,当要查看历史记录或回退版本仅操作本地的数据库(Git仓库 or 版本库)即可完成。
**Git有三种状态,文件可能处于其中之一:已提交(committed)、已修改(modified)和已暂存(staged)。 **

  • 已提交(git commit后的文件)表示数据已经安全的保存在本地数据库中。
  • 已修改表示修改了文件,但还没保存到数据库中。
  • 已暂存(git add后的文件)表示对一个已修改文件的当前版本做了标记,使之包含在下次提交的快照中。

由三种状态引入 Git 项目的三个工作区域的概念:Git 仓库、工作目录以及暂存区域。

Git工作区域(图片来自网络)

Git 仓库目录是 Git 用来保存项目的元数据和对象数据库的地方。 这是 Git 中最重要的部分,从其它计算机克隆仓库时,拷贝的就是这里的数据。
工作目录是对项目的某个版本独立提取出来的内容。 这些从 Git 仓库的压缩数据库中提取出来的文件,放在磁盘上供你使用或修改。
暂存区域是一个文件,保存了下次将提交的文件列表信息,一般在 Git 仓库目录中。 有时候也被称作“索引”,不过一般说法还是叫暂存区域。
基本的 Git 工作流程如下:

  • 在工作目录中修改文件。
  • 暂存文件,将文件的快照放入暂存区域。
  • 提交更新,找到暂存区域的文件,将快照永久性存储到 Git 仓库目录。

如果 Git 目录中保存着特定版本的文件,就属于已提交状态。 如果作了修改并已放入暂存区域,就属于已暂存状态。 如果自上次取出后,作了修改但还没有放到暂存区域,就是已修改状态。

远程仓库又是个什么鬼?

远程仓库可以理解为服务器上的Git,当需要多人协作完成项目时,为了使用Git协作功能,在服务器上搭建的一个公用的Git仓库。

本地Git仓库与远程仓库有什么区别

本质上没有什么区别,本地Git仓库和远程仓库都是单独管理自己的快照。
当使用git clone命令从远程仓库clone,或拉取远程仓库的数据时会在本地Git仓库创建一个远程分支。

克隆之后的服务器与本地仓库(图片来自网络)

如果你在本地的 master 分支做了一些工作,与此同时,其他人推送提交到 远程仓库 并更新了它的 master 分支,那么你的提交历史将向不同的方向前进。 另外,只要你不与 origin 服务器连接,你的 origin/master 指针就不会移动。

本地与远程的工作可以分叉(图片来自网络)

如果要同步你的工作,运行 git fetch origin 命令。 这个命令查找 “origin” 是哪一个服务器,从中抓取本地没有的数据,并且更新本地数据库,移动 origin/master 指针指向新的、更新后的位置。

更新远程仓库引用(图片来自网络)

这种情况下将本地仓库信息推送(git push)到远程仓库会提示错误信息,需要将远程分支和本地分支合并(git merge origin/master,修改冲突,重新提交)后再推送。


错误信息

注意: git pull origin master 命令相当于git fetch origin 和 git merge origin/master两条命令的简体。

你可能感兴趣的:(Git概览)