前言
在学习之前,我们首先需要做一些准备。
第一 我们需要先确立自己这次学习的目标是:能够熟练的掌握git,并了解它的运行机制
第二 文章结构跟随书中的结构,将一些重要的内容以及概念进行分析
由于书出版时间为2016年,而CS的内容更迭速度很快,因此如果发现有些功能被舍弃或者由更好的替代,会在之后补充。如果有些内容不正确,也希望能够指正。
目录
1.1 GIt和分散式版本管理DVCS(distributed version control system)
1.3.1 Distributed repositories 分散式仓库
1.1 GIt和分散式版本管理DVCS(distributed version control system)
当我们在做项目的时候,想必已经听过git版本管理的大名。这里还是简单说下什么是版本管理器,就是记录你对项目的更改历史,并能够追踪你对这个项目做了什么。
由于在软件开发过程中,会需要不同的小功能,而我们一般不希望在写这些小功能的时候对主要代码产生影响,所以我们将原本的项目作为一个版本保存,然后建立一个分支在该项目上写,最后经过测试功能运行没有问题的时候,在把这个分支添加到项目中。这样,谁,对项目的哪部分代码进行更改或添加一目了然,并且你还可以退回到原先的版本查看。
那什么是分散式管理DVCS?
这里就可以引出旧式的集中式版本管理。如下图所示,所有开发者都使用同一个资源,因此可能会有如下问题:
1 所有开发者可能需要争夺资源的使用权
2 对开发资源管理和整合必须有全局的理解,管理难度大
而分散式资源可以如下图所示,每个开发者都有一份资源的复印份,并对其进行操作。这样,开发者对资源的自由度就提高了。
1.2 初识版本管理
1.2.1 版本管理的各种概念
下面是对于没有版本管理经验的人,图解版本管理的一些基础概念。
1、版本管理(Version control)
多某个文件或项目的版本管理是指对这个文件或项目的变更历史的记录和追踪。
如下图是在进行ERP软件开发的版本管理(模拟,不是真实的情况)
从图中可知,我们对这个软件不断添加或者修改内容,并把每个变化都保存了下来。这样开发到后面,我们还是能够很清晰的知道这个项目的前面开发的内容,并且一般可以回到旧版本,正常使用。
2、仓库(repository)
这里仓库一般就是指你保存总文件或项目的地方。而在这个仓库里,有你所有的文件,包括你修改前或是修改后的文件。有点像你电脑的C盘,只是它还能保存历史信息,并回到旧版本。
3、提交(commit)
提交是为了保存你的修改。当你认为你的修改有保存的价值时,就可以提交修改,这样你的项目就会生成一个新版本番号。之后你也可以通过这个版本番号来查看该版本下的文件以及你做了哪些修改。
4、分支(branch)
分支指的是开发中的某一条路径。在分支的节点,对项目进行一份拷贝,然后在拷贝项目上的更改。
比如在网络开发时,有前端开发和后端开发。前端开发侧重网页设计和交互式设计。而后端开发则是针对数据库的管理和开发,两则的侧重不一样,因此可以建立分支。
两个分支中的内容在开发时,互不影响,在最后分支完成的时候,可以合并(merge)。
1.3 GIt的主要特征
一般版本管理系统都有三种属性:
- Versioning 改版 即对资源的修改,生成新版本
- Auditing 监察 知道哪些文件的哪些部分被修改
- branching 分支 非耦合部分的同时开发
与之相对应的Git的三大特征:
- Distributed repositories 分散式仓库
- Fast branching 快速分支
- Staging area 中间保存区域
1.3.1 Distributed repositories 分散式仓库
首先之前介绍过GIt是分散式管理系统,而特征之一就是他的仓库不是在某一个服务器中,而是每个开发者都可以有一份资源的复印来进行开发。每个开发者都拥有对这个拷贝的资源所有修改权限,可以自由使用。因此git有时候也被说成是开源的管理系统。
1.3.2 Fast branching 快速分支
这里的快速是和以前的版本管理系统相比。之前的版本管理系统如果需要建立一个分支,首先,将当前所有文件复制到别的地方,然后将仓库分支checkout操作。这样,开发部门就有两份code,一份主文件中code,一份有分支内容的code.
而git中建立分支就是建立一个目录。然后,切换分支就是切换到这个新目录中。非常快速。
1.3.3 staging area 中间保存区域
这个中间保存区是git架构中,非常有革新的一部分。这个中间保存区域就是在你将你修改的文件提交之前,你可以选择哪些文件你需要提交到最终的仓库中。给了你选择提交的内容的权利。因为有部分机密的部分文件,你希望只在自己电脑里面,那你就可以不用提交这些文件。
总结:git现在被广泛使用,一是在于其给了开发者极大的自由度 二是其效率极快。
下面推荐一些个人学习上可用的git教程:
github上学习git的一些教程 https://try.github.io/
git简明指南 https://www.runoob.com/manual/git-guide/
菜鸟教程上的git教程 https://www.runoob.com/git/git-branch.html
英文版书地址 《Learn-Git-in-a-Month-of-Lunches 》https://pepa.holla.cz/wp-content/uploads/2016/01/Learn-Git-in-a-Month-of-Lunches.pdf