Git基础知识

让我们先来看看Git偏向官方的定义:

 

  • Git 是一个开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。
  • Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。
  • Git 与常用的版本控制工具 CVS, Subversion 等不同,它采用了分布式版本库的方式,不必服务器端软件支持。

从上面的解释我们可以知道:Git是一个分布式的版本管理工具,团队中每个人的Git仓库层级和中心仓库一致,只是职能上不同。可以想象成每两个Git仓库之间有个Beyond Compare对比工具,针对文件进行对比,有改动则同步或者修改文件。

Git和SVN的区别:

  • Git 是分布式的,而SVN不是,这是Git和SVN最大的区别,没有服务端和客户端的区分。
  • Git 把内容通过压缩后存储,而SVN 是按文件来存储,所以如果Git仓库通过Git --bare init创建时则不存在工作区,文件也没法直接可视化。
  • Git 分支和 SVN 的分支不同,分支在 SVN 中就是一个目录而已没有类似git切换分支的指令,它就是代码的另外一个工作目录。
  • Git 没有一个全局的版本号,每次提交会生成SHA-1 哈希值作为版本号。而SVN有全局版本号,对于每一次原子性提交生成连续版本号,是可以预测下一次版本号的
  • Git 的内容完整性要优于SVN,据说是因为GIT的内容存储使用的是SHA-1哈希算法。这能确保代码内容的完整性

Git基础结构:

PS:这里转载一下菜鸟教程的Git图例,感兴趣的小伙伴可以查看菜鸟教程GIT

Git基础知识_第1张图片

 通过图例可以知道,在使用git init命令创建git仓库之后,标准化的仓库是包含工作区、版本库两部分的。版本库又分为index(暂存区)、HEAD(指向当前分支最近一次提交的指针),暂存区存放在.git目录下面的index中。

工作区中的内容就是我们能在电脑目录里直接观察到的文件:

版本库则是电脑目录中的隐藏目录.git:

Git基础知识_第2张图片

 我们通过指令:git help gitrepository-layout来了解下这些文件或者文件夹都做了什么

.git:.git目录是工作区的根目录,如果仓库目录定义成project.git,那么此仓库作为裸仓库来规范的和其他Git仓库进行历史版本、push、fetch等操作

Git基础知识_第3张图片

 HEAD:文件指向目前被检出的分支

Git基础知识_第4张图片

config:仓库的特定设定文件,如果有什么自定义的设置就设置在其中 

description:一个描述当前仓库的介绍文件

hooks:目录包含客户端或服务端的钩子脚本。钩子脚本就是在执行某些特定操作比如:commit、push的时候用脚本进行一些自定操作。具体操作在此不做深究,想要了解的小伙伴请查看官网。

Git基础知识_第5张图片

index:当前仓库的索引文件,也就是咱们所说的暂存区文件

info:info目录中包含一个全局性排除(global exclude)文件,也就是咱们说的.gitignore文件

logs:log用来查看历史提交记录的,如果不指定分支,默认情况下git log显示的是目前HEAD位置的git提交日志

objects:此目录存储所有数据内容,用我蹩脚的英语来翻译就是:object存储与当前仓库关联,通常一个object存储是自洽的,也就是所有被关联的对象都可以在objects里面找到。

Git基础知识_第6张图片

packed-refs、refs:refs目录存储指向数据(分支、远程仓库和标签等)的提交对象的指针,packed-refs用来打包标头和标签以便进行高效的访问仓库

Git的简单工作流程(workflow):

PS:这里转载一下菜鸟教程的Git图例,感兴趣的小伙伴可以查看菜鸟教程GIT

 Git基础知识_第7张图片

从图中可以知道,我们从资源库中进行工作副本的克隆,然后在克隆副本上面进行我们的工作。如果资源库有更改我们则通过git pull或者git merge将相关更改拉取下来,工作副本有修改则通过git push上传至资源库。

本期就到此,下期开始讲解Git常用命令。

 

你可能感兴趣的:(Git,git)