-
1. 開始
-
2. Git 基礎
- 2.1 取得一個 Git 倉儲
- 2.2 紀錄變更到版本庫中
- 2.3 檢視提交的歷史記錄
- 2.4 復原
- 2.5 與遠端協同工作
- 2.6 標籤
- 2.7 Git Aliases
- 2.8 總結
-
3. 使用 Git 分支
-
4. 伺服器上的 Git
- 4.1 通訊協定
- 4.2 在伺服器上佈署 Git
- 4.3 產生你的 SSH 公鑰
- 4.4 設定伺服器
- 4.5 Git 常駐程式
- 4.6 Smart HTTP
- 4.7 GitWeb
- 4.8 GitLab
- 4.9 第3方 Git 託管方案
- 4.10 總結
-
5. 分散式的 Git
-
6. GitHub
- 6.1 建立帳戶及設定
- 6.2 參與一個專案
- 6.3 維護專案
- 6.4 Managing an organization
- 6.5 Scripting GitHub
- 6.6 總結
-
7. Git 工具
- 7.1 Revision Selection
- 7.2 Interactive Staging
- 7.3 Stashing and Cleaning
- 7.4 Signing Your Work
- 7.5 Searching
- 7.6 Rewriting History
- 7.7 Reset Demystified
- 7.8 Advanced Merging
- 7.9 Rerere
- 7.10 Debugging with Git
- 7.11 Submodules
- 7.12 Bundling
- 7.13 Replace
- 7.14 Credential Storage
- 7.15 總結
-
8. Customizing Git
- 8.1 Git Configuration
- 8.2 Git Attributes
- 8.3 Git Hooks
- 8.4 An Example Git-Enforced Policy
- 8.5 Summary
-
9. Git and Other Systems
- 9.1 Git as a Client
- 9.2 Migrating to Git
- 9.3 Summary
-
10. Git Internals
- 10.1 Plumbing and Porcelain
- 10.2 Git Objects
- 10.3 Git References
- 10.4 Packfiles
- 10.5 The Refspec
- 10.6 Transfer Protocols
- 10.7 Maintenance and Data Recovery
- 10.8 Environment Variables
- 10.9 Summary
-
A1. 附錄 A: Git in Other Environments
- A1.1 Graphical Interfaces
- A1.2 Git in Visual Studio
- A1.3 Git in Eclipse
- A1.4 Git in Bash
- A1.5 Git in Zsh
- A1.6 Git in Powershell
- A1.7 Summary
-
A2. 附錄 B: Embedding Git in your Applications
- A2.1 Command-line Git
- A2.2 Libgit2
- A2.3 JGit
-
A3. 附錄 C: Git Commands
- A3.1 Setup and Config
- A3.2 Getting and Creating Projects
- A3.3 Basic Snapshotting
- A3.4 Branching and Merging
- A3.5 Sharing and Updating Projects
- A3.6 Inspection and Comparison
- A3.7 Debugging
- A3.8 Patching
- A3.9 Email
- A3.10 External Systems
- A3.11 Administration
- A3.12 Plumbing Commands
2.6 Git 基礎 - 標籤
標籤
跟大多數的版本管理系統一樣,Git 有能力對專案歷史中比較特別的時間點貼標籤,來表示其重要性。
通常大家都會用這個功能來標出發行版本,如 v1.0
…等等。
在這個章節中,你將會學到如何列出所有的標籤,如何建立新的標籤和各種不同的標籤類型。
列出你的標籤
想要列出 Git 中所有標籤的方法非常直覺。
只要輸入 git tag
如下:
$ git tag
v0.1
v1.3
這個指令將依字母序列出所有標籤;雖然說標籤用什麼方式列出不是很重要。
你也可以使用特定的 pattern 來搜尋標籤。 舉例來說,在 Git 原始碼的版本庫中,已經包含了超過 500 個標籤。 如果你只想看到 1.8.5 系列的標籤,你可以執行以下指令:
$ git tag -l "v1.8.5*"
v1.8.5
v1.8.5-rc0
v1.8.5-rc1
v1.8.5-rc2
v1.8.5-rc3
v1.8.5.1
v1.8.5.2
v1.8.5.3
v1.8.5.4
v1.8.5.5
建立新的標籤
Git 主要使用兩種類型的標籤:輕量級標籤和有註解的標籤。
一個輕量級的標籤就像是一個不會移動的分支——這個標籤只會指向一個特定的提交。
然而,有註解的標籤,會在 Git 的資料庫中儲存成完整的物件。 它們將被計算校驗碼;包含貼標籤那個人的名字、電子郵件和日期;能夠紀錄一個標籤訊息;並且可以簽署及透過 GNU Privacy Guard (GPG) 驗證。 通常建議你可以建立一個有註解的標籤,以便你可以保留跟這個標籤有關的所有資訊;但是你如果只想要一個暫時的標籤,或是因為某些原因不想保留額外的資訊,你也可以只用輕量級標籤。
有註解的標籤
建立一個有註解的標籤很簡單。
最簡單的方法是在你建立標籤時,同時指定 -a
的選項如下:
$ git tag -a v1.4 -m "my version 1.4"
$ git tag
v0.1
v1.3
v1.4
指令中的 -m
選項後面同時指定了一個標籤訊息,這個訊息會和這個標籤一起保存。
如果你沒有為標籤指定一個訊息,那麼 Git 會開啟你的編輯器以便你輸入。
當你使用 git show
指令時,你可以查看標籤的資訊,還有這個標籤所標記的提交資訊如下:
$ git show v1.4
tag v1.4
Tagger: Ben Straub <ben@straub.cc>
Date: Sat May 3 20:19:12 2014 -0700
my version 1.4
commit ca82a6dff817ec66f44342007202690a93763949
Author: Scott Chacon <schacon@gee-mail.com>
Date: Mon Mar 17 21:52:11 2008 -0700
changed the version number
這樣就可以在提交資訊前顯示出標籤的資訊、標籤被建立的時間以及標籤的訊息。
輕量級標籤
另外一種能標記提交的標籤是輕量級標籤。
這基本上是把該提交的校驗碼存在一個檔案中,不包含其他資訊。
如果想要建立一個輕量級的標籤,不要指定 -a
、-s
或 -m
的選項如下:
$ git tag v1.4-lw
$ git tag
v0.1
v1.3
v1.4
v1.4-lw
v1.5
此時如果對該標籤使用 git show
,你將不會看到這個標籤的額外資訊。
這個指令就只會顯示標籤所在的提交資訊:
$ git show v1.4-lw
commit ca82a6dff817ec66f44342007202690a93763949
Author: Scott Chacon <schacon@gee-mail.com>
Date: Mon Mar 17 21:52:11 2008 -0700
changed the version number
對以前的提交貼標籤
你也可以對過去的提交貼標籤。 假設你的提交歷史看起來如下:
$ git log --pretty=oneline
15027957951b64cf874c3557a0f3547bd83b3ff6 Merge branch 'experiment'
a6b4c97498bd301d84096da251c98a07c7723e65 beginning write support
0d52aaab4479697da7686c15f77a3d64d9165190 one more thing
6d52a271eda8725415634dd79daabbc4d9b6008e Merge branch 'experiment'
0b7434d86859cc7b8c3d5e1dddfed66ff742fcbc added a commit function
4682c3261057305bdd616e23b64b0857d832627b added a todo file
166ae0c4d3f420721acbb115cc33848dfcc2121a started write support
9fceb02d0ae598e95dc970b74767f19372d61af8 updated rakefile
964f16d36dfccde844893cac5b347e7b3d44abbc commit the todo
8a5cbc430f1a9c3d00faaeffd07798508422908a updated readme
現在,假設你忘記在專案的「updated rakefile」提交貼 v1.2 的標籤。 你可以在後來再補貼標籤。 要在那個提交上面貼標籤,你需要在指令後面指定那個提交的校驗碼(可以省略後半段):
$ git tag -a v1.2 9fceb02
你可以看到你已經在那個提交上面貼標籤了:
$ git tag
v0.1
v1.2
v1.3
v1.4
v1.4-lw
v1.5
$ git show v1.2
tag v1.2
Tagger: Scott Chacon <schacon@gee-mail.com>
Date: Mon Feb 9 15:32:16 2009 -0800
version 1.2
commit 9fceb02d0ae598e95dc970b74767f19372d61af8
Author: Magnus Chacon <mchacon@gee-mail.com>
Date: Sun Apr 27 20:43:35 2008 -0700
updated rakefile
...
分享標籤
git push
指令預設不會傳送標籤到遠端伺服器。
在你建立標籤後,你必須明確的要求 Git 將標籤推送到共用的伺服器上面。
這個動作就像是在分享遠端分支一樣——你可以執行 git push origin [tagname]
。
$ git push origin v1.5
Counting objects: 14, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (12/12), done.
Writing objects: 100% (14/14), 2.05 KiB | 0 bytes/s, done.
Total 14 (delta 3), reused 0 (delta 0)
To git@github.com:schacon/simplegit.git
* [new tag] v1.5 -> v1.5
如果想要一次推送很多標籤,也可以在使用 git push
指令的時候加上 --tags
選項。
這將會把你所有不在伺服器上面的標籤傳送給遠端伺服器。
$ git push origin --tags
Counting objects: 1, done.
Writing objects: 100% (1/1), 160 bytes | 0 bytes/s, done.
Total 1 (delta 0), reused 0 (delta 0)
To git@github.com:schacon/simplegit.git
* [new tag] v1.4 -> v1.4
* [new tag] v1.4-lw -> v1.4-lw
現在,當其他人從版本庫克隆或拉取時,他們就能同時拿到你所貼的標籤,
檢出標籤
在 Git 中你不能真的檢出一個標籤,因為它們並不能像分支一樣四處移動。
如果你希望工作目錄和版本庫中特定的標籤版本完全一樣,你可以使用 git checkout -b [branchname] [tagname]
在該標籤上建立一個新分支:
$ git checkout -b version2 v2.0.0
Switched to a new branch 'version2'
當然,如果在建立新分支以後又進行了一次提交,version2
分支將會和 v2.0.0
標籤有所差異,因為這個分支已經因為你的提交而改變了,請特別小心。