一抑堡、Git 標(biāo)簽 tags
標(biāo)簽 tag 是某個(gè)提交 commit 的指針涌矢,一個(gè)提交可以有多個(gè)標(biāo)簽掖举。
1.1 git tag
查看倉庫中所有分支的全部標(biāo)簽:
mcdx@ubuntu:~/git/flasky$ git tag
10a
10b
10c
10d
11a
11b
11c
11d
11e
11f
11g
11h
... ...
... ...
如果一個(gè)版本在多個(gè)分支上都有,那么在多個(gè)分支上都能看到這個(gè)標(biāo)簽娜庇。本地標(biāo)簽存在倉庫主目錄中的 .git/refs/tags
目錄下塔次。
1.2 git show [標(biāo)簽名]
查看某個(gè)標(biāo)簽的詳情,舉例查看標(biāo)簽 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 [標(biāo)簽名] [版本號(hào)]
對(duì)某個(gè)版本號(hào)創(chuàng)建標(biāo)簽名秀,該命令創(chuàng)建的是輕標(biāo)簽励负,對(duì)當(dāng)前版本創(chuàng)建標(biāo)簽時(shí)可省略版本號(hào):
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
一個(gè)版本號(hào)能否創(chuàng)建多個(gè)標(biāo)簽?可以的匕得,雖然沒啥實(shí)際意義:
mcdx@ubuntu:~/git/jpt$ git tag haha1.3
mcdx@ubuntu:~/git/jpt$ git tag
haha1.1
haha1.2
haha1.3
1.4 git tag [標(biāo)簽名] -m '[備注信息]' [版本號(hào)]
加一個(gè) -m 參數(shù)創(chuàng)建備注標(biāo)簽或者叫附注標(biāo)簽继榆,同樣對(duì)當(dāng)前版本創(chuàng)建標(biāo)簽時(shí)可省略版本號(hào):
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 [標(biāo)簽名]
刪除標(biāo)簽:
mcdx@ubuntu:~/git/jpt$ git tag
haha1.1
haha1.2
haha1.3
xixi1.1
mcdx@ubuntu:~/git/jpt$ git tag -d haha1.3
已刪除標(biāo)簽 'haha1.3'(曾為 ff4e669)
mcdx@ubuntu:~/git/jpt$ git tag
haha1.1
haha1.2
xixi1.1
1.6 git push origin [標(biāo)簽名]
推送標(biāo)簽到遠(yuǎn)程倉庫,也就是 GitHub 上:
mcdx@ubuntu:~/git/jpt$ git push origin haha1.1
Username for 'https://github.com': Manchangdx
Password for 'https://Manchangdx@github.com':
對(duì)象計(jì)數(shù)中: 3, 完成.
壓縮對(duì)象中: 100% (2/2), 完成.
寫入對(duì)象中: 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
這個(gè)標(biāo)簽 haha1.1 是本地分支 dev 中的最新提交的標(biāo)簽,雖然遠(yuǎn)程倉庫里沒有這個(gè)分支裕照,更沒有這個(gè)版本號(hào)攒发,但標(biāo)簽卻可以成功推送调塌。推送標(biāo)簽成功后晋南,在 GitHub 倉庫里會(huì)新增一個(gè) tag 和對(duì)應(yīng)的 release:
1.7 git push origin --tags
推送全部本地倉庫標(biāo)簽至遠(yuǎn)程倉庫:
mcdx@ubuntu:~/git/jpt$ git push origin --tags
Username for 'https://github.com': Manchangdx
Password for 'https://Manchangdx@github.com':
對(duì)象計(jì)數(shù)中: 1, 完成.
寫入對(duì)象中: 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/[標(biāo)簽名]
刪除遠(yuǎn)程倉庫的標(biāo)簽:
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.9 git fetch --tags
刷新本地隱式分支順便刷新了本地標(biāo)簽羔砾,此命令加 -p 會(huì)清除無效的本地隱式分支负间,但不會(huì)清除未推送到遠(yuǎn)端的本地標(biāo)簽,因?yàn)闃?biāo)簽都是顯式的姜凄。另外 git pull 命令也會(huì)拉取遠(yuǎn)程標(biāo)簽到本地政溃。
二、GitHub 版本 releases
如今我們可以興奮地宣布發(fā)布一個(gè)軟件產(chǎn)品的版本态秧,發(fā)布過程就是一個(gè)將軟件交付給最終用戶的工作流董虱。版本是具有修改日志和二進(jìn)制文件的一類對(duì)象,它們提供了 Git 工作流之外的完整項(xiàng)目歷史申鱼,它們也可以從存儲(chǔ)庫的主頁上被訪問愤诱。
發(fā)布版 release 附帶發(fā)布說明和下載軟件或源代碼的鏈接。按照許多 Git 項(xiàng)目的約定捐友,發(fā)布版本與 Git 的標(biāo)簽 tag 綁定淫半。您可以使用現(xiàn)有的標(biāo)簽,或者讓 release 在發(fā)布時(shí)創(chuàng)建標(biāo)簽匣砖。
release 是具有修改日志和二進(jìn)制文件的一級(jí)對(duì)象科吭,它可以代表超出 Git 架構(gòu)本身的一個(gè)特定時(shí)間點(diǎn)之前的所有項(xiàng)目歷史。也就是通過 release猴鲫,不但能夠通過源碼體現(xiàn)出項(xiàng)目歷史对人,還能通過已經(jīng)編譯好的二進(jìn)制文件來進(jìn)一步描述此時(shí)的項(xiàng)目狀態(tài)》鞴玻“超出 Git 架構(gòu)本身” 的意思則在于牺弄,Git 本身只能記錄項(xiàng)目修改,本質(zhì)上不適合將編譯好的項(xiàng)目二進(jìn)制文件記錄下來匣缘。而通過 release 則把項(xiàng)目二進(jìn)制文件保存了下來猖闪,方便用戶下載,也方便查找特定版本肌厨。
創(chuàng)建 release 需要通過源碼托管商的網(wǎng)頁操作界面來進(jìn)行培慌,一般會(huì)要求填寫 tag 名、分支以及相應(yīng)的發(fā)布說明柑爸,還可上傳編譯好的程序吵护、打包好的文件等。
標(biāo)簽是 git 中的概念,而 release 則是 Github馅而、碼云等源碼托管商所提供的更高層的概念祥诽。也就是說 git 本身是沒有 release 這個(gè)概念的,只有 tag瓮恭。兩者之間的關(guān)系則是雄坪,release 基于 tag,為 tag 添加更豐富的信息屯蹦,一般是編譯好的文件维哈。
release 是源碼托管商對(duì) Git 的 tag 功能的增強(qiáng)。通過 Git 提供的 tag 功能登澜,我們可以給項(xiàng)目進(jìn)行版本標(biāo)識(shí)阔挠,以識(shí)別特定的版本,如 v0.1.0脑蠕、v1.0.0 等购撼。而通過源碼托管商提供的 release 功能,在 tag 的基礎(chǔ)上我們可以添加編譯好的二進(jìn)制文件等谴仙,如 .deb迂求、.exe 等給特定的版本提供更多的信息,方便用戶狞甚,也方便后期查找特定版本的程序锁摔。
報(bào)錯(cuò)
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).