Git 标签 tags 和 GitHub 版本 releases

一、Git 标签 tags

标签 tag 是某个提交 commit 的指针,一个提交可以有多个标签。

1.1 git tag 查看仓库中所有分支的全部标签:

mcdx@ubuntu:~/git/flasky$ git tag
10a
10b
10c
10d
11a
11b
11c
11d
11e
11f
11g
11h
    ... ...
    ... ...

如果一个版本在多个分支上都有,那么在多个分支上都能看到这个标签。本地标签存在仓库主目录中的 .git/refs/tags 目录下。

1.2 git show [标签名] 查看某个标签的详情,举例查看标签 16a 的详情:

mcdx@ubuntu:~/git/flasky$ git show 16a
commit 59499244f764a67ba6045c3f6ad9dfdb95068a9c
Author: Miguel Grinberg <miguel.grinberg@gmail.com>
Date:   Tue Jul 18 07:55:50 2017 -0700

    Chapter 16: Logging of slow database queries (16a)

diff --git a/app/main/views.py b/app/main/views.py
index 68acd9c..5b30b24 100644
    ... ...
    ... ...

1.3 git tag [标签名] [版本号] 对某个版本号创建标签,该命令创建的是轻标签,对当前版本创建标签时可省略版本号:

mcdx@ubuntu:~/git/jpt$ git tag
haha1.1
mcdx@ubuntu:~/git/jpt$ git tag haha1.2
mcdx@ubuntu:~/git/jpt$ git tag
haha1.1
haha1.2

一个版本号能否创建多个标签?可以的,虽然没啥实际意义:

mcdx@ubuntu:~/git/jpt$ git tag haha1.3
mcdx@ubuntu:~/git/jpt$ git tag
haha1.1
haha1.2
haha1.3

1.4 git tag [标签名] -m '[备注信息]' [版本号] 加一个 -m 参数创建备注标签或者叫附注标签,同样对当前版本创建标签时可省略版本号:

mcdx@ubuntu:~/git/jpt$ git tag xixi1.1 -m 'fuzhubiaoqian'
mcdx@ubuntu:~/git/jpt$ git tag
haha1.1
haha1.2
haha1.3
xixi1.1
mcdx@ubuntu:~/git/jpt$ git show xixi1.1 
tag xixi1.1
Tagger: Manchangdx <1195581533@qq.com>
Date:   Wed Feb 13 13:49:39 2019 +0800

fuzhubiaoqian

commit ff4e669a7aad849d5379e874390be98fcc026feb
Author: LouPlus <34020606+LouPlus@users.noreply.github.com>
    ... ...
    ... ...

1.5 git tag -d [标签名] 删除标签:

mcdx@ubuntu:~/git/jpt$ git tag
haha1.1
haha1.2
haha1.3
xixi1.1
mcdx@ubuntu:~/git/jpt$ git tag -d haha1.3
已删除标签 'haha1.3'(曾为 ff4e669)
mcdx@ubuntu:~/git/jpt$ git tag
haha1.1
haha1.2
xixi1.1

1.6 git push origin [标签名] 推送标签到远程仓库,也就是 GitHub 上:

mcdx@ubuntu:~/git/jpt$ git push origin haha1.1
Username for 'https://github.com': Manchangdx
Password for 'https://Manchangdx@github.com': 
对象计数中: 3, 完成.
压缩对象中: 100% (2/2), 完成.
写入对象中: 100% (3/3), 291 bytes | 0 bytes/s, 完成.
Total 3 (delta 1), reused 0 (delta 0)
remote: Resolving deltas: 100% (1/1), completed with 1 local object.
To https://github.com/LouPlus/jpt
 * [new tag]         haha1.1 -> haha1.1

这个标签 haha1.1 是本地分支 dev 中的最新提交的标签,虽然远程仓库里没有这个分支,更没有这个版本号,但标签却可以成功推送。推送标签成功后,在 GitHub 仓库里会新增一个 tag 和对应的 release:

1.6 GitHub 仓库新增 release 截图

1.7 git push origin --tags 推送全部本地仓库标签至远程仓库:

mcdx@ubuntu:~/git/jpt$ git push origin --tags 
Username for 'https://github.com': Manchangdx
Password for 'https://Manchangdx@github.com': 
对象计数中: 1, 完成.
写入对象中: 100% (1/1), 166 bytes | 0 bytes/s, 完成.
Total 1 (delta 0), reused 0 (delta 0)
To https://github.com/LouPlus/jpt
 * [new tag]         haha1.2 -> haha1.2
 * [new tag]         xixi1.1 -> xixi1.1

1.8 git push origin :ref/tags/[标签名] 删除远程仓库的标签:

mcdx@ubuntu:~/git/jpt$ git push origin :refs/tags/haha1.2
Username for 'https://github.com': Manchangdx
Password for 'https://Manchangdx@github.com': 
To https://github.com/LouPlus/jpt
 - [deleted]         haha1.2
1.8 删除标签成功后,GitHub 页面的截图

1.9 git fetch --tags 刷新本地隐式分支顺便刷新了本地标签,此命令加 -p 会清除无效的本地隐式分支,但不会清除未推送到远端的本地标签,因为标签都是显式的。另外 git pull 命令也会拉取远程标签到本地。

二、GitHub 版本 releases

如今我们可以兴奋地宣布发布一个软件产品的版本,发布过程就是一个将软件交付给最终用户的工作流。版本是具有修改日志和二进制文件的一类对象,它们提供了 Git 工作流之外的完整项目历史,它们也可以从存储库的主页上被访问。

发布版 release 附带发布说明和下载软件或源代码的链接。按照许多 Git 项目的约定,发布版本与 Git 的标签 tag 绑定。您可以使用现有的标签,或者让 release 在发布时创建标签。

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

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

标签是 git 中的概念,而 release 则是 Github、码云等源码托管商所提供的更高层的概念。也就是说 git 本身是没有 release 这个概念的,只有 tag。两者之间的关系则是,release 基于 tag,为 tag 添加更丰富的信息,一般是编译好的文件。

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

报错
In Unix systems the end of a line is represented with a line feed (LF). In windows a line is represented with a carriage return (CR) and a line feed (LF) thus (CRLF).

解决办法

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,098评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,213评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 149,960评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,519评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,512评论 5 364
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,533评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,914评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,574评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,804评论 1 296
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,563评论 2 319
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,644评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,350评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,933评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,908评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,146评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,847评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,361评论 2 342