为什么git-describe在提交ID前加上字母' g'?

时间:2014-05-29 17:22:39

标签: git

git-describe的典型输出看起来像

some-tag-32-gf31f980

其中some-tag是标记名称,32表示在使用该标记提交后所描述的提交为32次提交,gf31f980表示提交ID唯一缩写为{ {1}}。

我的问题是关于f31f980中的g。为什么会这样?我的第一个想法是插入它来消除gf31f980输出的解析。但我无法想到它实际上有助于它的任何情况。例如,可能省略git-describe组件,并且无法知道上面的输出描述了在标记32之后提交32提交,而不是在 >标签some-tag。但是some-tag-32对此没有帮助。

仅提取提交ID的正则表达式匹配可以搜索g。没有简单的方法来简化这一点;例如,您无法执行/-g([0-9a-f]+)$/,因为这可能会错误地匹配标记名称中的/-g(.*)$/。如果没有g您仍然可以g,那么/-([0-9a-f]+)$/并没有帮助您。非正则表达式解析过程的行为类似。

明确生成g;相关的源代码(g的第240行左右)是:

builtin/describe.c

很难搜索相关信息,因为相关术语static void show_suffix(int depth, const unsigned char *sha1) { printf("-%d-g%s", depth, find_unique_abbrev(sha1, abbrev)); } 是一个禁用词。

什么是g

2 个答案:

答案 0 :(得分:24)

Jesse Luehrs immediately pointed out on Twitter此问题已在git-describe man page

中得到解答
  

" g"前缀代表" git"并且是          用于允许根据软件的SCM描述软件的版本          用。管理。

答案 1 :(得分:0)

在 Git 2.33(2021 年第 3 季度)中,“-g”前缀(已在 Git v1.1.0, commit 908e531, Dec. 2005 中引入:

参见commit bfe35a6Anders Höckersten (ahockersten)(2021 年 5 月 17 日)。
(2021 年 6 月 10 日于 Junio C Hamano -- gitster --commit d8c6dc2 合并)

<块引用>

describe-doc:明确缩写的默认长度

签字人:Anders Höckersten

<块引用>

澄清用于 git describe 提交的缩写形式的默认长度。

该行为已在 Git 2.11.0 中进行了修改,但未更新文档以阐明新行为。

git describe 现在包含在其 man page 中:

<块引用>

而不是使用默认的十六进制数字(其中 将根据存储库中的对象数量而变化 缩写对象名称的默认值 7),使用 <n> 数字,或 形成唯一对象名称所需的任意数量的数字。

git describe 现在包含在其 man page 中:

<块引用>

哈希后缀是“-g”+提示提交的明确缩写 的父(2414721b194453f058079d897d13c4e377f92dc6)。这 缩写的长度随着存储库的增长而扩展,使用 存储库中对象的大致数量和一些数学知识 围绕生日悖论,默认为最小 7。