Git打標籤與版本控制規範

2022-02-21 16:12:08 字數 3337 閱讀 9269

本文適用於使用git做vcs(版本控制系統)的場景。

用過git的程式猿,都喜歡其分布式架構帶來的commit快感。不用像使用svn這種集中式版本管理系統,每一次提交**,都要為**衝突捏一把冷汗。

頻繁commit的背後,帶來的結果是一長串密密麻麻的提交記錄。

一旦專案出現問題,需要檢查某個節點的**問題,就會有點頭疼。

雖然有commit message,但還是有存在查詢困難和描述不清的問題。

本文的側重點,就是通過git的打標籤功能git tag來解決這個問題,並用semver(語義化版本控制規範)規範標籤的命名。

打標籤的作用,就是給專案的開發節點,加上語義化的名字,也即功能版本的別名。

打上標籤名的同時,寫上附帶資訊,可以方便專案日後維護過程中的回溯和複查。

另外,也可以通過標籤記錄,大致了解當前專案的向下相容性、api的修改和迭代情況。

// 命令格式

git tag -a 標籤名 -m "附註資訊"

// 示例

git tag -a v0.1.0 -m "完成了文章a和文章b的撰寫,耗費時間2h,感覺棒棒的!"

乙份文集等待出版,有a、b、c、d四篇。

現在通過git管理進度。

1.經過兩次commit操作,新增a.txtb.txt後,將**修改push到遠端倉庫。

倉庫圖表如下:

master -> * 新增b.txt

| * 新增a.txt

|* 初始化

2.給當前文集打個標籤,順便留個心情

// 打標籤

git tag -a v0.1.0 -m "完成了文章a和文章b的撰寫,耗費時間2h,感覺棒棒的!"

// push 標籤到遠端倉庫

git push origin v0.1.0

倉庫圖表如下:

master v0.1.0 -> * 新增b.txt

| * 新增a.txt

|* 初始化

3.再經過兩次commit操作,新增c.txtd.txt後,將**修改push到遠端倉庫。

倉庫圖表如下:

master -> * 新增d.txt

|* 新增c.txt

|v0.1.0 -> * 新增b.txt

| * 新增a.txt

|* 初始化

4.文集已經寫完,打個完結版的標籤

// 打標籤

// push 標籤到遠端倉庫

git push origin v1.0.0

倉庫圖表如下:

master v1.0.0 -> * 新增d.txt

|* 新增c.txt

|v0.1.0 -> * 新增b.txt

| * 新增a.txt

|* 初始化

5.過了段時間,我想知道文集在v0.1.0版本的情況

// 輸出v0.1.0的詳情

git show v0.1.0

// 輸出結果

tag v0.1.0

tagger: wall <[email protected]>

date: wed may 23 15:57:13 2018 +0800

完成了文章a和文章b的撰寫,耗費時間2h,感覺棒棒的!

commit 7107eb8b3f870cd864e3eb5b14f26184d73dd1e6 (tag: v0.1.0)

author: wall <[email protected]>

date: wed may 23 15:27:10 2018 +0800

新增b.txt

diff --git a/src/b.txt b/src/b.txt

new file mode 100644

index 0000000..f9ee20e

--- /dev/null

+++ b/src/b.txt

這裡,可以清晰地看到當時打標籤的內容和附註資訊。

還有另外乙個方便的點,就是不需要用hash字串表示的版本號去檢視更改。

以下是用版本號查詢的結果:

// 用版本號檢視

git show 7107eb8b3f870cd864e3eb5b14f26184d73dd1e6

// 輸出結果

commit 7107eb8b3f870cd864e3eb5b14f26184d73dd1e6 (tag: v0.1.0)

author: wall <[email protected]>

date: wed may 23 15:27:10 2018 +0800

新增b.txt

diff --git a/src/b.txt b/src/b.txt

new file mode 100644

index 0000000..f9ee20e

--- /dev/null

+++ b/src/b.txt

@@ -0,0 +1 @@

+this is b.

\ no newline at end of file

像上文的栗子,可以看出使用了v0.1.0v1.0.0打標籤。

其實,這裡遵循了一套語義化版本控制規範(semantic versioning)。

規範的概要如下:

版本格式:主版本號.次版本號.修訂號,版本號遞增規則如下:

主版本號:當你做了不相容的 api 修改,

次版本號:當你做了向下相容的功能性新增,

修訂號:當你做了向下相容的問題修正。

先行版本號及版本編譯資訊可以加到「主版本號.次版本號.修訂號」的後面,作為延伸。

為什麼要有這套規範,就是為了避免軟體管理的領域裡存在的,稱為「依賴地獄」的死亡之谷。

規範詳情,可以在下面的參考鏈結獲取。

[1] 語義化版本2.0

軟體版本號簡易控制規範

個人分類 研發管理和規範 版本控制規範用於確定軟體配置項的命名與版本號管理的規則,以確保清楚地 唯一地標識軟體的各個組成部分及其狀態,並建立這些部分之間的一致性關係。版本控制的範圍包括 源 用計算機程式語言編寫的源 檔案 文件 需求規格說明書 總體設計說明書 資料庫設計說明書 詳細設計說明書等描述軟...

版本控制與git

版本控制與git 自從第一台計算機出現,便出現了計算機語言 出現計算機語言之後,怎麼來管理這些 以及如何團隊協同合作開發一直成為業界頭疼的事 這篇文章便是介紹版本控制的發展史,以及如何實現版本管理的模型 下圖為版本控制的發展歷史 上圖基本上就是整個版本發展的歷史程序 1 patch diff 剛開始...

git版本回退打標籤分支合併

第一步 執行git log命令,檢視提交記錄,獲取版本號 提交記錄只顯示最近三次,放大螢幕可看多次,也可手動回車依次往前檢視,ctrl c停止 第二步 執行git reset hard 版本號 命令,這樣本地的 就成功回退到了你想要的版本,再次git log,本地的記錄也沒了,但當重新status的...