簡體   English   中英

使用不帶標簽的 Git 描述

[英]Using Git describe without tags

我有一個存儲庫,當我運行git describe時,它只給我一個哈希值。 直到今天我才知道它這樣做是因為--always選項(這是我正在使用的),因為該存儲庫沒有標簽。 我有另一個包含很多標簽的存儲庫。

我如何使用git describe來排除標簽並只給我一個哈希值? 我想要git describe的所有其他功能,以防我需要使用其他功能,例如臟標記; 我只想排除標簽。 這是可能的,還是標簽是describe的核心特征?

幫助頁面似乎確實表明了這一點,但我只是想確定一下。 我在 Ant build.xml 文件中使用它,所以我盡量保持簡單。

一種簡單的方法是將--always-exclude選項結合使用,使用*的 glob 模式,以排除所有標記。 因為它找不到任何未排除的標簽,describe 將退回到縮寫的 sha1 加上可選的“-dirty”等。

$ git describe --always --dirty --abbrev=5 
2018.02-rc1-58-gca0e6
$ git describe --always --dirty --abbrev=5 --exclude '*'
ca0e6

是的,但這不一定是個好主意。 一個--all選項,它將搜索分支名稱——或者實際上,所有引用——以及,但如果你使用它,你可能還需要--long

描述

git describe輸出的核心特征是它以(或應該)人類可讀的名稱開頭:

v1.2.3

為此,如有必要,Git 將添加一個后綴,指示當前(或請求的)提交與此字符串所命名的不完全相同 后綴告訴你和 Git 偏離標簽的程度。 如果沒有后綴,則標記本身會命名提交。 因為標簽從不移動,如果我們有那個名字,我們保證2使用那個名字找到正確的提交。

使用沒有標簽且沒有--always的存儲庫:

$ git describe
fatal: No names found, cannot describe anything.

但是,如果我們添加--all ,我們可能會得到:

$ git describe --all
heads/master

一個人類可讀的名稱,但它有一個問題:它不能唯一地標識一個特定的提交,因為分支名稱移動。 一旦我在此存儲庫中進行了新的提交, refs/heads/master現在會命名一個不同的提交。

由於來自git describe的這些輸出之一的通常意圖是提供一個人類可讀但准確指定提交的 ID,因此分支名稱從來都不是那么准確,不一定是一件好事。

可以添加--long

$ git describe --all --long
heads/master-0-g2cbd83f

這現在使用-g...后綴來指定實際哈希 ID 的前綴。 現在 Git 可以驗證master本身沒有移動,或者如果移動了,您可以使用2cbd83f字符串來查找提交。


1嗯,幾乎沒有。 請參閱git-tag文檔,了解何時、為何以及為何不移動標簽。

2無論如何,保證標簽沒有移動。

由於來自git describe的這些輸出之一的通常意圖是提供一個人類可讀但准確指定提交的 ID

根據 Git 2.20,這就是官方git describe --long必須做的

請參閱Frederick Eaton (``)提交 55f6bce提交 6271d94提交 c263279 (2018 年 9 月 19 日)。
(由Junio C Hamano 合並gitster 提交 fb468f0,2018年 10 月 16 日)

git-describe.1 :闡明“人類可讀”也是 git 可讀的

標題使用術語“人類可讀”,但描述並未在上下文中對此進行解釋。

手冊頁現在包括:

結果是一個“人類可讀”的對象名稱,它也可以用來識別對其他 git 命令的提交。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM