- 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两条命令的简体。
网友评论