1 Git的前世今生
1.1Git的应用
协同工作:业界绝大多数公司都是基于Git进行代码管理,因此Git是一个程序员的必备技能。
开源社区:目前绝大多数的开源项目都是基于Git维护的,参与这些项目的开发都需要用到Git。
1.2版本控制
1.2.1Git是什么
Git is a free and open source distributed version control system designed to handle everything from small to very large projects with speed and efficiency.
1.2.2版本控制是什么
一种记录一个或若干文件内容变化,以便将来查阅特定版本修订情况的系统
1.2.3版本控制的作用
更好的关注变更,了解到每个版本的改动是什么,方便对改动的代码进行检查,预防事故发生
也能够随时切换到不同的版本,回滚误删误改的问题代码
1.2.4版本控制的分类
| 版本控制类型 | 代表性工具 | 解决的问题 |
|---|---|---|
| 本地版本控制 | RCS | 本地代码的版本控制 |
| 集中式版本控制 | SVN | 提供一个远端服务器来维护代码版本,本地不保存代码版本,解决多人协作问题 |
| 分布式版本控制 | Git | 每个仓库都能记录版本历史,解决只有一个服务器保存版本的问题 |
1.2.4.1本地版本控制
最初的方式
通过本地复制文件夹,来完成版本控制,一般可以通过不同的文件名来区分版本
解决方案
开发了一些本地的版本控制软件,其中最流行的是RCS
基本原理
本地保存所有变更的补丁集,可以理解成就是所有的Diff,通过这些补丁,我们可以计算出每个版本的实际的文件内容
缺点
只能在本地使用,无法进行团队协作,使用的场景有限,因此衍生出了集中式版本控制
1.2.4.2集中版本控制
代表性工具
SVN
基本原理
1.提供一个远端服务器来保存文件,所有用户的提交都提交到该服务器中
2.增量保存每次提交的Diff,如果提交的增量中和远端现存的文件存在冲突,则需要本地提前解决冲突
优缺点
| 优点 | 1.学习简单,更容易操作2.支持二进制文件,对大文件支持更友好 |
|---|---|
| 缺点 | 1.本地不支持版本管理的概念,所有提交都只能联上服务器后才可以提交2.分支上的支持不够好,对于大型项目团队合作比较困难3.用户本地不保存所有版本的代码,如果服务端故障容易导致历史版本的丢失 |
1.2.4.3分布式版本控制
代表性工具
Git
基本原理
1.每个库都存有完整的提交历史,可以直接在本地进行代码提交
2.每次提交记录的都是完整的文件快照,而不是记录增量
3.通过Push等操作来完成远端代码的同步
优缺点
| 优点 | 1.分布式开发,每个库都是完整的提交历史,支持本地提交,强调个体2.分支管理功能强大,方便团队合作,多人协同开发3.校验和机制保证完整性,一般只添加数据,很少执行删除操作,不容易代码丢失 |
|---|---|
| 缺点 | 1.相对SVN更复杂,学习成本更高2.对于大文件的支持不是特别好(git-lfs工具可以弥补这个功能) |
1.3Git的发展历史
作者
Linus Torvalds(不仅是Linux这个项目的作者,也是Git的作者)
开发原因
怀疑Linux团队对BitKeeper(另一种分布式版本控制系统,专有软件)进行了逆向工程,BitKeeper不允许Linux团队继续无偿使用。因此决定自己开发一个分布式版本控制系统
开发时间
大概花费两周时间,完成了Git的代码第一个版本,后续Linux项目就开始使用Git进行维护
| 发展平台 | 描述 |
|---|---|
| GitHub | 全球最大的代码托管平台,大部分的开源项目都放在这个平台上 |
| Gitlab | 全球最大的开源代码托管平台,项目的所有代码都是开源的,便于在自己的服务器上完成Gitlab的搭建 |
| Gerrit | 由Google开发的一个代码托管平台,Android这个开源项目就托管在Gerrit之上 |