git中tag与release的创建以及两者的区别

前言

本文未经过原文作者转载许可,全由博主一人擅自抄录到本博客,博主只是觉得原文作者写的很好,所以将其收录到自己的博客内,以便博主本人日后对该知识有所遗忘时,能在自己的博客内自行查阅,再此感谢原文作者写的这篇好文。如有侵权,请联系删除

本文可能于原文有所不同,不过版权依然归原文作者所有

原文地址: https://www.jianshu.com/p/79ecf4fe5079

定义

标签(tag)是特定提交(commit)一个指针,也就是每个 tag 对应一个特定的 commit。

Release 是具有 changelogs 和二进制文件的一级对象,它可以代表超出 Git 架构本身的一个特定时间点之前的所有项目历史。也就是通过 release,不但能够通过源码体现出项目历史,还能通过已经编译好的二进制文件来进一步描述此时的项目状态。“超出 Git 架构本身“的意思则在于,git 本身只能记录项目修改,本质上不适合将编译好的项目二进制文件记录下来。而通过 release 则把项目二进制文件保存了下来,方便用户下载,也方便查找特定版本的二进制文件。

以下是Github official announcement所定义原文:

eleases are first-class objects with changelogs and binary assets that present a full project history beyond Git artifacts.

创建方法

Release 分为两种:lightweight and annotated.

创建 lightweight 类型的 tag:

COPY
1
git tag v1.4-lw

创建 annotated 类型的 tag:

COPY
1
git tag -a v1.4 -m "my version 1.4"

通过 tag 可以返回到项目的特定状态下,所以可以将 tag 看作是在大量 commit 中设定的书签。

创建 release,则需要通过源码托管商的网页操作界面来进行,一般会要求填写 tag 名、分支以及相应的发布说明,还可上传编译好的程序、打包好的文件等。

区别

标签是 git 中的概念,而 release 则是 Github、码云等源码托管商所提供的更高层的概念。也就是说 git 本身是没有 release 这个概念的,只有 tag。

两者之间的关系则是,release 基于 tag,为 tag 添加更丰富的信息,一般是编译好的文件。

总结

Release 是源码托管商对 git 的 tag 功能的增强。通过 git 提供的 tag 功能,我们可以给项目进行版本标识,以识别特定的版本,如v0.1.0v1.0.0等。而通过源码托管商提供的 release 功能,在 tag 的基础上我们可以添加编译好的二进制文件等,如.deb.exe等给特定的版本提供更多的信息,方便用户,也方便后期查找特定版本的程序。

Authorship: Lete乐特
Article Link: https://blog.imlete.cn/article/git-tag-release-distinction.html
Copyright: All posts on this blog are licensed under the CC BY-NC-SA 4.0 license unless otherwise stated. Please cite Lete乐特 's Blog !