如何使用git describe匹配隐藏的引用

时间:2015-07-29 19:52:38

标签: git

deriving version numbers from a git repository似乎是匹配版本号的好方法,但我的方案有点不同。

我生成的版本号我想创建隐藏的引用(因此默认情况下它们不会发送给其他客户端)。我不希望客户在他们的提取上看到一堆版本流失。

问题是, - match仅适用于标签,即使您使用--all标志。

示例:

  

git update-ref refs / _v.master.0.1 c2897c8338e02b99644640f3afb829c04cb48439

这会创建隐藏的参考

  

git describe --all c2897c8338e02b99644640f3afb829c04cb48439
  _v.master.0.1 [显示]

然而这并没有任何回报:

  

git describe --match _v * --all c2897c8338e02b99644640f3afb829c04cb48439
  致命的:找不到名字,不能描述任何东西。

我在documentation中看到--match"只考虑与给定的glob(7)模式匹配的标签",但这似乎很蹩脚,匹配应适用于任何参考类型,假设其他修饰符(-all --tags等)限制了ref类型的范围。

我还有其他办法吗?我想到的一种方法是在一个客户端上创建标签,并将它们(在推送和获取时间)映射到隐藏的refs到/来自原点,但这似乎是很多额外的工作。如果不是客户端,我上面提到的ref匹配是否可用?

提前感谢!

1 个答案:

答案 0 :(得分:0)

您必须使用Git 2.14.x / 2.15(2017年第4季度)

进行检查
  

&#34; git describe --match <pattern>&#34;已被教导要好好玩   &#34; --all&#34;选项。

commit 6d68b2aMax Kirillov (max630)(2017年9月20日) Junio C Hamano -- gitster --合并于commit 8c1bc7c,2017年9月29日)

  

describe:教--match处理分支和遥控器

     

git describe使用--match时,它基本上只匹配标记   即使指定了--all参数,也会忽略它。

     

通过匹配分支名称和$remote_name/$remote_branch_name来修复它,   用于具有指定模式的远程跟踪参考   相应地更新文档并添加测试。

它还涉及负面模式:

  

例如,假设您希望找到第一个正式发布标记   包含某个提交。如果我们假设官方发布标签   形式为&#34; v*&#34;和预发布的候选人包括&#34; *rc*&#34;在他们的   name,我们现在可以找到引入提交的第一个release标记   abcdef

git describe --contains --match="v*" --exclude="*rc*" abcd

请注意,Git 2.16.x / 2.17(2018年第一季度)将恢复&#34; git describe --all&#34;的正确输出。 请commit 1bba001查看Daniel Knittl-Frank (knittl)(2017年12月11日) (由Junio C Hamano -- gitster --合并于commit fac64e0,2018年1月23日)

  

describe:prepend&#34; tags/&#34;描述具有嵌入名称

的标签时      

&#34; git describe&#34;的手册页命令解释了预期   使用--all选项时的输出,即完整的参考路径   显示,包括heads/tags/前缀。

     

212945d(&#34;教git-describe   在输出&#34;,2008年2月28日,v1.5.5-rc0)之前验证带注释的标签名称使得Git更喜欢带注释标签的嵌入名称,它意外地改变了输出   在给出--all标志时格式化,只打印标签的名称   没有前缀。

     

检查是否指定了--all并重新添加&#34; tags/&#34;这个的前缀   修复回归的特例。