为什么git-describe使用字母'g'为提交ID添加前缀?

MJD*_*MJD 26 git

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

some-tag-32-gf31f980
Run Code Online (Sandbox Code Playgroud)

where some-tag标记名称,32表示在使用该标记提交后所描述的提交是32次提交,并且gf31f980意味着提交ID被唯一缩写为f31f980.

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

只提取提交ID的正则表达式匹配可以搜索/-g([0-9a-f]+)$/.没有简单的方法来简化这一点; /-g(.*)$/例如,你不能这样做,因为它可能错误地匹配g标签名称中的a.没有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));
}
Run Code Online (Sandbox Code Playgroud)

搜索有关此信息的信息很难,因为相关术语g是一个禁用词.

有什么g用?

MJD*_*MJD 27

Jesse Luehrs在Twitter上立即指出这个问题在git-describe手册页中得到了解答:

"g"前缀代表"git",用于根据管理软件的SCM描述软件版本.

  • 有没有办法去掉g? (5认同)