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
?
答案 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 bfe35a6的Anders 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。