DevOps03-git
1、git简介
- Git是一个开源的分布式版本控制管理系统。它的适用范围非常广泛,从简单的配置文件管理到大型的软件项目都可以使用Git来进行高效地管理。
- 尽管Git十分轻量,但功能非常丰富,且性能出众。凭借低成本的本地分支、灵活易用的暂存区以及多样化的工作流,在各种代码管理工具如Subversion、CVS、Perforce以及Clear Case等之中脱颖而出。
1、Git仓库(repository)
- Git仓库在CI/CD系统里的位置如图所示。
- 通常会部署一个中心的Git仓库用于存储代码,里面包含了代码的历史版本,以及各个分支所指向的版本。所有的开发者都向这个仓库提交,集成测试工具也从这个仓库获取。
2、Git分支(branch)
- 几乎所有的版本控制系统都支持分支,以方便开发者独立于主线之外工作,达到一定完成程度之后再合入。有一些代码控制系统实现分支的方式是生成一个副本,在大型项目中这是一个相当昂贵的操作。而Git中的分支本质上就是对某个历史版本的引用,并不创建其他对象,创建分支几乎可以瞬时完成。
- 在CI/CD系统中,不同的分支可能会对应不同的构建任务,或者不同的环境设置。对于集成了代码评审流程的系统,未经评审的代码通常会对应一个临时分支。
3、Git提交(commit)
- Git分支是对某个历史版本的引用,Git版本历史不是记录历次变更,而是一系列快照,每次代码提交都会创建当前工作区的一个快照。除此之外,Git提交中还包含了作者姓名、电子邮件、输入的信息以及这之前一个或多个直接相邻的提交。Git为每个提交对象生成SHA-1哈希,任何内容的变更都会导致SHA-1的变化。
- 在CI/CD系统中,通常会把被构建的分支解析为对应提交的SHA-1哈希。因为SHA-l冲突的概率低到可以忽略的程度,所以只要确定了SHA-1,就可以追溯到唯一的构建对象。
4、Git标签(tag)
- 代码控制系统中通常使用标签来标记一些重要的历史版本。Git支持两种类型的标签,轻量级的标签和带注记的标签。
- 轻量的级标签几乎与分支相同,只是标签不会被轻易移动。
- 带注记的标签则包含了更多的信息,诸如标签创建者的姓名、电子邮件、日期以及输入的信息,而且可以进行数字签名和校验。
- 在标签中添加注记是比较推荐的做法,这样可以提供该标签的背景信息,提高可维护性。如果你只想需要一个临时的标签或由于某种原因不希望保留这些信息,那么轻量级的标签也是一种选择。
- 在CI/CD系统中,标签通常用于标记版本发布,同时也可能触发特定的构建任务,例如生成二进制发行包,推送制品库等。
5、Git引用(refs)
- 上面几个概念相互之间的关系如图所示。
- Git仓库是一些Git提交(图3-2中的98ca9等)的集合。
- 每个Git提交都对应了代码目录的一个快照(图中的SnapshotA等)。
- Git分支(图中的master)是对Git提交的一个引用,并且可以被更新,以指向新的提交。
- Git标签(图中的v1.0)也是对Git提交的一个引用,它与分支非常类似,区别在于标签被设置之后通常不会再被移动。
- 引用(reference,或缩写为refs)。你可以在.git/refs目录下找到对应的文件。如master对应于.git/refs/heads/master,v1.0对应于.git/refs/tags/v1.0。这些文件里包含了相应提交的SHA-1值,即f30ab...。Git引用保存了Git提交的SHA-1值,提供了一个简单的名字来作为原始SHA-1值的替代,更方便使用。
- HEAD表示当前提交,与分支、标签不同,HEAD是一个符号引用(symbolic reference),它的内容不是原始的SHA-1值,而是指向其他引用。例如:
]# cat.git/HEAD ref:refs/heads/master
1
# #