文章目录
1 Git 的概念
Git是一个免费的,开源的分布式版本控制系统,可以快速高效的处理从小型到大型的项目
2. 什么是版本控制
版本控制是一种记录一个或者若干个文件内容变化,以便将来查阅特定版本修订情况的系统
3. 为什么要使用版本控制
- 软件开发中使用版本控制系统是个明智的选择
- 他可以帮你进行历史版本控制,回退到某个版本,如果进行了错误的修改(删除),也可以帮你恢复
- 可以帮助你打标签,对于比较大的历史变更,可以打一个tag,对外发布,记录整个项目的发展历史。
- 如果项目出问题,可以对比文件变化的历史,通过代码差异找出是什么地方导致的,谁导致的,方便代码追踪
4. 版本控制系统的分类
- 集中化的版本控制系统
- 分布式的版本控制系统
4.1 集中化的版本控制系统
集中化版本控制系统,诸如CSV,SVM,Perforce等等,都是有一个单独的中央服务器,保存所有版本的修订。
协同工作的人通过客户端拉取最新
的文件或者提交更新。
缺点:
-
单点故障
只有一个中央服务器保存所有的修订版本,客户端只保存最新的更新。如果服务器宕机,那么客户端将无法提交更新,也就无法协同工作
-
必须联网才能工作
因为只有中央服务器保存所有版本,干活的时候,先从中央服务器获取最新的版本,干完活再推送到中央服务器。所以如果没有网络,就没办法工作
集中化版本控制系统,SVN保存项目
每次保存最新的版本和上一个版本的差异
4.2 分布式版本控制系统
由于上面的集中化的版本控制系统的缺点,分布式版本控制系统应运而生
在这类系统中,如Git,BitKeeper等。客户端并不只是提取最新版本的文件快照,而是把代码仓库完整的镜像下载
每个客户端都保存完整的仓库镜像,每个客户端都是服务器
这类系统可以指定若干个不同的远端代码仓库进行交互。这样,你就可以在同一个项目中分别和不同的工作小组的人相互协作,共同开发
分布式版本控制系统在管理项目时存放的不是项目版本与版本之间的差异。他存的是索引(所需磁盘空间很少,所以每个客户端都可以放下整个项目的历史记录),使用了极致的压缩和解压算法
5. Git简史
Git是由Linux之父林纳斯 托瓦斯编写的,开源,免费的分布式版本控制系统
- 在编写Linux的时候,因为Linux开源,有很多的人都贡献者代码
- 人越来越多,代码优化也越来越好。
- 这个时候就需要项目管理工具,更开始他们使用的是Bitkeeper(收费的,但是给Linux免费使用)
- 后来由于Linux社区的大佬都看这个Bitkeeper的源码。所以Bitkeeper终止了合作
- 所以Linux一周写了一个Git,一个月内将Linux管理在Git上
- 并且做到了开源,所以用户群越来越大
5. Git 安装
官网地址:https://git-scm.com/
各个版本都有,windows,Linux,Mac
Windows安装比较简单,一路下一步就可以,这介绍Linux的安装
apt-get install git -y
校验
6. Git设置签名
设置用户名和邮箱:
git config --global user.name "HLH"
git config --global user.email "17703595860@163.com"
查看全局配置
git config --global --list
7. Git 本地结构
Git本地结构分三个区域
- 工作区:代码编辑区域
- 暂存区:暂存修改
- 本地库:本地仓库
8. 代码托管中心-本地库和远程库的交互方式
- 团队内部协作
- 跨团队协作
8.1 代码托管平台是什么
我们已经有本地库了,本地库可以帮我们进行版本控制,为什么还需要代码托管中心呢?
他的任务是帮我们维护远程库。有公司内部使用的GitLab。还有开源的GitHub,Gitee等
8.2 团队内部协作
- 公司项目经理启动项目,创建本地库
- push推送到远程库,最开始的时候,远程库中没有内容,文件和目录,历史记录全部在本地库,需要将本地库的内容推送到远程库,一般公司内部使用GitLab
- 开发人员就可以从远程库clone内容
- 本地编写完代码之后,push到远程库,需要有对应的权限才可以推送
- 项目经理可以从远程库拉取最新的代码,查看代码进度
8.3 跨团队协作
- 公司项目经理启动项目,创建本地库
- push推送到远程库,最开始的时候,远程库中没有内容,文件和目录,历史记录全部在本地库,需要将本地库的内容推送到远程库,一般公司外使用GitHub或者Gitee
- B公司员工因为全下问题不能访问A公司的仓库,所以需要fork到本公司可以访问的远程库,这个时候,两个仓库代码是统一的
- A公司和B公司的员工可以各自拉取代码,进行修改,提交代码。
- 修改完成后,push到各自的远程库
- 这个时候,两个远程库内容是不同的,如果需要合并,可以发送merger请求,由高权限人员进行合并
- 最后由A公司项目经理进行代码检查